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

Score94out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 94 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 94 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.

Endpoints

Servers
https://api.artic.edu/api/v1
agent-roles2
GET/agent-roles
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/agent-roles/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
agent-types2
GET/agent-types
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/agent-types/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
agents3
GET/agents
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/agents/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/agents/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
articles3
GET/articles
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/articles/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/articles/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
artists2
GET/artists
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/artists/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
artwork-date-qualifiers2
GET/artwork-date-qualifiers
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/artwork-date-qualifiers/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
artwork-place-qualifiers2
GET/artwork-place-qualifiers
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/artwork-place-qualifiers/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
artwork-types2
GET/artwork-types
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/artwork-types/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
artworks3
GET/artworks
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/artworks/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/artworks/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
category-terms3
GET/category-terms
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/category-terms/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/category-terms/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
digital-publication-articles3
GET/digital-publication-articles
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/digital-publication-articles/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/digital-publication-articles/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
digital-publications3
GET/digital-publications
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/digital-publications/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/digital-publications/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
educator-resources3
GET/educator-resources
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/educator-resources/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/educator-resources/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
event-occurrences3
GET/event-occurrences
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/event-occurrences/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/event-occurrences/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
event-programs3
GET/event-programs
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/event-programs/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/event-programs/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
events3
GET/events
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/events/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/events/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
exhibitions3
GET/exhibitions
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/exhibitions/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/exhibitions/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
galleries3
GET/galleries
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/galleries/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/galleries/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
generic-pages3
GET/generic-pages
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/generic-pages/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/generic-pages/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
highlights3
GET/highlights
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/highlights/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/highlights/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
hours3
GET/hours
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/hours/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/hours/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
images3
GET/images
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/images/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/images/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
landing-pages3
GET/landing-pages
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/landing-pages/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/landing-pages/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
mobile-sounds3
GET/mobile-sounds
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/mobile-sounds/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/mobile-sounds/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
places3
GET/places
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/places/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/places/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
press-releases3
GET/press-releases
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/press-releases/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/press-releases/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
printed-publications3
GET/printed-publications
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/printed-publications/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/printed-publications/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
products3
GET/products
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/products/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/products/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
publications3
GET/publications
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/publications/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/publications/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
search1
GET/searchSearch all data in the aggregator
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
sections3
GET/sections
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/sections/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/sections/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
sites3
GET/sites
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/sites/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/sites/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
sounds3
GET/sounds
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/sounds/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/sounds/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
static-pages3
GET/static-pages
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/static-pages/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/static-pages/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
texts3
GET/texts
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/texts/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/texts/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
tours3
GET/tours
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/tours/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/tours/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
videos3
GET/videos
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/videos/search
Parameters
NameInRequiredType
qquerynostring
queryquerynostring
sortquerynostring
fromquerynostring
sizequerynostring
facetsquerynostring
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—
GET/videos/{id}
Parameters
NameInRequiredType
idpathyes—
Responses
StatusDescriptionSchema
200Successful operation—
defaulterror—

Try it

Developer reference

Base URLhttps://api.artic.edu/api/v1
Rate limit

60 requests/minute for anonymous/unauthenticated users, per api.artic.edu/docs (own API documentation)

Key endpoints
  • GET/artworks
  • GET/artworks/{id}
  • GET/artworks/search

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.

Changelog

Spec version1.15
Tracked paths103
  • Aug 2026gained an OpenAPI spec

Tracking since Sep 2026. See every tracked change ↗ ·Subscribe with RSS ↗