Vivid Seats APIvividseats.com ↗
Access Vivid Seats ticket listings, event search, venue data, and historical sales via 5 API endpoints. Filter by performer, venue, date, and category.
What is the Vivid Seats API?
The Vivid Seats API provides 5 endpoints for searching events, venues, and performers, retrieving live ticket listings with seat-level pricing, and pulling historical sold-listing data for price trend analysis. The get_listings endpoint returns per-ticket fields including section, row, quantity, base price, all-in price per ticket, and a deal score, while get_sold_listings exposes cursor-paginated sales history for a given production.
curl -X GET 'https://api.parse.bot/scraper/7a7ecd59-dec5-4d1e-b1eb-67f168459e15/search_suggestions?query=NBA' \ -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 vividseats-com-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: Vivid Seats SDK — discover performers, browse events and tickets."""
from parse_apis.Vivid_Seats_API import VividSeats, Event, NotFoundError
client = VividSeats()
# Search performers by name
for performer in client.performers.search(query="NBA", limit=3):
print(performer.name, performer.production_count, performer.category.name)
# Search upcoming events with pagination
for event in client.events.search(query="NBA", page_size=5, limit=5):
print(event.name, event.min_price, event.listing_count)
print(event.venue.name, event.venue.city, event.venue.state)
# Drill into a single event's ticket listings
event = client.events.search(query="NBA", limit=1).first()
if event:
for ticket in event.listings.list(limit=3):
print(ticket.section_name, ticket.row, ticket.price, ticket.all_in_price)
# Get full listing details including delivery options
try:
detail = ticket.details(production_id=str(event.id))
print(detail.section, detail.quantity, detail.service_charge)
for option in detail.delivery_options:
print(option.description, option.delivery_type, option.cost)
except NotFoundError as exc:
print(f"Event removed: {exc}")
break
# Check sold/historical listings for pricing trends
for sold in event.sold_listings.list(limit=5):
print(sold.price, sold.zone, sold.row)
print("exercised: performers.search / events.search / listings.list / ticket.details / sold_listings.list")
Search for performers, venues, or productions (events) by name. Returns matching results across all three categories. Use performer/venue IDs from these results to filter list_events. Productions returned here include listing and ticket counts.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search term (e.g., performer name, venue name, event name) |
{
"type": "object",
"fields": {
"venues": "array of venue objects with id, name, city, state",
"performers": "array of performer objects with id, name, category, webPath, productionCount",
"productions": "array of production/event objects with id, name, localDate, venue, performers, listingCount, ticketCount"
},
"sample": {
"data": {
"venues": [],
"performers": [
{
"id": 2724,
"name": "NBA Finals",
"webPath": "/nba-finals-tickets--sports-nba-basketball/performer/2724",
"category": {
"id": 3,
"name": "Sports"
},
"productionCount": 4
}
],
"productions": [
{
"id": 6653288,
"name": "NBA Summer League - Day 1",
"venue": {
"id": 1698,
"city": "Las Vegas",
"name": "Thomas and Mack Center",
"state": "NV"
},
"localDate": "2026-07-09T23:59:00-07:00[America/Los_Angeles]",
"performers": [
{
"id": 32790,
"name": "NBA Summer League"
}
]
}
]
},
"status": "success"
}
}About the Vivid Seats API
Search and Discovery
The search_suggestions endpoint accepts a free-text query and returns matched venues (with id, name, city, state), performers (with id, name, category, productionCount), and productions (with id, name, localDate, venue and performer references). The IDs returned here feed directly into the filtering parameters of list_events — venue_id, performer_id, and category_id — making it the natural starting point for any workflow.
Event Listings and Ticket Availability
list_events returns paginated upcoming productions sorted by rank. Each item exposes minPrice, avgPrice, listingCount, and ticketCount alongside event metadata. To drill into a specific event, pass its id as production_id to get_listings, which returns an event-level global summary (capacity, average all-in price, lowest all-in price) and a tickets array with per-listing fields: sectionName, row, quantity, price (base), allInPricePerTicket, dealScore, and badges. For full listing detail — including brokerId, deliveryOptions, seat numbers, and service charges — use get_listing_details with both the listing_id (from tickets[*].i) and the production_id.
Historical Sales Data
get_sold_listings returns recently completed sales for a production. Each record includes price, zone, row, and a text field describing the sale timestamp. The endpoint uses cursor-based pagination via meta.pagination.nextCursor and meta.pagination.hasMore, allowing iteration through full sales history for a given event.
Stale ID Handling
Production and listing IDs are time-sensitive. get_listings and get_listing_details document that stale IDs may return upstream 404 or 500 errors. Workflows should treat these as expected cases and refresh IDs via list_events or search_suggestions as needed.
The Vivid Seats API is a managed, monitored endpoint for vividseats.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when vividseats.com 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 vividseats.com 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?+
- Track ticket price trends for a specific performer by polling
get_sold_listingsover time using cursor-based pagination. - Build a venue-specific event calendar by filtering
list_eventswith avenue_idfromsearch_suggestions. - Compare
minPricevsavgPriceacross events in a category to identify outlier pricing for a given weekend. - Alert users when
dealScoreon a specific section drops below a threshold usingget_listingspolling. - Aggregate
listingCountandticketCountfromlist_eventsto gauge event demand across a performer's tour. - Reconstruct all-in cost breakdowns (base price vs service charges) from
get_listing_detailsfor price transparency tools. - Filter events by
start_dateandcategory_idto surface upcoming concerts or sports events in a given period.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Vivid Seats have an official developer API?+
What does `get_listings` return beyond just price?+
get_listings returns a global object with event-level stats (listing count, ticket count, venue capacity, average all-in price, lowest all-in price) and a tickets array where each entry includes sectionName, row, quantity, base price, allInPricePerTicket, a dealScore, and badges. To get broker ID, delivery options, and seat numbers for a specific listing, call get_listing_details with the listing_id and production_id.How do stale production or listing IDs behave?+
get_listings and get_listing_details note that stale IDs can return upstream 404 or 500 errors. This happens when an event sells out, is cancelled, or listings expire. The recommended approach is to re-fetch current production_id values from list_events and refresh listing_id values from get_listings before calling detail endpoints.Does the API expose resale or checkout URLs for purchasing tickets?+
Can I retrieve events for a specific city or geographic region?+
venue_id (resolved via search_suggestions) or by category_id and performer_id, but there is no standalone city or radius parameter on list_events. You can fork this API on Parse and revise it to add geographic filtering if the source supports it.