Art & Design — entry 002 of 20
Art Institute of Chicago
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.
GreatAPIs Score
Auth quickstart
- 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.
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
{"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
https://api.artic.edu/api/v1- 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.