Wellcome Collection APIwellcomecollection.org ↗
Search and retrieve books, manuscripts, images, and archival works from the Wellcome Collection catalogue via 3 structured endpoints.
What is the Wellcome Collection API?
The Wellcome Collection API exposes 3 endpoints for querying a catalogue of books, manuscripts, pictures, videos, and archival materials held by one of the world's major medical heritage libraries. search_works supports full-text queries with faceted aggregations across work type, language, and availability, while search_images allows filtering by dominant hex color. get_work returns structured metadata including subjects, contributors, production events, and IIIF-compatible item locations.
curl -X GET 'https://api.parse.bot/scraper/f2fcc70a-a850-4f84-84cf-8cecef0356fd/search_works?page=1&sort=production.dates&query=medicine&include=subjects%2Ccontributors&page_size=10&work_type=a&sort_order=asc&aggregations=workType' \ -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 wellcomecollection-org-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.
"""Walkthrough: Wellcome Collection SDK — searching works and images."""
from parse_apis.wellcomecollection_org_api import (
WellcomeCollection, WorkType, SortField, SortOrder, WorkNotFound
)
client = WellcomeCollection()
# Search for works about medicine, filtered to Books only
for work in client.works.search(query="medicine", work_type=WorkType.BOOKS, limit=5):
print(work.title, work.work_type.label)
# Sort results by production date ascending
for work in client.works.search(
query="plague", sort=SortField.PRODUCTION_DATES, sort_order=SortOrder.ASC, limit=3
):
print(work.title, work.physical_description)
# Get a specific work by ID (from a search result)
first_work = client.works.search(query="anatomy", limit=1).first()
if first_work:
detail = client.works.get(id=first_work.id, include="subjects,contributors,languages")
print(detail.title, detail.physical_description)
if detail.languages:
for lang in detail.languages:
print(lang.id, lang.label)
# Search images by color filter
for image in client.images.search(query="skull", color="ff0000", limit=3):
print(image.source.title, image.average_color, image.aspect_ratio)
# Typed error handling for a missing work
try:
client.works.get(id="nonexistent_id_xyz")
except WorkNotFound as exc:
print(f"Work not found: {exc.work_id}")
print("exercised: works.search / works.get / images.search / WorkType / SortField / SortOrder / WorkNotFound")
Full-text search across the Wellcome Collection catalogue of works (books, manuscripts, pictures, videos, etc.). Supports filtering by work type, sorting by production date, and aggregations for faceted search. Results are auto-iterated across pages.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| sort | string | Field to sort results by. |
| query | string | Search query string to match against work titles and metadata. Omitting returns all works. |
| include | string | Comma-separated list of additional fields to include in results: identifiers, items, holdings, subjects, genres, contributors, production, languages, notes. |
| page_size | integer | Number of results per page, between 1 and 100. |
| work_type | string | Filter by work format type code. Multiple types can be comma-separated. |
| sort_order | string | Sort direction. |
| aggregations | string | Comma-separated list of fields to aggregate for faceted search: workType, availabilities, languages, subjects.label, genres.label, contributors.agent.label. |
{
"type": "object",
"fields": {
"results": "array of work objects",
"next_page": "string URL of next page (when available)",
"page_size": "integer",
"prev_page": "string URL of previous page (when available)",
"total_pages": "integer",
"aggregations": "object with faceted counts (present when aggregations param used)",
"total_results": "integer"
},
"sample": {
"data": {
"results": [
{
"id": "a4gk7brt",
"type": "Work",
"title": "Medicine and architecture / Christine Stevenson.",
"workType": {
"id": "a",
"type": "Format",
"label": "Books"
},
"availabilities": [
{
"id": "closed-stores",
"type": "Availability",
"label": "Closed stores"
}
],
"alternativeTitles": [],
"physicalDescription": "[volumes 2] pages 1,495-1,519"
}
],
"next_page": "https://api.wellcomecollection.org/catalogue/v2/works?page=2&pageSize=3&query=medicine",
"page_size": 3,
"total_pages": 37878,
"total_results": 113634
},
"status": "success"
}
}About the Wellcome Collection API
Works Search and Retrieval
The search_works endpoint accepts a query string matched against titles and catalogue metadata. Omitting the query returns all works. Results can be filtered by work_type (comma-separated format codes), sorted by production date via sort and sort_order, and paged using page and page_size (1–100 per page). When the aggregations parameter is set to fields like workType, availabilities, languages, or subjects, the response includes facet counts alongside the results array — useful for building filter UIs. Pagination state is returned as next_page and prev_page URLs, alongside total_results and total_pages.
Single Work Detail
get_work retrieves a single catalogue record by its identifier (e.g. gbd4prdu). The base response includes id, type, title, workType, availabilities, and alternativeTitles. Optional include values expand the response: subjects adds a subject array, contributors adds contributor objects, items and holdings add location and holdings data, and production adds structured production event objects such as date and place. Multiple includes can be comma-separated.
Image Search
search_images queries the image portion of the catalogue. Each result object contains thumbnail URLs, locations with IIIF manifest references, averageColor, license information, and a source reference linking back to the parent work. A unique capability is the color parameter — a 6-character hex code (no # prefix) that filters results by dominant color, making it possible to retrieve visually similar images. Optional include values can pull in source.contributors and source.languages per result.
The Wellcome Collection API is a managed, monitored endpoint for wellcomecollection.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when wellcomecollection.org 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 wellcomecollection.org 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?+
- Build a faceted browser for historical medical manuscripts using
aggregationson workType and languages fromsearch_works - Retrieve contributor and production event metadata for citation tools using
get_workwithinclude=contributors,production - Filter archival images by dominant color palette using
search_imageswith thecolorhex parameter - Cross-reference subjects across the catalogue by paginating
search_workswith a subject query andaggregations=subjects - Render IIIF-compatible image viewers using
locationsandthumbnailfields returned bysearch_images - Identify availability of physical and digitised items by inspecting
availabilitiesinget_workorsearch_worksresults - Compile a dataset of works in a specific language by filtering
search_worksresults usinginclude=subjectsandaggregations=languages
| 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 Wellcome Collection have an official developer API?+
What does the `aggregations` parameter in `search_works` actually return?+
workType, availabilities, languages, or subjects to the aggregations parameter, the response includes an aggregations object containing facet counts for each requested field. This lets you show, for example, how many results are books versus manuscripts, or how many are available online, without making separate count queries.How does pagination work across the search endpoints?+
search_works and search_images use 1-based integer page numbering via the page parameter. Each response includes total_results, total_pages, and string URLs in next_page and prev_page when adjacent pages exist. page_size can be set between 1 and 100.Does the API expose exhibition, event, or venue data from Wellcome Collection?+
search_works, get_work) and the image catalogue (search_images). Exhibitions, events, and venue information are not included in these endpoints. You can fork it on Parse and revise to add an endpoint targeting that data.Can I retrieve the full text or digitised page content of a work?+
get_work with include=items returns item-level location metadata including IIIF manifest references, but the API does not return OCR text or page-level content. You can fork it on Parse and revise to add an endpoint that fetches content from the IIIF manifest URLs exposed in the items response.