Archive & Atlas Developers Read surface · unauthenticated

Get the API

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.

0keys, tokens or signups required
4open protocols spoken, not invented
8content types served
I

Quickstart

One request · no setup
Request
curl -s "https://archiveandatlas.com/api/store/products?limit=2"
Response · application/json
{
  "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"
}
Paging. Send the nextCursor value back as ?cursor= for the following page. An empty string means you have reached the end.
II

Two hosts

The Archive · The Store
https://thearchive.archiveandatlas.com Records and their Markdown, IIIF, OAI-PMH, ResourceSync, and the archive feeds — the open archive surface.
https://archiveandatlas.com The JSON store API, catalog.json, the MCP endpoint, and the store feeds.
The Archive and the Store are separate origins. Each endpoint below is written against the host that serves it — copy the whole URL rather than the path.
3standards
0keys
8content types
III

Open standards

IIIF 3.0 · OAI-PMH 2.0 · ResourceSync · MCP

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.

IIIF Presentation 3.0

Manifests and collections

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.

OAI-PMH 2.0

Metadata harvesting

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.

https://thearchive.archiveandatlas.com/oai?verb=Identify https://thearchive.archiveandatlas.com/oai?verb=ListRecords&metadataPrefix=oai_dc
ResourceSync

Change lists

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.

Model Context Protocol

Agent access

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.

Full MCP documentation → POST https://archiveandatlas.com/mcp
IV

JSON API

5 endpoints · no version prefix
GEThttps://archiveandatlas.com/api/store/products

Paginated list of works available in the store.

catalogCatalogue slug. Omit for everything.
cursorThe nextCursor from the previous response. Omit for the first page.
limitDefault 24, clamped to 1–60. A value outside the range is clamped, not rejected.

Returns items[] — each carrying id, slug, title, maker, year, orientation, preview_url and price_from_cents — plus nextCursor.

GEThttps://archiveandatlas.com/api/store/product/{slug}

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.

Response · abridged
{
  "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.

surfacelibrary or store to slice to one surface. Omit for both.
GEThttps://thearchive.archiveandatlas.com/library/{slug}.md

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.

POSThttps://archiveandatlas.com/mcp

JSON-RPC 2.0. Call tools/list to enumerate, then tools/call to run one. See the MCP documentation.

Cross-origin. 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.
V

Feeds

Atom · RSS · JSON Feed
https://thearchive.archiveandatlas.com/feed.atom application/atom+xml — new records as they are published
https://thearchive.archiveandatlas.com/feed.xml application/rss+xml — the same, as RSS
https://thearchive.archiveandatlas.com/feed.json application/feed+json — the same, as JSON Feed
https://archiveandatlas.com/store/feed.atom application/atom+xml — store releases; also .xml and .json
Also published: 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.
VI

The free tier

No quota to buy · no key to lose

Read freely

Every surface on this page is open. No key, no signup, and no rate limit published — we would rather trust you than meter you.

Be a good guest

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.

Access is not a license

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.

Attribute per item

Attribution follows the individual record's license. Records carry a ready citation in their Markdown, and Citations covers the forms.

Bulk, commercial, or as data. High-volume access, a full export, or licensing the catalog as data — including for model training — goes through data & training-data licensing. Those are consent-gated per contributor and handled by agreement, not by endpoint.