Archive & Atlas Developers Read surface · unauthenticated
Query the catalog as JSON, harvest it over OAI-PMH, open it in a IIIF viewer, subscribe to it as a feed, or point an agent at it over MCP. All of it free, none of it behind a registration form.
curl -s "https://archiveandatlas.com/api/store/products?limit=2"
{
"items": [
{
"id": "8f2a1c44-...-b7e1",
"slug": "grand-canyon-north-rim",
"title": "Grand Canyon, North Rim",
"maker": "A. Maker",
"year": 1962,
"orientation": "landscape",
"preview_url": "https://img.archiveandatlas.com/...webp",
"price_from_cents": 4900
}
],
"nextCursor": "2026-05-11T09:14:00Z"
}
nextCursor value back as ?cursor= for the following page. An empty string means you have reached the end.catalog.json, the MCP endpoint, and the store feeds.
If you run a library, a museum, an aggregator or a viewer, you probably do not want our JSON at all. These are the protocols your software already speaks.
Every published record has a IIIF manifest, and the archive publishes as a IIIF collection. Drop a manifest URL into Mirador, Universal Viewer or Clover and it opens. Change Discovery is published as an Activity Stream.
A standard endpoint in oai_dc Dublin Core, supporting Identify, ListRecords, ListIdentifiers, GetRecord, ListMetadataFormats and ListSets. Point a harvester at the base URL and schedule it.
A capability list, a full resource list, and a change list — so a mirror pulls only what moved since its last run instead of walking the whole archive again. This is the polite way to stay current, and the cheap one.
A JSON-RPC endpoint exposing two tools — search_archive and get_record — so an assistant can search the archive and pull structured records without scraping a single page.
Paginated list of works available in the store.
nextCursor from the previous response. Omit for the first page.Returns items[] — each carrying id, slug, title, maker, year, orientation, preview_url and price_from_cents — plus nextCursor.
One work, and every way it can be bought. Two top-level keys: product and offerings.
offerings is grouped into five arrays — print, canvas, metal, license and full_rights. Each entry carries id, option_name, price_cents and edition_size, the last being null for an open, non-limited run.
{
"product": { "id": "...", "slug": "...", "title": "...", "maker": "...",
"date_earliest": 1962, "rights_status": "restricted", ... },
"offerings": {
"print": [ { "id": "...", "option_name": "16x20", "price_cents": 27000, "edition_size": null } ],
"canvas": [ ... ],
"metal": [ { "id": "...", "option_name": "24x36", "price_cents": 95000, "edition_size": 25 } ],
"license": [ ... ],
"full_rights": [ ... ]
}
}
An unknown slug returns 404 with {"error":"not_found"}.
The whole index in one document — every published work, archive and store alike: title, maker, year, place, subject, access, license, training flag, page URL and preview image. Store items additionally carry a store URL and a starting print price.
library or store to slice to one surface. Omit for both.Any single record as clean Markdown: the title, the description, a Particulars list — accession, maker, date, place, subject, medium, rights — and a ready-to-paste Citation in Chicago form. Append .md to any record URL.
Served as text/markdown. An unpublished or withdrawn slug returns 404 with the error itself written in Markdown, so a pipeline never has to parse HTML to find out what went wrong.
JSON-RPC 2.0. Call tools/list to enumerate, then tools/call to run one. See the MCP documentation.
catalog.json, the per-record Markdown, and the IIIF and ResourceSync endpoints all send Access-Control-Allow-Origin: *, so a browser can call them directly. The JSON store API and the feeds do not yet — call those server-side for now.application/atom+xml — new records as they are published
application/rss+xml — the same, as RSS
application/feed+json — the same, as JSON Feed
application/atom+xml — store releases; also .xml and .json
llms.txt, an index of these resources written for language models, and sitemap.xml on both hosts — the archive one carries image metadata and is the substantive map.Every surface on this page is open. No key, no signup, and no rate limit published — we would rather trust you than meter you.
Cache what you fetch, don't hammer the endpoints, and identify your client with a real User-Agent. Prefer the ResourceSync change list over re-crawling.
Reuse of an image is governed by that item's own terms, not by the fact that you could fetch it. Every record states its rights — see Licensing.
Attribution follows the individual record's license. Records carry a ready citation in their Markdown, and Citations covers the forms.