Developers
Use the Around Lex catalog in your own project
Everything on Around Lex comes from one checked catalog of events, places, guides and recurring groups. You can read the same records as JSON, subscribe to them as calendars, or follow them in a feed reader. There is no key and no sign-up.
What you get
Each record carries its Around Lex address, the official source it came from and the time we last checked it, in a field called checkedAt. Events list every date with its status, so a cancellation or a postponement shows up instead of quietly disappearing.
When an event's date is still in question, the event stays in the API with a schedule_question object that says what is unresolved and which official sources to check, and each of its dates is marked confirmed: false. Add confirmed=1 to leave those events out.
Event dates and times are Lexington time (America/New_York), with times in 24-hour HH:MM form. checkedAt and generated_at are UTC timestamps. A missing startTime or endTime means the organizer hasn't published one, and we don't fill it in.
Record fields keep the catalog's own names, like checkedAt and priceValue. Fields the API adds, like next_cursor and schedule_question, use underscores. Optional fields with no value are left out, except schedule_question, which is null.
Endpoints
Every endpoint answers GET and HEAD under https://aroundlex.com/api/v1. The full description, generated from the same schemas the site checks its catalog with, is the OpenAPI 3.1 document.
GET /api/v1/events
Events with a listed date from today on, or inside the from and to dates you give. Each event appears once, ordered by its first date in that window, with every listed date and its status. Filter with category, area, free=1, confirmed=1 or q, and page with limit (1 to 100, default 50) and cursor.
Example: https://aroundlex.com/api/v1/events?limit=1
Response, trimmed to fit: some fields, long text and long lists are cut short.
{
"data": [
{
"slug": "jack-o-lantern-trail-2026",
"url": "https://aroundlex.com/events/jack-o-lantern-trail-2026",
"title": "Jack-o-lantern Trail",
"source": "https://www.lexingtonky.gov/playing/arts-events/fall-events-programs/jack-o-lantern-trail",
"checkedAt": "2026-10-21T18:17:17Z",
"schedule_question": null,
"matched_occurrence": "trail-oct27"
}
],
"next_cursor": "WyIyMDI2LTEwLTI3VDA3OjM5OjMxWiIsIjIwMjYtMTAtMjciLCJqYWNrLW8tbGFudGVybi10cmFpbC0yMDI2Iiw...",
"generated_at": "2026-10-27T07:39:31Z"
}GET /api/v1/events/{slug}
One event with all its listed dates, the place, admission, the official source and when we last checked it.
Example: https://aroundlex.com/api/v1/events/jack-o-lantern-trail-2026
Response, trimmed to fit: some fields, long text and long lists are cut short.
{
"data": {
"slug": "jack-o-lantern-trail-2026",
"url": "https://aroundlex.com/events/jack-o-lantern-trail-2026",
"title": "Jack-o-lantern Trail",
"summary": "An evening trail of carved pumpkins at McConnell Springs, with four confirmed nights to...",
"details": "The city lists October 27–30, 6:30–10 pm, with gates closing at 9:30 pm. Admission is $...",
"category": "Outdoors",
"tags": [
"fall",
"with-kids"
],
"organizer": "Lexington Parks & Recreation",
"place": {
"slug": "mcconnell-springs",
"name": "McConnell Springs",
"area": "West Lexington",
"address": "416 Rebmann Lane",
"url": "https://aroundlex.com/places/mcconnell-springs"
},
"admission": "paid",
"price": "$6; ages 12 and under free",
"priceValue": 6,
"priceNote": "At-the-gate admission. Check the official page for changes.",
"beforeYouGo": "Parking is limited. The city lists an offsite shuttle from 6–8:30 pm; follow its parkin...",
"tickets": {
"note": "Admission is paid at the gate. Offsite parking on Old Frankfort Pike has a shuttle from...",
"source": "https://www.lexingtonky.gov/playing/arts-events/fall-events-programs/jack-o-lantern-trail",
"checkedAt": "2026-10-21T18:17:17Z"
},
"ages": {
"min": 0,
"recommended": true,
"note": "The city calls it perfect for all ages; children 12 and under get in free.",
"source": "https://www.lexingtonky.gov/playing/arts-events/fall-events-programs/jack-o-lantern-trail",
"checkedAt": "2026-10-27T05:26:51Z"
},
"source": "https://www.lexingtonky.gov/playing/arts-events/fall-events-programs/jack-o-lantern-trail",
"checkedAt": "2026-10-21T18:17:17Z",
"occurrences": [
{
"id": "trail-oct27",
"date": "2026-10-27",
"startTime": "18:30",
"endTime": "22:00",
"status": "scheduled",
"url": "https://aroundlex.com/events/jack-o-lantern-trail-2026?occurrence=trail-oct27",
"state": "upcoming",
"confirmed": true
},
{
"id": "trail-oct28",
"date": "2026-10-28",
"startTime": "18:30",
"endTime": "22:00",
"status": "scheduled",
"url": "https://aroundlex.com/events/jack-o-lantern-trail-2026?occurrence=trail-oct28",
"state": "upcoming",
"confirmed": true
}
],
"schedule_question": null
},
"generated_at": "2026-10-27T07:39:31Z"
}GET /api/v1/places
Every place in the catalog in slug order, with its official website and a calendar address for its events.
Example: https://aroundlex.com/api/v1/places?limit=1
Response, trimmed to fit: some fields, long text and long lists are cut short.
{
"data": [
{
"slug": "a-plus-comics-southland",
"url": "https://aroundlex.com/places/a-plus-comics-southland",
"name": "A+ Comics & Collectibles",
"kind": "Shop",
"area": "Southland",
"source": "https://www.apluscomics.com/southland-drive",
"checkedAt": "2026-10-21T17:22:09Z"
}
],
"next_cursor": "WyJhLXBsdXMtY29taWNzLXNvdXRobGFuZCJd",
"generated_at": "2026-10-27T07:39:31Z"
}GET /api/v1/places/{slug}
One place, including any open questions about visitor details.
Example: https://aroundlex.com/api/v1/places/mcconnell-springs
Response, trimmed to fit: some fields, long text and long lists are cut short.
{
"data": {
"slug": "mcconnell-springs",
"url": "https://aroundlex.com/places/mcconnell-springs",
"name": "McConnell Springs",
"kind": "Park",
"area": "West Lexington",
"address": "416 Rebmann Lane",
"town": "Lexington",
"region": "KY",
"summary": "A Lexington park hosting the seasonal Jack-o-lantern Trail. Event hours and admission d...",
"visitNote": "For the trail, check the official gate-closing time and parking/shuttle instructions.",
"website": "https://www.lexingtonky.gov/playing/arts-events/fall-events-programs/jack-o-lantern-trail",
"source": "https://www.lexingtonky.gov/playing/arts-events/fall-events-programs/jack-o-lantern-trail",
"checkedAt": "2026-10-14T23:11:02Z",
"calendar_url": "https://aroundlex.com/places/mcconnell-springs.ics"
},
"generated_at": "2026-10-27T07:39:31Z"
}GET /api/v1/guides
Guide summaries in slug order: title, intro, area, when it was checked, how long a dated guide applies, and the sources it cites.
Example: https://aroundlex.com/api/v1/guides?limit=1
Response, trimmed to fit: some fields, long text and long lists are cut short.
{
"data": [
{
"slug": "a-good-day-for-less",
"url": "https://aroundlex.com/guides/a-good-day-for-less",
"title": "A good day for less",
"area": "Around Lexington",
"checkedAt": "2026-10-15T13:44:52Z",
"source": "https://finearts.uky.edu/art-museum",
"sources": [
"https://finearts.uky.edu/art-museum",
"https://www.lexpublib.org/locations/central-library"
]
}
],
"next_cursor": "WyJhLWdvb2QtZGF5LWZvci1sZXNzIl0",
"generated_at": "2026-10-27T07:39:31Z"
}GET /api/v1/organizers
Recurring groups such as run clubs and storytimes, with the schedule each group publishes and up to five upcoming meetings. Nothing is listed past the date we checked the schedule through.
Example: https://aroundlex.com/api/v1/organizers?limit=1
Response, trimmed to fit: some fields, long text and long lists are cut short.
{
"data": [
{
"slug": "bgcc-legacy-trail-easy-ride",
"url": "https://aroundlex.com/organizers/bgcc-legacy-trail-easy-ride",
"name": "Legacy Trail easy ride, Bluegrass Cycling Club",
"kind": "cycling club",
"area": "Northside",
"upcoming": [
{
"id": "bgcc-legacy-trail-easy-ride-2026-10-28-1000",
"date": "2026-10-28",
"startTime": "10:00",
"endTime": "13:00"
},
{
"id": "bgcc-legacy-trail-easy-ride-2026-11-04-1000",
"date": "2026-11-04",
"startTime": "10:00",
"endTime": "13:00"
}
],
"source": "https://bgcycling.net/content.aspx?page_id=4002&club_id=740127&item_id=3081798",
"checkedAt": "2026-10-25T17:29:14Z"
}
],
"next_cursor": "WyJiZ2NjLWxlZ2FjeS10cmFpbC1lYXN5LXJpZGUiXQ",
"generated_at": "2026-10-27T07:39:31Z"
}GET /api/v1/openapi.json
The OpenAPI 3.1 description of every endpoint, parameter and field, built from the same schemas the site checks its catalog with.
Paging and errors
Lists return data, next_cursor and generated_at. When next_cursor isn't null, send it back as cursor, with the same other parameters, to get the next page. The cursor marks a place in the sort order, not a page number, so an item that drops out between requests doesn't push another one onto the wrong page. An events cursor also remembers when you started, so an event whose date ends partway through your walk doesn't show up twice.
A guide can cite several official pages, so guides have a sources list too. Their source field is the first of those, or null when a guide cites none.
A bad or unknown parameter gets a 400, and an unknown slug or endpoint gets a 404, each as JSON with a status and a message that says what was wrong.
Feeds
- All upcoming events, calendar. https://aroundlex.com/events.ics
- This weekend, calendar. https://aroundlex.com/this-weekend.ics
- Free things to do, calendar. https://aroundlex.com/free-things-to-do.ics
- Upcoming events, Atom feed. https://aroundlex.com/feed.xml
- Upcoming events, JSON Feed. https://aroundlex.com/feed.json
Every place and every recurring group has its own calendar too, for example https://aroundlex.com/places/gatton-park.ics for Gatton Park and https://aroundlex.com/organizers/johns-chevy-chase-group-runs.ics for John's Run/Walk Shop Chevy Chase group runs. The feeds page explains how to subscribe in Apple Calendar, Google Calendar and Outlook.
MCP server for AI assistants
The same catalog answers Model Context Protocol clients at https://aroundlex.com/mcp, over Streamable HTTP. It is read-only and needs no key. Every request is a POST with one JSON-RPC message, answered with one JSON object; the server opens no event stream and keeps no session, so GET, HEAD and DELETE get a 405.
It speaks protocol version 2026-07-28, where each request carries its version in _meta and the MCP-Protocol-Version, Mcp-Method and Mcp-Name headers must match the body, and the initialize-based versions 2025-11-25, 2025-06-18, 2025-03-26. A request without an MCP-Protocol-Version header is read as 2025-03-26. server/discover lists the versions.
Tools
search_events(query, from, to, free, limit): Upcoming events in and around Lexington, Kentucky from the Around Lex catalog, each at its next matching date, best match first when you give a query and by date otherwise. Dates and times are Lexington time. Every item has the official source, the Around Lex page and when it was last checked.get_event(slug): One Around Lex event by slug: its upcoming dates with their status (scheduled, rescheduled, cancelled or postponed), the venue, admission and price line, whether its schedule is confirmed, the official source and when it was last checked.search_places(query, limit): Places in the Around Lex catalog (parks, venues, museums, libraries, restaurants, bars and shops in and around Lexington, Kentucky), best match first, each with its official website, source and check time.get_weekend(limit): The coming Friday to Sunday in Lexington, Kentucky: the Weekend 5 picks from aroundlex.com/this-weekend and the other checked events that weekend, each with its date, time, venue, price line, official source and check time.get_guide(slug, query): One Around Lex guide by slug, or the best matching current guide for a query: its title, area, whether it is current, the section titles and the official pages it cites. The guide's own text stays on its page; link to it.
A tool answer is short facts only: names, dates, times, statuses, the venue, the price line, the official source (sourceUrl), the Around Lex page (pageUrl) and checkedAt, plus a usage note. Summaries, descriptions, guide text and photos are not part of it. The answer comes as structuredContent and as the same JSON in a text block. A fact we don't hold is left out, never filled in.
Calling get_weekend under 2026-07-28:
POST /mcp
Content-Type: application/json
Accept: application/json, text/event-stream
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: get_weekend
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_weekend",
"arguments": {},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}Errors and limits
An unknown tool or a malformed tools/call gets JSON-RPC error -32602, and an unknown method -32601 (with a 404 under 2026-07-28). Arguments a tool can't use, like a bad date or an unknown slug, come back as a tool result with isError set and a sentence that says what to change. Headers that don't match the body get a 400 with -32020, and an unsupported version a 400 with -32022 and the supported list. A JSON-RPC batch gets a 400, even under 2025-03-26, whose spec allows batches, so send one message per request. A request from a web page on another site gets a 403. Each address may send 60 requests a minute; past that the answer is a 429 with Retry-After. Answers are never cached. The plan with your AI page has prompts for people who use ChatGPT, Claude or Gemini.
Reusing the data
You can read the API and the feeds and link to any listing. The catalog is not licensed for republishing, so email hello@aroundlex.com before you reuse its facts, like event dates, places, prices and source links, and credit "Around Lex, aroundlex.com" with a link if you do.
The same goes for the summaries and descriptions, which are our own writing. Ask before republishing them.
Photos are not part of the API or the feeds. They keep their own licenses, listed on the photo credits page.
Caching and fair use
Responses are cached at the edge for ten minutes, and for up to an hour after that a cached copy may be served while a fresh one is fetched. Asking more often than every ten minutes won't get you anything newer, so please cache on your side and keep your requests modest.
Versions
This is version 1. We may add fields to it. A change that removes or reshapes an existing field would come with a new version number.
Questions
Building something with this, or found a mistake in a record? Email hello@aroundlex.com. There is also a short plain-text map of the site at https://aroundlex.com/llms.txt for language-model tools.