Skip to main contentSkip to searchSkip to results

Public Events API

Access events from 75+ cities in Europe — concerts, sports, museums, workshops & more. REST + MCP-compatible.

Free 100 req/day Business 10,000 req/day

Try the API

Live demo — calls /api/events?city=... directly. No key needed for public search.

// Results will appear here

Pricing

Free

€0/mo
  • 100 requests/day
  • JSON + GeoJSON formats
  • All 75+ cities
  • No credit card required
Get free key
Business

Business

€29/mo
  • 10,000 requests/day
  • JSON + GeoJSON formats
  • Real-time webhooks
  • Priority support
  • SLA guarantee
Start Business trial

Quick Start

1. Create a free API key in your profile — no credit card needed.
2. Make your first request:

curl -H "X-API-Key: your_key" \
  "https://explorioworld.com/api/public/events?city=Amsterdam&limit=10"

You can also pass the key as a Bearer token or query param:

# Bearer header (recommended)
curl -H "Authorization: Bearer exp_live_..." \
  "https://explorioworld.com/api/public/events?city=Amsterdam&limit=10"

# Query param
curl "https://explorioworld.com/api/public/events?key=exp_live_...&city=Amsterdam&limit=10"

SDK Snippets

curl -H "X-API-Key: exp_live_..." \
  "https://explorioworld.com/api/public/events?city=Amsterdam&category=workshop&limit=10"

GET/api/public/events

Returns upcoming events matching your filters — concerts, sports, workshops, museums and more. Requires API key authentication.

Query parameters

ParamTypeDefaultDescription
citystringCity name (e.g. Amsterdam, Brussels, Bucharest)
countrystringISO 2-letter country code (NL, BE, RO, FR, DE, GB…)
categorystringEvent category — see category list below
date_fromISO datetodayStart date filter (e.g. 2026-05-01)
date_toISO dateEnd date filter (e.g. 2026-05-31)
limitinteger20Max results (1–100)
offsetinteger0Pagination offset
latnumberLatitude for geo-radius filtering
lngnumberLongitude for geo-radius filtering
radiusnumberRadius in km (requires lat + lng)
formatstringjson"json" or "geojson" — for map-ready output

Example response

{
  "data": [
    {
      "id": 1042,
      "title": "Kids Science Workshop",
      "description": "Hands-on experiments for curious kids aged 6-12.",
      "category": "workshop",
      "startDate": "2026-05-10T10:00:00.000Z",
      "endDate": "2026-05-10T12:00:00.000Z",
      "city": "Amsterdam",
      "country": "NL",
      "venue": "NEMO Science Museum",
      "address": "Oosterdok 2, 1011 VX Amsterdam",
      "latitude": 52.3738,
      "longitude": 4.9123,
      "price": "€12",
      "currency": "EUR",
      "imageUrl": "https://...",
      "sourceUrl": "https://nemo.nl/...",
      "ageMin": 6,
      "ageMax": 12,
      "isFamily": true,
      "tags": "["science","hands-on","indoor"]",
      "timezone": "Europe/Amsterdam",
      "url": "https://explorioworld.com/events/1042"
    }
  ],
  "meta": {
    "limit": 10,
    "offset": 0,
    "count": 1,
    "hasMore": false
  }
}

GeoJSON format

Add ?format=geojson for map-ready output (Mapbox, Leaflet, etc.):

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": { "type": "Point", "coordinates": [4.9123, 52.3738] },
      "properties": {
        "id": 1042,
        "title": "Kids Science Workshop",
        "category": "workshop",
        "startDate": "2026-05-10T10:00:00.000Z",
        "city": "Amsterdam",
        "venue": "NEMO Science Museum",
        "price": "€12",
        "url": "https://explorioworld.com/events/1042"
      }
    }
  ]
}

GET/api/public/events/:id

Get full details for a specific event by its numeric ID, including related events from the same city.

curl -H "X-API-Key: your_key" \
  "https://explorioworld.com/api/public/events/1042"

Example response

{
  "event": {
    "id": 1042,
    "title": "Kids Science Workshop",
    "description": "Hands-on experiments for curious kids aged 6-12.",
    "category": "workshop",
    "startDate": "2026-05-10T10:00:00.000Z",
    "endDate": "2026-05-10T12:00:00.000Z",
    "city": "Amsterdam",
    "country": "NL",
    "venue": "NEMO Science Museum",
    "address": "Oosterdok 2, 1011 VX Amsterdam",
    "latitude": 52.3738,
    "longitude": 4.9123,
    "price": "€12",
    "url": "https://explorioworld.com/events/1042"
  },
  "related": [ ... ]
}

MCP Server

The MCP (Model Context Protocol) endpoint at /api/mcp allows Claude and other AI agents to discover events, venues, and build itineraries via JSON-RPC 2.0.

ToolDescription
search_eventsSearch by city, category, age, date, free_only
get_eventFull event details by ID
search_attractionsPermanent venues (museums, parks, playgrounds, pools, zoos)
get_attractionFull venue details by ID
get_citiesList all cities with event counts
search_circuitsMulti-day curated travel itineraries
search_journalsUser travel stories and diaries
create_planBuild a shareable day plan from event IDs
ask_aiNatural language queries (e.g. 'free outdoor events for toddlers')
list_categoriesList all valid category values
list_toolsDiscover available tools and their parameters

Add to Claude Desktop

{
  "mcpServers": {
    "explorio": {
      "url": "https://explorioworld.com/api/mcp",
      "transport": "http"
    }
  }
}

Or via CLI:

claude mcp add explorio --transport http https://explorioworld.com/api/mcp

Raw JSON-RPC example

curl -X POST https://explorioworld.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "search_events",
      "arguments": { "city": "Amsterdam", "category": "workshop", "limit": 5 }
    },
    "id": 1
  }'

Webhooks (B2B)

Register a webhook URL to receive real-time notifications when new events are ingested in your city/category. Requires a Business API key.

Register a webhook

curl -X POST https://explorioworld.com/api/keys/webhooks \
  -H "Authorization: Bearer exp_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-server.com/webhooks/explorio",
    "secret": "whsec_your_signing_secret",
    "events": ["event.created"]
  }'

Webhook payload

{
  "event": "event.created",
  "timestamp": "2026-05-01T08:00:00.000Z",
  "data": {
    "id": 1099,
    "title": "Summer Jazz Festival",
    "city": "Brussels",
    "country": "BE",
    "category": "concert",
    "startDate": "2026-07-15T19:00:00.000Z",
    "venue": "Atomium Park",
    "price": "Free",
    "url": "https://explorioworld.com/events/1099"
  }
}

Verify the signature

Each request includes an X-Webhook-Signature header. Verify it using HMAC-SHA256:

const crypto = require("crypto");

function verifyWebhook(payload, signature, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(payload)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

Event Categories

workshopconcerttheatersportsmuseumfestivalclassshowpoolparknaturerestaurantfarmcircusoperacinemaplaygroundindoor-play

Rate Limits & Headers

TierRequests/dayFormatsWebhooks
Free100JSON, GeoJSON
Business10,000JSON, GeoJSONYes

Every response includes rate-limit headers:

HeaderDescription
X-RateLimit-LimitYour daily request limit
X-RateLimit-RemainingRequests remaining today
X-RateLimit-ResetISO timestamp when the counter resets
X-API-VersionAPI version (currently 1)
Retry-AfterSeconds to wait after a 429 response

When rate limited, the response is 429. Upgrade to Business for 10,000 requests/day.

Error Codes

HTTPCodeCause
400INVALID_PARAMBad query parameter (invalid date, limit out of range, etc.)
401UNAUTHORIZEDMissing, invalid, or expired API key
404NOT_FOUNDEvent or resource not found
429RATE_LIMIT_EXCEEDEDDaily request quota reached — check Retry-After header
500INTERNAL_SERVER_ERRORUnexpected server error — please retry

Other Endpoints (public, no key required)

EndpointDescription
GET /api/eventsSearch events (city, category, q, mood, age, date, sort)
GET /api/events/[id]Event detail + related events
GET /api/attractionsSearch permanent venues (city, category, q, age)
GET /api/attractions/[id]Venue detail + related events
GET /api/citiesList all cities with event counts
GET /api/events/surpriseRandom event (city, ageMin, ageMax)
GET /api/circuitsList travel circuits (city, limit)
GET /api/journalsList travel journals (city, limit)
GET /api/mcpMCP server discovery + tool list

Ready to start?

Create a free API key in your profile. No credit card needed.

Get your API key