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.
- No authentication required - Free and open access
- RESTful JSON API - Simple HTTP GET requests
- Updated weekly - Fresh exhibition data every Saturday
- 100+ venues - Comprehensive NYC coverage
Base URL
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.
List 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
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
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
Returns a list of all unique venue names.
Example Response
["47 Canal", "Artists Space", "Gagosian", "MoMA", "Pace Gallery", ...]
List Boroughs
Returns a list of all NYC boroughs in the dataset.
Example Response
["Brooklyn", "Manhattan", "Queens"]
Get Statistics
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
- Real-time monitoring with auto-refresh every 60 seconds
- Color-coded display:
- Red: Closing within 7 days (critical)
- Yellow: Closing within 14 days (warning)
- Cyan: Upcoming exhibitions
- White: Normal status
- Interactive controls: Sort by closing date, venue, or opening date
- Statistics bar showing total exhibitions, current shows, and closing soon
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 |
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
Built with FastAPI • Powered by Claude AI