Passo APIpasso.com.tr ↗
Query live event listings from Passo.com.tr. Get titles, venues, dates, price ranges, categories, and availability. Filter by city, district, date, and category.
What is the Passo API?
The Passo API exposes 1 endpoint — list_events — that returns structured data for ticketed events currently on sale at passo.com.tr, covering concerts, sports matches, theatre, and museum entries across Turkey. Each event object includes up to 12 response fields: title, description, category, start date, venue, city, district, price range, availability status, ticket URL, and a stable external ID. Results support filtering by city, district, category, free-text search, and date range.
curl -X GET 'https://api.parse.bot/scraper/a8f279b2-3822-4cbc-8aa1-c53a80ece67a/list_events?city=Istanbul&category=music' \ -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 passo-com-tr-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: Passo Events SDK — browse upcoming events in Istanbul."""
from parse_apis.passo_com_tr_api import Passo, Category, InputFormatInvalid
client = Passo()
# List music events in Istanbul, capped at 5 total items.
for event in client.events.list(city="Istanbul", category=Category.MUSIC, limit=5):
print(event.title, event.start_date, event.venue_name)
# Drill into the first sports event to read pricing and venue details.
event = client.events.list(category=Category.SPORTS, limit=1).first()
if event is not None:
print(event.title, event.city, event.district)
print("Price:", event.minimum_price, "-", event.maximum_price, event.currency)
print("Venue:", event.venue_name, event.venue_address)
# Search by text with a date window; handle invalid-format errors.
try:
for event in client.events.list(
search="konser",
start_date="2025-07-01",
end_date="2025-12-31",
limit=3,
):
print(event.title, event.availability, event.ticket_url)
except InputFormatInvalid as e:
print("Bad filter input:", e.message)
print("exercised: events.list (city/category/search/date filters)")
Returns one page of events currently listed on Passo, ordered by the site's default (ascending event date). Each row is a single dated event (concerts, matches, theatre, museum entries, season/combo tickets); undated tour/festival group pages are excluded. Results are de-duplicated by external_id. City, category and search are applied by the site; start_date, end_date and district are applied locally: the date range is checked against each event's start date while scanning up to 1500 events of the site's stream, and district is matched (case- and Turkish-accent-insensitive) against the venue's district on the returned page only, so a district-filtered page can hold fewer than limit rows while has_next still reflects the underlying stream. Every returned event costs one extra request for its detail page, so limit is capped at 20 (default 10). Pagination: page (1-based) and limit select a slice of the filtered stream; pagination.has_next is true when at least one more matching event exists, pagination.scanned_events is how many events were inspected, and pagination.scan_complete is false only when the 1500-event scan cap was reached before enough matches were found. An unknown city returns an empty events array. artist is populated only when the site tags a named performer (often null); venue_address, district, latitude and longitude are null when the venue has no map data; minimum_price/maximum_price/currency are null when no ticket categories are published. Dates are ISO-8601 in Turkey time (+03:00).
| Param | Type | Description |
|---|---|---|
| city | string | City name as listed on Passo (e.g. Istanbul, Ankara, Izmir); accent-insensitive, so Istanbul and İstanbul both match. Omitted = all cities. A city Passo does not list yields an empty result. |
| page | integer | 1-based page number over the filtered event stream. |
| limit | integer | Events per page; values above 20 are clamped to 20. |
| search | string | Free-text search over event, artist and venue names (the site's search box). Omitted = no text filter. |
| category | string | Top-level Passo category. Omitted = all categories. |
| district | string | Venue district within the city (e.g. Beşiktaş, Kadıköy), matched case- and accent-insensitively against the venue's district on the returned page. Omitted = no district filter. |
| end_date | string | ISO date YYYY-MM-DD; only events whose start date is on or before this day are returned. Must not be before start_date. Omitted = no upper bound. |
| language | string | Language of titles, descriptions, category names and ticket URLs. |
| start_date | string | ISO date YYYY-MM-DD; only events whose start date is on or after this day are returned. Omitted = no lower bound. |
{
"type": "object",
"fields": {
"events": "array of event objects: external_id (stable Passo event id as string), title, description (plain text, HTML stripped), category, subcategory, artist (nullable), venue_name, venue_address (nullable), city, district (nullable), latitude/longitude (numbers, nullable), start_date/end_date (ISO-8601 with +03:00), image_url, minimum_price/maximum_price (numbers, nullable), currency (ISO code, nullable), ticket_url, availability (available | unavailable | cancelled)",
"pagination": "object: page, limit, has_next (another matching event exists), scanned_events (events inspected in this call), scan_complete (false only when the scan cap stopped the search early)"
},
"sample": {
"data": {
"events": [
{
"city": "İstanbul",
"title": "Metro Boomin",
"artist": null,
"category": "Müzik",
"currency": "TRY",
"district": "Şişli",
"end_date": "2026-09-22T23:59:00+03:00",
"latitude": 41.042544,
"image_url": "https://image.passo.com.tr/api/r/tr/p/event/30072026094624-metroboomin-yatay_jpg.jpeg",
"longitude": 28.993282,
"start_date": "2026-09-22T21:30:00+03:00",
"ticket_url": "https://www.passo.com.tr/en/event/metro-boomin-konser-2026-kucukciftlik-park-biletleri/12409335",
"venue_name": "KüçükÇiftlik Park",
"description": "METRO BOOMIN, THE VISIONARY WHO REDEFINED THE BOUNDARIES OF MODERN HIP-HOP AND TRAP, IS COMING TO KÜÇÜKÇİFTLİK PARK ON SEPTEMBER 22! Metro Boomin, one of the most influential producers of our time...",
"external_id": "12409335",
"subcategory": "Dj - Party",
"availability": "available",
"maximum_price": 13000,
"minimum_price": 5000,
"venue_address": "Harbiye Mh. Kadırgalar Cd. No 4 Şişli İstanbul"
}
],
"pagination": {
"page": 1,
"limit": 3,
"has_next": true,
"scan_complete": true,
"scanned_events": 22
}
},
"status": "success"
}
}About the Passo API
What the API Returns
The list_events endpoint returns a paginated array of event objects sourced from Passo's live inventory. Each object carries a stable external_id for deduplication, a plain-text description (HTML stripped), a category label matching Passo's top-level taxonomy, start_date, and structured venue data including venue name, city, and district. Price data is expressed as a range (min/max), and an availability flag signals whether tickets remain on sale. A ticket_url links directly to the Passo purchase page for that event.
Filtering and Pagination
The endpoint accepts a city parameter (e.g. Istanbul, Ankara, Izmir) that is accent-insensitive, so Istanbul and İstanbul resolve identically. You can narrow results further with district (e.g. Beşiktaş, Kadıköy), category, a start_date/end_date ISO date window, and a search string that matches against event, artist, and venue names. The language parameter controls the language of titles, descriptions, category names, and ticket URLs. Pages are 1-based and capped at 20 events per call via the limit parameter.
Pagination Object
Every response includes a pagination object with page, limit, has_next, scanned_events, and scan_complete. The has_next flag tells you whether at least one more matching event exists beyond the current page. scan_complete being false means the full filtered stream has not yet been walked — useful when you need to know whether totals are exact. Undated tour and festival group pages are excluded from results; only events with a concrete start date appear.
Coverage Notes
Passo lists events primarily in Turkish cities. Category values mirror Passo's own taxonomy and may include concerts, theatre, sports, and museum/exhibition entries. Combo and season tickets appear as distinct rows when they carry a date.
The Passo API is a managed, monitored endpoint for passo.com.tr — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when passo.com.tr 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 passo.com.tr 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 Turkey events calendar app using
start_date,city, andcategoryfilters fromlist_events. - Monitor ticket availability for a specific artist or venue using the
searchparameter and the availability field. - Aggregate event price ranges across Istanbul districts by looping
list_eventswith thedistrictparameter. - Send alerts when new events appear in a given city by comparing
external_idvalues across polling intervals. - Populate a venue discovery tool with event counts and date ranges per
districtandcity. - Track category-level event volume in Ankara versus Izmir using repeated
category+cityqueries. - Feed a multilingual events widget using the
languageparameter to switch title and description locale.
| 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 Passo have an official developer API?+
What does `list_events` return for price data, and how is availability indicated?+
Can I retrieve past events or historical ticket sales data?+
list_events endpoint only returns events that are currently listed and on sale on Passo — past or expired events are not included. You can fork this API on Parse and revise it to add an endpoint that targets archived or past-event pages if that data becomes available.Does the API return individual seat-level data or performer lineups?+
How does pagination behave when filtering by district or date range?+
pagination.scan_complete field in the response tells you whether all matching events have been inspected for the current filter set. If scan_complete is false, more events may exist but have not yet been walked. Use has_next to determine whether to request the next page, and increment the page parameter to continue. The scanned_events count shows how many events were examined in that call.