Most listing sources give you one endpoint per platform. TripAdvisor
doesn't — attractions, hotels, and restaurants are three separate
endpoints with three separate field sets, because a restaurant's
cuisines and a hotel's hotelClass don't mean anything on the other
record type. Pull only one and you get a partial picture of a
destination; a museum, a boutique hotel, and a tasting-menu restaurant
each live in a different endpoint entirely.
If you're an agent (or building one) reading this rather than a human, the full machine-readable schema for every endpoint below lives at mindcase.co/skills.md.
What does each category endpoint actually return?
All three share the same input shape — a query (location or keyword) or
a startUrls list — and the same $0.002-per-record price. What differs is
the field set, because each category has fields the others don't:
- Attractions (24 fields) is the only
one with
bookingUrl,lowestTicketPrice, andticketOffers— direct Viator booking links and prices, not just a listing. - Hotels (28 fields) is the only one with
hotelClass,rooms,priceRange,amenities, andhotelOffers— and the only one that takescheckInDate/checkOutDateas inputs to get live room pricing rather than a static listing. - Restaurants (34 fields) is the
richest of the three:
cuisines,popularDishes,mealTypes,dietaryRestrictions,openingHours,menuUrl,orderOnline, and aclosedflag none of the other two have.
All three also return rank and rankOutOf — a place's position within
its own category in that destination, not a global score. A restaurant
ranked 12 out of 800 in Rome and a hotel ranked 12 out of 300 in Rome are
both real signals, but they're not comparable to each other.
How do you pull all three categories for one destination?
Say you're building a destination guide for Kyoto — attractions, hotels,
and restaurants in one pass. It's three calls, same query, different
endpoint:
curl -X POST "https://api.mindcase.co/v1/data/tripadvisor/attractions/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"params": {
"query": "Kyoto",
"maxResults": 20
}
}'
# $0.002 per attractionHow do you get hotels for the same destination?
Same query, same shape, tripadvisor/hotels instead — add
checkInDate/checkOutDate if you want live room pricing and offers
rather than a static listing:
curl -X POST "https://api.mindcase.co/v1/data/tripadvisor/hotels/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"params": {
"query": "Kyoto",
"maxResults": 20,
"checkInDate": "2026-12-20",
"checkOutDate": "2026-12-23"
}
}'
# $0.002 per hotelHow do you get restaurants for the same destination?
Same shape again, tripadvisor/restaurants — the richest of the three
endpoints, with cuisines, popularDishes, and dietaryRestrictions
that don't exist on the other two:
curl -X POST "https://api.mindcase.co/v1/data/tripadvisor/restaurants/run?wait=true" \
-H "Authorization: Bearer $MINDCASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"params": {
"query": "Kyoto",
"maxResults": 20
}
}'
# $0.002 per restaurantThree calls, 60 records, $0.12 total — a destination guide covering things to do, where to stay, and where to eat, each with its own category-specific fields intact.
How do you use rank without it being misleading?
rank/rankOutOf is a within-category position, so the useful move is
comparing it against the field that actually explains it, not quoting it
alone. A restaurant ranked 4th out of 900 with a priceLevel of $$$$
and a hotel ranked 4th out of 300 with a hotelClass of 3 are both real
top-tier results in their own category — pairing rank with cuisines,
hotelClass, or attractionTypes before presenting it keeps a raw
number from reading as more comparable than it is.
What can't you get from Mindcase?
Two cases.
Live room availability isn't guaranteed. checkInDate/checkOutDate
on the hotels endpoint return hotelOffers and pricing TripAdvisor is
showing at request time — a snapshot, not a live booking hold. A property
can sell out between your call and a traveler trying to book it.
Search coverage depends on query matching a real TripAdvisor
destination. A city name typically resolves cleanly; an ambiguous or
very small locality might return a narrower result set than a broader
regional search would, since the endpoint is matching against
TripAdvisor's own destination index, not doing geographic inference.
Which endpoint should you use for which job?
| Endpoint | Unique fields | Price | Best for |
|---|---|---|---|
| TripAdvisor Attractions | bookingUrl, ticketOffers | $0.002 / attraction | Things-to-do research with bookable tickets |
| TripAdvisor Hotels | hotelClass, rooms, hotelOffers | $0.002 / hotel | Stay research with live pricing |
| TripAdvisor Restaurants | cuisines, popularDishes, dietaryRestrictions | $0.002 / restaurant | Dining research with menu and cuisine detail |
FAQ
No. One Mindcase API key covers all three TripAdvisor endpoints, along with every other endpoint on the platform.
Yes. All three endpoints accept startUrls as an alternative to query, so you can point them directly at a TripAdvisor search or listing page.
Each endpoint costs $0.002 per record returned. Pulling 20 attractions, 20 hotels, and 20 restaurants for one destination costs $0.12 total.
It returns TripAdvisor's listed pricing and offers at the time of the request, not a live booking hold — treat it as a current snapshot rather than a guaranteed rate.
Because the field sets don't overlap in a way one schema could hold cleanly — a restaurant's cuisines and a hotel's room count aren't interchangeable data, so each category gets its own endpoint and its own fields.
