Discover/Umich API
live

Umich APIquod.lib.umich.edu

Browse, search, and retrieve metadata from U-M Library Digital Collections. Access item details, full text, and IIIF image data across all collections.

Endpoint health
verified 4d ago
list_collections
search_collection
get_item_fulltext
search_all_collections
get_collection_detail
7/7 passing latest checkself-healing
Endpoints
7
Updated
26d ago

What is the Umich API?

This API exposes 7 endpoints for accessing the University of Michigan Library Digital Collections, covering collection listings, cross-collection search, item metadata, full text, and IIIF image information. Use search_all_collections to run keyword queries across all digitized holdings, or get_item_detail to retrieve structured bibliographic metadata — including author, publication, subject terms, and rights — for any specific item.

Try it
Filter by access level (passed as byAccess query param to the upstream site)
Filter by format type (passed as byFormat query param to the upstream site)
Filter by subject area (passed as bySubject query param to the upstream site)
api.parse.bot/scraper/cf828251-187b-4069-a1bb-10ea0cccbcc4/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/cf828251-187b-4069-a1bb-10ea0cccbcc4/list_collections' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 quod-lib-umich-edu-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.

from parse_apis.umich_digital_collections_api import UMichLibrary, Collection, CollectionSummary, Item, ItemDetail

library = UMichLibrary()

# List all available collections
for coll_summary in library.collections.list(limit=5):
    print(coll_summary.id, coll_summary.title, coll_summary.description[:80])

# Get full details on a specific collection
collection = library.collection(id="alajournals")
detail = collection.search(query="lincoln", limit=3)

# Search within a collection and access items
for item in collection.search(query="lincoln", limit=3):
    print(item.id, item.title)

# Cross-collection search
for item in library.items.search(query="university", limit=5):
    print(item.id, item.title, item.url)

# Navigate from collection to item detail via sub-resource
item_detail = library.collection(id="alajournals").items.get(item_id="0064218.1910.001")
print(item_detail.title, item_detail.collection_id, item_detail.url)

for entry in item_detail.toc:
    print(entry.label, entry.url)

# Get full text of an item
fulltext = item_detail.fulltext()
print(fulltext.id, fulltext.collection_id, fulltext.text[:200])

# Get image metadata for a page
img_meta = item_detail.image_metadata(image_id="00000001")
print(img_meta.width, img_meta.height, img_meta.id)

for tile in img_meta.tiles:
    print(tile.width, tile.height, tile.scale_factors)
All endpoints · 7 totalmissing one? ·

List all digital collections from the University of Michigan Library. Returns an array of collections with titles, descriptions, and IDs. Supports optional filtering by format, access level, or subject. No pagination - all matching collections are returned in a single response.

Input
ParamTypeDescription
access_filterstringFilter by access level (passed as byAccess query param to the upstream site)
format_filterstringFilter by format type (passed as byFormat query param to the upstream site)
subject_filterstringFilter by subject area (passed as bySubject query param to the upstream site)
Response
{
  "type": "object",
  "fields": {
    "total": "integer count of collections returned",
    "collections": "array of collection objects with id, title, url, description, and metadata"
  },
  "sample": {
    "data": {
      "total": 221,
      "collections": [
        {
          "id": "alajournals",
          "url": "https://quod.lib.umich.edu/a/alajournals",
          "title": "Abraham Lincoln Association Serials",
          "metadata": {},
          "description": "Between 1940 and 1952..."
        }
      ]
    },
    "status": "success"
  }
}

About the Umich API

Collection Discovery and Search

The list_collections endpoint returns an array of collection objects, each with an id, title, url, description, and associated metadata. You can narrow results using three optional filter parameters: access_filter, format_filter, and subject_filter. Once you have a collection ID, get_collection_detail returns that collection's statistics (item count), description, and a search_options array of browse and search links available for that collection.

For search, search_collection accepts a required query and collection_id and returns paginated results (up to 50 per page) including item id, title, url, and metadata fields. The search_all_collections endpoint runs the same keyword query across all text collections simultaneously, returning a results array with the same shape.

Item-Level Data

get_item_detail takes a collection_id and item_id (obtainable from any search result) and returns the item's full bibliographic metadata object — fields include Title, Author, Publication, Subject terms, and Rights/Permissions — plus a toc array of page- or section-level links. get_item_fulltext retrieves the text content extracted from the item page; for scanned books, page-level text may require navigating individual page URLs from the TOC.

IIIF Image Metadata

get_image_metadata returns the IIIF Image API info.json for a specific page image, identified by collection_id, item_id, and an eight-digit zero-padded image_id (e.g., 00000001 for page 1). The response includes pixel width and height, a sizes array of pre-rendered dimensions, and a tiles array with tile width, height, and scaleFactors — sufficient to construct IIIF-compliant tile requests for any page.

Reliability & maintenanceVerified

The Umich API is a managed, monitored endpoint for quod.lib.umich.edu — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when quod.lib.umich.edu 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 quod.lib.umich.edu 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.

Last verified
4d ago
Latest check
7/7 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a full-text search interface over a specific U-M historical collection using search_collection with paginated results
  • Aggregate bibliographic metadata across all collections with search_all_collections for downstream citation analysis
  • Retrieve IIIF image dimensions and tile configurations via get_image_metadata to render zoomable page images in a custom viewer
  • Enumerate available collections and their item counts via list_collections and get_collection_detail for a library discovery portal
  • Extract subject terms and rights metadata from get_item_detail to build a rights-aware digitized materials catalog
  • Pull table of contents entries from the toc array in get_item_detail to enable chapter-level navigation in a reading application
  • Ingest full-text content via get_item_fulltext for indexing digitized books and manuscripts in a search engine
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does the University of Michigan Library provide an official developer API for its digital collections?+
The University of Michigan Library exposes some machine-readable access through its IIIF endpoints and select collection-level interfaces, but there is no single official public REST API covering all collections, search, and item metadata as a documented developer product.
What does `get_item_detail` return beyond the item title?+
get_item_detail returns a structured metadata object with fields such as Author, Publication, Subject terms, and Rights/Permissions, plus a toc array of labeled section or page links with URLs. It also echoes the collection_id and provides the canonical url for the item.
Does pagination work the same way across search endpoints?+
Both search_collection and search_all_collections accept an optional page integer (starting at 1) and return up to 50 results per page. search_collection also returns a total integer for the full result count; search_all_collections does not currently expose a total field in its response.
Does the API support downloading full page images or PDFs?+
Not currently. The API returns IIIF image metadata (dimensions, tile sizes, scale factors) via get_image_metadata, which provides the data needed to construct tile URLs for a IIIF viewer. Direct image binary download or PDF generation endpoints are not included. You can fork the API on Parse and revise it to add an endpoint that constructs and returns full image or PDF download URLs based on the IIIF data.
Is there a limitation on which collections support full-text search?+
search_all_collections explicitly targets text collections, so collections containing only images or non-text materials may not appear in cross-collection search results. search_collection scoped to a specific collection ID works within whatever search capability that collection exposes. Collections without indexed text will return limited or no results for keyword queries.
Page content last updated . Spec covers 7 endpoints from quod.lib.umich.edu.
Related APIs in EducationSee all →
worldcat.org API
Search millions of books and library materials worldwide, check availability at libraries near you, and discover reading lists and reviews all in one place. Find exactly what you're looking for across global library collections and get instant insights into where to access it.
jstor.org API
Search and browse millions of academic articles, journals, and research issues from JSTOR's library, or retrieve specific articles and journal details to explore scholarly content by subject. Access peer-reviewed research across multiple disciplines to find the academic sources you need.
egyankosh.ac.in API
Search and browse educational materials from IGNOU's digital repository, retrieve course unit details, and access PDFs directly. Navigate through communities and collections to find study resources organized by subject and course structure.
mdpi.com API
Access MDPI's open-access academic content programmatically. Search across thousands of peer-reviewed articles, retrieve full structured text, extract key findings, and browse journal metadata including impact factors and CiteScores.
magzter.com API
Browse and search millions of magazines, newspapers, and stories from Magzter's digital library, then dive into specific publications, issues, and articles by category. Discover detailed information about any magazine or newspaper edition to find exactly what you want to read.
librarything.com API
Search millions of books and retrieve detailed metadata, reviews, and author information from LibraryThing's vast catalog. Access member libraries, trending titles, author works, and tag-based book collections to explore one of the web's largest book cataloging communities.
alibris.com API
Search for books and retrieve seller listings from Alibris. Access detailed book information including title, author, condition, pricing, and seller data across the platform.
mangalib.org API
Browse and search a comprehensive manga catalog, read chapters and pages, view manga details and cover images, and discover personalized recommendations. Access comments, track your currently reading list, and find random titles to explore.