iiif.io APIiiif.io ↗
Fetch, normalize, and validate IIIF Presentation API manifests. Access cookbook recipes, community events, and news from iiif.io via 6 structured endpoints.
curl -X GET 'https://api.parse.bot/scraper/3f99f0f1-1d32-49cb-a9d7-962e6e9ba27c/get_manifest?url=https%3A%2F%2Fiiif.io%2Fapi%2Fcookbook%2Frecipe%2F0009-book-1%2Fmanifest.json' \ -H 'X-API-Key: $PARSE_API_KEY'
Fetch and parse a IIIF Presentation API manifest from a URL. Returns the full manifest JSON structure including context, type, label, items (canvases), and all associated properties.
| Param | Type | Description |
|---|---|---|
| urlrequired | string | The URL of the IIIF manifest to fetch (e.g. https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json). |
{
"type": "object",
"fields": {
"id": "string, the manifest URI",
"type": "string, the IIIF resource type (e.g. Manifest)",
"items": "array of Canvas objects with annotations and image bodies",
"label": "object with language keys mapping to arrays of label strings"
},
"sample": {
"data": {
"id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json",
"type": "Manifest",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1",
"type": "Canvas",
"label": {
"en": [
"Blank page"
]
},
"width": 3204,
"height": 4613
}
],
"label": {
"en": [
"Simple Manifest - Book"
]
},
"@context": "http://iiif.io/api/presentation/3/context.json",
"behavior": [
"paged"
]
},
"status": "success"
}
}About the iiif.io API
This API exposes 6 endpoints covering the core IIIF Presentation API workflow: fetching and parsing manifests, normalizing metadata into flat key-value structures, and running manifests through the official IIIF validator. The get_manifest endpoint returns the full canvas tree including annotations and image bodies, while validate_manifest returns machine-readable error and warning lists so you can catch compliance issues programmatically without manually running the IIIF validator tool.
Manifest Fetching and Parsing
The get_manifest endpoint accepts a url parameter pointing to any IIIF Presentation API manifest and returns the full parsed JSON structure. The response includes id (the manifest URI), type (e.g. Manifest), a label object with language-keyed string arrays, and items — an array of Canvas objects each carrying their own annotations and image bodies. Both IIIF 2.x and 3.0 manifests are handled.
Metadata Normalization
normalize_manifest_metadata takes the same url input and extracts a flat, predictable structure from whatever metadata the manifest contains. The response gives you title (from the manifest label), description (from summary or description fields, possibly containing HTML), rights (the license URI if present), detected version (3.0 or 2.0), and a metadata object mapping label strings to their multilingual value objects. This is useful when integrating manifests from heterogeneous sources where the raw manifest shape varies.
Validation
validate_manifest submits a manifest URL to the official IIIF Presentation API Validator and returns structured results: an okay integer (1 for valid, 0 for invalid), an error string, a warnings array, and an errorList array of detailed error objects. The optional version parameter lets you target a specific Presentation API version (e.g. 2.1, 3.0). Empty warnings and errorList arrays with okay=1` confirm a clean manifest.
Community Resources
Three discovery endpoints round out the API. list_cookbook_recipes returns the full set of IIIF Cookbook recipes — each with name and url — giving programmatic access to the canonical implementation pattern library. list_events returns structured event objects with label, type, time, location, description, and links, plus a calendar object broken into week and month arrays. list_news returns published articles with title, url, date, and excerpt.
- Validate a batch of IIIF manifests in CI/CD and surface
errorListdetails as test failures before deploying a digital collection. - Normalize manifest metadata from multiple institutions into a consistent schema using
title,rights, andmetadatafields fromnormalize_manifest_metadata. - Build a rights-aware content browser by filtering normalized manifests on the
rightsURI returned bynormalize_manifest_metadata. - Index IIIF Cookbook recipes by name and URL to auto-generate implementation guides or internal developer documentation.
- Track community events and conference dates by polling
list_eventsfor thecalendarweek and month arrays. - Detect IIIF Presentation API version across a manifest collection using the
versionfield fromnormalize_manifest_metadatato plan migration work. - Aggregate IIIF news excerpts and publication dates from
list_newsinto a team digest or dashboard.
| 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 | 250 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 IIIF.io have an official developer API?+
What does `validate_manifest` actually return when a manifest is invalid?+
okay: 0, a human-readable error string, and an errorList array of detailed error objects identifying specific compliance failures. The warnings array may be non-empty even when okay is 1, indicating non-fatal issues. The optional version parameter lets you pin validation to a specific Presentation API version like 2.1 or 3.0.Does the API expose individual Canvas or annotation content from within a manifest?+
get_manifest endpoint returns the full items array, which contains Canvas objects with their embedded annotations and image bodies. There is no dedicated endpoint for querying a single Canvas by ID or filtering annotations by type. You can fork the API on Parse and revise it to add a targeted canvas-level endpoint if your use case requires it.Does `list_events` include historical/past events or only upcoming ones?+
calendar object in the response separates entries into week and month arrays. There is no filter parameter to restrict results to a date range. You can fork the API on Parse and revise it to add date-based filtering over the returned event objects.