Biennale Radar API

Updated May 27, 2026

Public JSON endpoints for distributing exhibitions, biennials, radar live, and city feeds to my.biennale.com and external integrations.

Base URL: https://biennaleradar.base44.app/api/functions

https://biennaleradar.base44.app/api-docs

CORS Enabled: All endpoints support cross-origin requests. Safe to call directly from my.biennale.com — no proxy needed.

Method: All endpoints accept POST with a JSON body. Parameters are sent in the request body, not as query strings.

May 27 Update: All 2026 biennials fully enriched with curators, artists & countries. New /subscribeToNewsletter endpoint live. /apiBiennials now returns full roster data.

POST/apiExhibitions

List Exhibitions

Curated exhibition records with dates, venues, coordinates. Filtered to verified/official_source quality only.

Query Parameters

city(string)e.g. Venice
status(string)e.g. current | upcoming | closing_soon | past
category(string)e.g. painting | photography | installation
limit(number)e.g. 50

Example

fetch("https://biennaleradar.base44.app/api/functions/apiExhibitions", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ city: "Venice" })
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/apiExhibitionDetail

Exhibition Detail

Full exhibition record including editorial summary, why_it_matters, artists, tags, lat/lng, ticket URL.

Query Parameters

slug(string)e.g. arthur-jafa-fondazione-prada-2026
id(string)e.g. abc123

Example

fetch("https://biennaleradar.base44.app/api/functions/apiExhibitionDetail", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ slug: "arthur-jafa-fondazione-prada-2026" })
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/apiBiennialsUpdated May 27

Biennials

All biennial records — 2026 calendar fully verified and enriched as of May 27, 2026. Includes curators, artists, participating countries.

Example

fetch("https://biennaleradar.base44.app/api/functions/apiBiennials", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({})
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/apiArtFairs

Art Fairs

Global art fair calendar with dates, venues, VIP/public opening dates.

Example

fetch("https://biennaleradar.base44.app/api/functions/apiArtFairs", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({})
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/apiCities

Cities

All city profiles with slugs for routing on my.biennale.com city pages.

Example

fetch("https://biennaleradar.base44.app/api/functions/apiCities", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({})
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/apiCityFeed

City Feed

Combined per-city feed of exhibitions + articles + fairs. Use for city detail pages.

Query Parameters

slug(string)e.g. venice (required)
limit(number)e.g. 20

Example

fetch("https://biennaleradar.base44.app/api/functions/apiCityFeed", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ slug: "venice" })
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/apiVenues

Venues

Venue records with addresses, coordinates, type, and opening hours.

Query Parameters

city(string)e.g. Paris
limit(number)e.g. 100

Example

fetch("https://biennaleradar.base44.app/api/functions/apiVenues", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ city: "Paris" })
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/apiPulseNew

Biennale Pulse

The Radar's editorial read on what's moving across the ecosystem — trending artists (with pulse tiers), momentum topics, and watch-list signals. Requires X-API-Key. Use ?format=checker for the homepage pulse-checker widget, or ?section=artists|topics|signals for a single feed.

Query Parameters

format(string)e.g. full | checker
section(string)e.g. artists | topics | signals
trending(boolean)e.g. true (only trending items)
limit(number)e.g. 10
api_key(string)e.g. your BIENNALE_RADAR_API_KEY

Example

fetch("https://biennaleradar.base44.app/api/functions/apiPulse", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ format: "full" })
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/generateRadarLiveJSON

Radar Live Feed

Curated real-time art world intelligence — approved news items from ARTnews, Artnet, Kunstkritikk, etc. Updated every 12 hours.

Example

fetch("https://biennaleradar.base44.app/api/functions/generateRadarLiveJSON", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({})
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/publicFeed

Unified Public Feed

Merged chronological feed of exhibitions + articles. Supports ?format=rss for RSS 2.0 output.

Query Parameters

type(string)e.g. exhibition | article
city(string)e.g. Venice
limit(number)e.g. 30
format(string)e.g. json | rss

Example

fetch("https://biennaleradar.base44.app/api/functions/publicFeed", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ type: "exhibition" })
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}
POST/getCollectionFeed

Collection Feed

Curated collection as JSON. Use slug from Admin → Collections.

Query Parameters

slug(string)e.g. venice-2026-must-see

Example

fetch("https://biennaleradar.base44.app/api/functions/getCollectionFeed", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ slug: "venice-2026-must-see" })
})

Response

{
  "count": 10,
  "venues": [
    {
      "id": "...",
      "title": "...",
      ...
    }
  ]
}

Integration Examples

Fetch 2026 Biennials (my.biennale.com)

const res = await fetch('https://biennaleradar.base44.app/api/functions/apiBiennials', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({})
});
const { biennials } = await res.json();

// biennials now include curators[], featured_artists[], participating_countries[]
biennials.forEach(b => {
  console.log(b.name, b.status, b.curators);
});

Current Exhibitions in Venice

const res = await fetch('https://biennaleradar.base44.app/api/functions/apiExhibitions', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ city: 'Venice', status: 'current', limit: 20 })
});
const { exhibitions } = await res.json();

Subscribe to Weekly Digest (new)

const res = await fetch('https://biennaleradar.base44.app/api/functions/subscribeToNewsletter', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: 'user@example.com',
    full_name: 'Jane Smith',
    source: 'my_biennale_com'
  })
});
const { success, message } = await res.json();

Homepage Pulse Checker (my.biennale.com)

// Compact payload for the pulse-checker widget on the homepage
const res = await fetch('https://biennaleradar.base44.app/api/functions/apiPulse?format=checker', {
  headers: { 'X-API-Key': 'YOUR_BIENNALE_RADAR_API_KEY' }
});
const pulse = await res.json();

// pulse.headline  -> { recurring_artists, live_signals, topics_tracked }
// pulse.top_movers -> [{ name, pulse_tier, appearances, trending, profile_path }]
// pulse.hot_topics -> [{ topic, count, trending }]
// pulse.headline_signal -> { title, signal_type, summary, source_url }
// pulse.cta -> { label: 'See the full Pulse', path: '/pulse' }

City Detail Page Feed

// For /cities/venice on my.biennale.com
const res = await fetch('https://biennaleradar.base44.app/api/functions/apiCityFeed', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ slug: 'venice', limit: 30 })
});
const { city, feed } = await res.json();
// feed contains mixed type: "exhibition" | "article" | "fair"

Integration Support

For API questions or integration help with my.biennale.com: corcoran.nyc@gmail.com

Full integration guide: MY_BIENNALE_API_INTEGRATION_GUIDE.md in the project root — send this to your dev team.