BookDelivery APIbookdelivery.com ↗
Search BookDelivery's US storefront by ISBN or product URL. Get price, condition, stock status, publisher, and fast-shipping eligibility for any book listing.
What is the BookDelivery API?
The BookDelivery API exposes 2 endpoints covering the US storefront (us-en), returning up to 9 structured fields per listing including price, condition, stock status, and fast-shipping eligibility. Use get_book_details to retrieve full metadata from a product page URL, or search_by_isbn to look up listings by ISBN-13 and receive a ranked results array with direct product URLs.
curl -X GET 'https://api.parse.bot/scraper/cd0fa5f5-0b09-4e85-88b9-bc1db1921a1e/get_book_details?url=https%3A%2F%2Fwww.bookdelivery.com%2Fint-en%2Fbook-en-agosto-nos-vemos%2F9786287638358%2Fp%2F55900262' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace bookdelivery-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
BookDelivery US Book API Client
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Optional
class ParseClient:
"""Client for BookDelivery US Book API via Parse.bot"""
def __init__(self, api_key: Optional[str] = None):
self.base_url = "https://api.parse.bot"
self.scraper_id = "cd0fa5f5-0b09-4e85-88b9-bc1db1921a1e"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError("API key required. Set PARSE_API_KEY environment variable or pass api_key parameter.")
def _call(self, endpoint: str, method: str = "POST", **params) -> dict:
"""Make API call to Parse.bot scraper"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}
if method == "GET":
response = requests.get(url, headers=headers, params=params)
elif method == "POST":
response = requests.post(url, headers=headers, json=params)
else:
raise ValueError(f"Unsupported method: {method}")
response.raise_for_status()
return response.json()
def get_book_details(self, url: str) -> dict:
"""
Get detailed information about a book from its product page URL.
Args:
url: Product page URL (full or relative path)
Returns:
Dictionary with book details including title, author, price, condition, etc.
"""
return self._call("get_book_details", method="GET", url=url)
def search_by_isbn(self, isbn: str) -> dict:
"""
Search for books by ISBN-13 on the US storefront.
Args:
isbn: 13-digit ISBN-13 number (e.g., 9780141036144)
Returns:
Dictionary with search results array and total count
"""
return self._call("search_by_isbn", method="GET", isbn=isbn)
def main():
"""Practical workflow: search for books and get detailed information"""
# Initialize client
client = ParseClient()
# Example ISBNs to search for
search_isbns = [
"9780141036144", # 1984 by George Orwell
"9780008753832", # Hooked by Asako Yuzuki
]
all_books = []
# Search for each ISBN and collect results
print("=" * 60)
print("SEARCHING FOR BOOKS BY ISBN")
print("=" * 60)
for isbn in search_isbns:
print(f"\nSearching for ISBN: {isbn}...")
try:
search_results = client.search_by_isbn(isbn)
if search_results.get("results"):
for book in search_results["results"]:
print(f" Found: {book['title']} by {book['author']}")
print(f" Price: ${book['price']} {book['currency']}")
print(f" Condition: {book['condition']}")
print(f" In Stock: {book['in_stock']}")
all_books.append(book)
else:
print(f" No results found for ISBN {isbn}")
except Exception as e:
print(f" Error searching for ISBN {isbn}: {e}")
# Get detailed information for books with product URLs
print("\n" + "=" * 60)
print("GETTING DETAILED BOOK INFORMATION")
print("=" * 60)
for book in all_books:
if "product_url" in book:
print(f"\nFetching details for: {book['title']}")
try:
details = client.get_book_details(book["product_url"])
print(f" Title: {details['title']}")
print(f" Author: {details['author']}")
print(f" Publisher: {details['publisher']}")
print(f" ISBN: {details['isbn']}")
print(f" Price: ${details['price']} {details['currency']}")
print(f" Condition: {details['condition']}")
print(f" Stock Status: {'In Stock' if details['in_stock'] else 'Out of Stock'}")
print(f" Fast Shipping: {'Yes' if details['fast_shipping'] else 'No'}")
except Exception as e:
print(f" Error fetching details: {e}")
# Summary
print("\n" + "=" * 60)
print("SUMMARY")
print("=" * 60)
print(f"Total books searched: {len(search_isbns)}")
print(f"Total books found: {len(all_books)}")
if all_books:
in_stock_count = sum(1 for book in all_books if book.get("in_stock"))
print(f"Books in stock: {in_stock_count}")
avg_price = sum(book.get("price", 0) for book in all_books) / len(all_books)
print(f"Average price: ${avg_price:.2f}")
if __name__ == "__main__":
main()Get detailed information about a book from its product page URL on the international storefront. Returns title, author, publisher, ISBN, price, currency, condition (New/Used), stock availability, and whether the book qualifies for fast shipping (in local warehouse).
| Param | Type | Description |
|---|---|---|
| urlrequired | string | Product page URL. Accepts full URL (https://www.bookdelivery.com/int-en/book-{slug}/{isbn}/p/{product_id}) or relative path (/int-en/book-{slug}/{isbn}/p/{product_id}). |
{
"type": "object",
"fields": {
"isbn": "string - ISBN-13",
"price": "number - price in the listed currency",
"title": "string - book title",
"author": "string - author name",
"currency": "string - currency code (e.g. USD)",
"in_stock": "boolean - whether the book is currently in stock",
"condition": "string - New or Used",
"publisher": "string - publisher name",
"fast_shipping": "boolean - whether the book qualifies for fast shipping from local warehouse"
},
"sample": {
"data": {
"isbn": "9786287638358",
"price": 17.69,
"title": "En agosto nos vemos (in Spanish)",
"author": "Gabriel García Márquez",
"currency": "USD",
"in_stock": true,
"condition": "New",
"publisher": "Random House",
"fast_shipping": true
},
"status": "success"
}
}About the BookDelivery API
Endpoints
The get_book_details endpoint accepts a full BookDelivery product page URL in the format https://www.bookdelivery.com/us-en/book-{slug}/{isbn}/p/{product_id}. It returns a flat object with title, author, publisher, isbn, price, currency, condition (either New or Used), in_stock (boolean), and fast_shipping (boolean). The fast_shipping field indicates whether the copy is held in a local warehouse, which affects delivery speed.
ISBN Search
The search_by_isbn endpoint takes a 13-digit isbn string and queries the US storefront. The response includes a total integer and a results array of book listing objects. Each result carries the same core fields as get_book_details plus the product page URL, so you can chain directly into get_book_details for deeper data. When exactly one match is found, BookDelivery redirects to the product page and the API extracts details from there automatically.
Coverage and Scope
Both endpoints target the us-en storefront specifically, so pricing is returned in USD and availability reflects US inventory. The condition field distinguishes new from used copies at the listing level. There is no endpoint for searching by title, author, or category — ISBN-based lookup and direct product URL are the two supported access patterns.
The BookDelivery API is a managed, monitored endpoint for bookdelivery.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bookdelivery.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official bookdelivery.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Compare
priceandconditionacross multiple ISBNs to surface the cheapest available copy. - Check
in_stockandfast_shippingstatus before routing a customer order through BookDelivery. - Build a book price tracker that polls
get_book_detailson a schedule and alerts on price changes. - Enrich an internal book catalog with
publisher,author, andisbnfields from a product URL. - Validate ISBN-13 inventory status programmatically before listing a book on a resale platform.
- Filter search results by
conditionto find new-only listings for a wishlist service.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does BookDelivery offer an official developer API?+
What does the `fast_shipping` field actually mean?+
get_book_details and results from search_by_isbn. A value of true means the copy is stocked in a local warehouse, which typically results in faster domestic delivery compared to copies shipped from abroad.Does the API cover used book listings or only new copies?+
condition field in every response is either New or Used, and the search_by_isbn results array can contain multiple listings at different conditions and prices for the same ISBN.Can I search by title, author, or keyword instead of ISBN?+
search_by_isbn and direct product page retrieval via get_book_details. You can fork this API on Parse and revise it to add a keyword or title-based search endpoint.