Art & Design — entry 002 of 20

Art Institute of Chicago

Verified Jul 2026

The Art Institute of Chicago publishes its full collection of 130,000+ objects as a versioned, keyless REST API (api.artic.edu/api/v1) built on the same data that powers its own website and mobile app, with IIIF-based endpoints for zoomable, high-resolution images. A live GET against a real artwork record returned genuine JSON carrying Access-Control-Allow-Origin: *, reconfirming both auth None and cors yes with no key required.

The Art Institute of Chicago publishes its full collection -- 130,000+ objects -- as a versioned, keyless REST API. A live GET this run against `/artworks/27992?fields=id,title,artist_display,date_display,image_id` returned genuine JSON for Seurat's "A Sunday on La Grande Jatte", plus a `config.iiif_url` block the caller has to combine with the record's `image_id` to assemble the actual image URL -- the API never returns a ready-made image link directly.

museumartopen-datacollectioniiif
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/art-institute-of-chicago/"><img src="https://greatapis.com/badge/art-institute-of-chicago.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required. A live GET this run against a real artwork record returned genuine JSON while carrying `access-control-allow-origin: *`, confirming both keyless auth and open CORS with nothing to configure first.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Fetch an artwork record and assemble its IIIF image URL

GEThttps://api.artic.edu/api/v1/artworks/27992?fields=id,title,artist_display,date_display,image_id,iiif_url

200 application/json

{"data":{"id":27992,"title":"A Sunday on La Grande Jatte \u2014 1884","date_display":"1884\u201386, border added 1888\u201389","artist_display":"Georges Seurat (French, 1859\u20131891)","image_id":"2d484387-2509-5e8e-2c43-22f9981972eb"},"info":{"license_text":"...","license_links":["https://creativecommons.org/publicdomain/zero/1.0/","https://www.artic.edu/terms"],"version":"1.14"},"config":{"iiif_url":"https://www.artic.edu/iiif/2","website_url":"http://www.artic.edu"}}

The full-size image is never in the payload -- combine `config.iiif_url` + `/` + `data.image_id` + `/full/843,/0/default.jpg` (IIIF Image API syntax) yourself. A live GET this run against the assembled URL for this record, `https://www.artic.edu/iiif/2/2d484387-2509-5e8e-2c43-22f9981972eb/full/200,/0/default.jpg`, returned HTTP 200 image bytes.

Try it

Developer reference

Base URLhttps://api.artic.edu/api/v1
Key endpoints
  • GET/artworks
  • GET/artworks/{id}
  • GET/artworks/search?q={query}

Gotchas & limits

  • `?limit=101` on the collection listing doesn't clamp or 400 -- a live GET this run against `/artworks?limit=101` returned HTTP 403 with `{"status":403,"error":"Invalid limit","detail":"You have requested too many resources per page. Please set a smaller limit."}`. Keep `limit` at 100 or below.
  • A nonexistent artwork id 404s with a structured body, not an empty one -- a live GET this run against `/artworks/999999999` returned HTTP 404 `{"status":404,"error":"Not found","detail":"The item you requested cannot be found."}`.
  • `/artworks/search` results are lean hits, not full records -- a live GET this run against `/artworks/search?q=seurat&limit=1` returned only `{"_score":...,"id":27992,"api_model":"artworks","api_link":"...","title":"...","thumbnail":{...},"timestamp":"..."}` per result, with none of the sparse-fieldset fields (`artist_display`, `date_display`, `image_id`) present. A full record needs either `?fields=` on the search itself or a follow-up `/artworks/{id}` fetch.
  • The image is never inline -- `image_id` is a bare UUID with no extension or host; you must combine it with `config.iiif_url` yourself using IIIF Image API path syntax (see the example note) rather than expecting a direct URL field.
  • You cannot paginate past 10,000 results in the search endpoints, and the ceiling is a hard error rather than an empty page -- a live GET this run against `/artworks/search?q=painting&limit=10&page=1001` (result 10,010) returned HTTP 403 `{"status":403,"error":"Invalid number of results","detail":"You have requested too many results. Please refine your parameters."}`, while the same query at `page=100` returned 200. Artic's docs direct anyone needing a larger result set to its nightly data dumps instead.