YOHOMO APIyohomo.ca ↗
Access YOHOMO's curated list of upcoming Toronto LGBTQ2+ events. Filter by category, search by text, and fetch full event details including venue, price, and tickets.
What is the YOHOMO API?
The YOHOMO API exposes 2 endpoints that surface the full curated feed of upcoming Toronto LGBTQ2+ events as published on yohomo.ca. The list_events endpoint returns paginated event summaries — including event ID, category, title, and venue — across both one-off events and long-running events such as exhibitions and recurring classes. The get_event endpoint delivers per-event detail including description, times, address, price label, and external ticketing or social links.
curl -X GET 'https://api.parse.bot/scraper/dee5e3ea-936a-4a8b-a31c-b1f5e81f9921/list_events?query=519' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace yohomo-ca-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: browse Toronto queer events, filter by category, and drill into details."""
from parse_apis.yohomo_ca_api import Yohomo, Category, EventNotFound
client = Yohomo()
# List upcoming culture events, capped at 5 total items.
for ev in client.event_summaries.list(category=Category.CULTURE, limit=5):
print(ev.title, "|", ev.start_date, "-", ev.end_date, "|", ev.price)
# Search by text and drill into the first match's full detail page.
hit = client.event_summaries.list(query="yoga", limit=1).first()
if hit is not None:
detail = hit.details()
print(detail.title)
print(detail.start_date_label, "—", detail.end_date_label)
print(detail.description[:120])
if detail.socials_url is not None:
print("Social:", detail.socials_url)
# Point lookup by an id discovered from the listing above.
if hit is not None:
try:
event = client.events.get(event_id=hit.event_id)
print(event.title, "|", event.location_name, "|", event.price)
except EventNotFound:
print("Event no longer available")
print("exercised: event_summaries.list / details / events.get")
Returns the full curated list of upcoming Toronto LGBTQ2+ events (one row per event, both one-off events and long-running events such as exhibitions or recurring classes), sorted by start date ascending. The whole list is fetched in one round trip and then optionally narrowed by category (exact match on the site's Party / Drag / Culture tags) and by a free-text query matched case-insensitively as a substring of the event title or venue name, mirroring the site's own search box. Results are paged locally with page and page_size (default page 1, 50 per page, max 100); total is the count of events matching the filters across all pages and has_more tells whether a further page exists. A filter matching nothing returns an empty events array with total 0. One-off events carry start_time/end_time and a single-day start_date = end_date; long_running events carry a start_date/end_date range and null times (the end year is inferred from the start year, rolling into the next year when the end month precedes the start month). Dates are ISO YYYY-MM-DD in Toronto local terms; price is the site's free-text price label.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number over the filtered result list. |
| query | string | Free-text search matched as a substring of the event title or venue name. Omitted = no text filter. |
| category | string | Event category filter (case-insensitive). Omitted = all categories. |
| page_size | integer | Events per page; values above 100 are clamped to 100. |
{
"type": "object",
"fields": {
"page": "integer page returned",
"total": "integer count of events matching the filters across all pages",
"events": "array of event summaries; event_id (string, e.g. event/<slug> or events-long/<slug>) is the key accepted by get_event; category is one of Party, Drag, Culture; long_running boolean; start_date/end_date ISO dates; start_time/end_time 12-hour clock labels or null for long-running events; sold_out boolean; price free-text label",
"has_more": "boolean, true when a further page exists",
"page_size": "integer effective page size"
},
"sample": {
"data": {
"page": 1,
"total": 93,
"events": [
{
"url": "https://www.yohomo.ca/event/shrek-lesque-drag-bingo-brunch-granite-brewery",
"price": "$18.48 +",
"title": "Shrek-Lesque Drag Bingo Brunch @ Granite Brewery",
"address": "245 Eglinton Avenue East",
"category": "Drag",
"end_date": "2026-09-13",
"end_time": "3:00 pm",
"event_id": "event/shrek-lesque-drag-bingo-brunch-granite-brewery",
"sold_out": false,
"image_url": "https://cdn.prod.website-files.com/63ced8a399e3774611313bd8/6a9b0e8d1a22b428dcf3bb7e_oklplll.webp",
"start_date": "2026-09-13",
"start_time": "12:05 pm",
"description": "Get ready for a wild drag bingo brunch with all the Shrek vibes and burlesque twist you didn't know you needed!",
"long_running": false,
"location_name": "Granite Brewery"
},
{
"url": "https://www.yohomo.ca/events-long/2slgbtq-community-yoga-2",
"price": "Free, Register on first day only",
"title": "2SLGBTQ+ Community Yoga",
"address": "519 Church Street",
"category": "Culture",
"end_date": "2026-12-15",
"end_time": null,
"event_id": "events-long/2slgbtq-community-yoga-2",
"sold_out": false,
"image_url": "https://cdn.prod.website-files.com/63ced8a399e3774611313bd8/6a73795db11a296cc953940e_742154339_18599160469047773_2896728611443530963_n.jpg",
"start_date": "2026-07-14",
"start_time": null,
"description": "2SLGBTQ+ Community Yoga summer and winter cohorts will run from July 14 to December 15.",
"long_running": true,
"location_name": "The 519 Community Centre"
}
],
"has_more": true,
"page_size": 50
},
"status": "success"
}
}About the YOHOMO API
Event List and Filtering
The list_events endpoint returns all upcoming events in a single sorted fetch, ordered by start date ascending. You can narrow results using three optional filters: query matches substrings against event title or venue name; category filters by event category (case-insensitive); and page / page_size handle pagination. The page_size parameter is clamped to a maximum of 100. Each call returns total (count of matched events across all pages), has_more (boolean), and an events array of summaries. The event_id field in each summary — formatted as event/<slug> or events-long/<slug> — is what you pass into get_event.
Per-Event Detail
The get_event endpoint accepts a single required parameter, event_id, exactly as it appears in list_events results. It returns the full event record: title, description (plain text), start_date_label, price (free-text label), tickets_url, and socials_url (both nullable). The long_running boolean distinguishes event types: when true, end_date_label and time_note are populated and start_time / end_time are null; when false, start_time and end_time appear in 12-hour format and time_note is null.
Coverage and Scope
Coverage is specific to Toronto and reflects YOHOMO's editorial curation — the events listed are chosen by the YOHOMO team, not algorithmically aggregated from all sources. Both repeating/long-running events (e.g. gallery exhibitions, weekly classes) and discrete one-off events are included and are distinguished by the events-long/<slug> vs event/<slug> ID prefix, as well as the long_running field on each detail record.
The YOHOMO API is a managed, monitored endpoint for yohomo.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when yohomo.ca changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official yohomo.ca API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Toronto LGBTQ2+ event calendar app filtered by category using
list_eventscategory param - Aggregate event venue addresses from
get_eventto plot community event locations on a map - Notify subscribers of newly added events by polling
list_eventssorted by start date - Display ticket and social links from
tickets_urlandsocials_urlin a curated event digest - Separate one-off events from long-running exhibitions using the
long_runningboolean for distinct UI treatment - Power a search feature over event titles and venue names using the
queryparam onlist_events
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does YOHOMO offer an official developer API?+
How does the API distinguish a one-off event from a long-running event like an exhibition or recurring class?+
get_event response includes a long_running boolean. When true, the event has an end_date_label and a free-text time_note (e.g. 'Every Tuesday'); start_time and end_time will be null. When false, start_time and end_time are populated in 12-hour format and time_note is null. The event_id prefix also signals the type: events-long/<slug> vs event/<slug>.Is event data available for cities outside Toronto?+
Does the API return past events or only upcoming ones?+
list_events endpoint returns upcoming events only — there is no date-range parameter or archive access. Past events are not exposed. You can fork the API on Parse and revise it to add a historical or date-filtered endpoint if the source surfaces that data.What does the `price` field contain — is it structured (numeric) or free-text?+
price field on get_event is a free-text label as shown on the site, such as 'Free', 'Pwyc', or a dollar amount string. It is not a numeric value, so direct price-range filtering is not supported in the current API. You can fork the API on Parse and revise it to parse and expose a numeric price field.