Introduction

The NYC Exhibitions API provides real-time data about contemporary art exhibitions across New York City. Data is automatically crawled from 100+ galleries and museums and updated weekly.

Base URL

https://nyc-exhibitions-api.fly.dev

All API requests should be made to this base URL.

Authentication

No authentication is required. All endpoints are publicly accessible.

Rate Limiting

To ensure fair usage and prevent abuse, the API implements IP-based rate limiting. Since exhibition data only updates weekly (every Saturday), these limits are sufficient for typical use cases:

Endpoint Type Rate Limit
Public endpoints (exhibitions, venues, boroughs, stats) 30 requests/minute
QR code generation 20 requests/minute
Health check 60 requests/minute

When rate limits are exceeded, the API returns a 429 Too Many Requests response. Wait a minute before retrying.

Note: Exhibition data is refreshed weekly. There's no need to poll frequently—checking once per day or less is recommended.

List Exhibitions

GET /api/v1/exhibitions

Returns a list of exhibitions with optional filtering and sorting.

Query Parameters

Parameter Type Description
limit integer Number of results (1-500). Default: 50
include_upcoming boolean Include exhibitions that haven't opened. Default: false
include_qr boolean Include QR codes as base64 data URLs. Default: false
sort_by string Sort order: title, venue, closing_date, opening_date. Default: closing_date
venue string Filter by venue name (partial match)
borough string Filter by borough: Manhattan, Brooklyn, Queens, Bronx, Staten Island
closing_within_days integer Only shows closing within N days
show_type string Filter by type: solo, group, two_person, unknown
search string Search in title, artist names, and description

Example Request

GET /api/v1/exhibitions?limit=10&sort_by=closing_date

Example Response

[
  {
    "id": "abc123",
    "title": "New Paintings",
    "venue_name": "Pace Gallery",
    "opening_date": "2026-01-15",
    "closing_date": "2026-03-20",
    "show_type": "solo",
    "artists": ["Artist Name"],
    "url": "https://pacegallery.com/exhibitions/...",
    "borough": "Manhattan",
    "status": "current",
    "days_until_closing": 68
  }
]

Get Exhibition

GET /api/v1/exhibitions/{id}

Returns a single exhibition by ID.

Path Parameters

Parameter Type Description
id string Exhibition ID (required)

Example Request

GET /api/v1/exhibitions/abc123

Get QR Code

GET /api/v1/exhibitions/{id}/qr.png

Returns a QR code for the exhibition URL as a PNG image.

Parameters

Parameter Type Description
id string Exhibition ID (required, in path)
size integer QR code size in pixels (100-1000). Default: 200

Example Request

GET /api/v1/exhibitions/abc123/qr.png?size=400

List Venues

GET /api/v1/venues

Returns a list of all unique venue names.

Example Response

["47 Canal", "Artists Space", "Gagosian", "MoMA", "Pace Gallery", ...]

List Boroughs

GET /api/v1/boroughs

Returns a list of all NYC boroughs in the dataset.

Example Response

["Brooklyn", "Manhattan", "Queens"]

Get Statistics

GET /api/v1/stats

Returns statistics about the exhibitions dataset.

Example Response

{
  "total_exhibitions": 159,
  "current_exhibitions": 24,
  "upcoming_exhibitions": 24,
  "closing_soon": 2,
  "unique_venues": 26,
  "unique_boroughs": 3,
  "last_updated": "2026-01-11T16:44:28.453140"
}

Exhibition Schema

Field Type Description
id string Unique identifier
title string Exhibition title
venue_name string Gallery or museum name
opening_date string Opening date (YYYY-MM-DD)
closing_date string Closing date (YYYY-MM-DD)
show_type string solo, group, two_person, or unknown
artists array Array of artist names
url string Exhibition URL (nullable)
borough string NYC borough (nullable)
status string upcoming, current, closing_soon, or closed
days_until_closing integer Days remaining (computed)

CLI Dashboard: exhibitions-top

An interactive terminal dashboard for monitoring exhibitions, inspired by htop. Perfect for keeping track of what's currently showing and what's closing soon.

Features

Installation

# Clone the repository
git clone https://github.com/finoradin/nyc-exhibitions.git
cd nyc-exhibitions/examples

# Install dependencies
pip install -r requirements.txt

# Run the dashboard
python exhibitions-top.py

Keyboard Controls

Key Action
q Quit
r Refresh now
/ Scroll up/down
1 Sort by closing date (default)
2 Sort by venue name
3 Sort by opening date
h Toggle help
Source code: Available in the examples/ directory of the repository.

Code Examples

JavaScript

// Fetch current exhibitions
const response = await fetch(
  'https://nyc-exhibitions-api.fly.dev/api/v1/exhibitions?limit=10'
);
const exhibitions = await response.json();

exhibitions.forEach(ex => {
  console.log(`${ex.title} at ${ex.venue_name}`);
  console.log(`Closes in ${ex.days_until_closing} days`);
});

Python

import requests

# Get current exhibitions
response = requests.get(
    'https://nyc-exhibitions-api.fly.dev/api/v1/exhibitions',
    params={'limit': 10}
)
exhibitions = response.json()

for ex in exhibitions:
    print(f"{ex['title']} at {ex['venue_name']}")
    print(f"Closes in {ex['days_until_closing']} days\n")

cURL

# Get current exhibitions
curl "https://nyc-exhibitions-api.fly.dev/api/v1/exhibitions?limit=10"

# Get exhibitions closing this week
curl "https://nyc-exhibitions-api.fly.dev/api/v1/exhibitions?closing_within_days=7"

# Get statistics
curl "https://nyc-exhibitions-api.fly.dev/api/v1/stats"

Support

Questions or feedback? Open an issue on GitHub

Note: Data is updated weekly on Saturdays. No need to poll more frequently.

Built with FastAPI • Powered by Claude AI