Migration: Search to Events
Guide for moving from the Encore API’s GET /api/v4/search endpoint to GET /api/v3/events in the TTG Storefront API v3, the newer API. The two APIs number their versions separately.
For the full v4 search reference, see Search on the legacy portal.
Endpoint Comparison
What Changed
From a global search to a retailer catalog you can search
The v4 endpoint took a query string and searched across every product. The v3 endpoint returns the events your retailer is set up to sell, scoped to one market, and takes an optional query to narrow that list.
locationId is required and picks the market (e.g. New York, London). Get the IDs from GET /api/v3/locations.
query is optional. It matches against event name, venue, category, cast and search keywords, up to 50 characters. Omit it, or send it blank, to list the whole catalog for the market.
Authentication
Legacy search needed no key; the optional affiliateId header only picked the retailer. v3 needs the three headers in Authentication & Headers on every call. The events you get back are the ones your retailer can sell.
Pagination
v3 lists come one page at a time, with a pagination block that says when to stop. See Pagination.
Terminology
Response Shape
Legacy (v4)
New (v3)
Key differences:
idis an opaque string — pass it toGET /api/v3/events/{eventId}/occurrences, never parse it (see IDs)startDateandendDateare both nullable — an open-ended run returnsnullfor either. Handle both explicitly.- The market is a
locationobject withid,name,country, andslug, not a barevenue.id slugis the event’s URL path segment on the TodayTix website; it can benullfor events without onenameis the event’s full title — use it on the product cardfromPriceis the lowest regular ticket price on sale across the event’s occurrences (its dates and times), as aMoneyobject in the event’s base currency (see Currency). It isnullwhen no regular tickets are on sale (sold out, off sale, or not yet on sale).maxDiscountPercentageis the best discount on sale as a whole number (25means “Save 25%”). It is omitted, notnull, when there is no discount or the event does not present savings as a percentage.orderLimitgives theminandmaxticket quantity a single order may contain. It is set per event and applies to every occurrence; each occurrence also carries the sameorderLimit.
Migration Checklist
- Send
X-TT-API-Key,X-TT-RetailerandX-TT-Platformon every call; dropaffiliateId - Look up the market you sell with
GET /api/v3/locations, then pass it as?locationId= - Keep passing your search term as
query, now alongsidelocationId - Treat
idas an opaque string — store it, don’t parse it - Read
startDate/endDateinstead ofbookingStarts/bookingEnds; both can benull - Render product cards from
name,fromPriceandmaxDiscountPercentage, and bound the quantity selector withorderLimit - Page with
limit/offsetuntiloffset >= pagination.total
Next Steps
After listing events, continue with the full Purchase Flow:
- Browse Occurrences —
GET /api/v3/events/{eventId}/occurrences(see Availability → Occurrences) - Browse Inventory —
GET /api/v3/events/{eventId}/occurrences/{occurrenceId}/inventory-items - Create Cart —
POST /api/v3/carts - Checkout —
POST /api/v3/orders