57hours API57hours.com ↗
Search and retrieve outdoor adventure listings from 57hours.com. Get trip details, activity types, pricing, locations, and guide profiles via 2 endpoints.
What is the 57hours API?
The 57hours API gives developers access to outdoor adventure listings and guide profiles across 57hours.com through 2 endpoints. Use search_adventures to query trips by keyword, activity type, or country with paginated results, and get_adventure_details to pull full trip data including guide bios, ratings, locations, and descriptions for any specific listing by its URL slug.
curl -X GET 'https://api.parse.bot/scraper/532757f4-9311-466c-9a7c-00517749df06/search_adventures?page=0&query=hiking&activity=Hiking&hits_per_page=5' \ -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 57hours-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: 57hours Adventures SDK — search all listings, drill into guide details and credentials."""
from parse_apis._57hours_Adventures_API import FiftySevenHours, AdventureNotFound
client = FiftySevenHours()
# Search hiking adventures, capped at 5 total results
for adventure in client.adventures.search(activity="Hiking", limit=5):
print(adventure.name, adventure.location_custom, adventure.price, adventure.currency)
# Drill into the first backcountry skiing result for guide credentials
adventure = client.adventures.search(query="backcountry skiing", limit=1).first()
if adventure:
detail = adventure.details()
print(f"\n{detail.title} — {detail.activity} in {detail.location}")
print(f"Description: {detail.description}")
print(f"Guide names: {detail.guide_names}")
print(f"Guide credentials: {detail.guide_credentials}")
for guide in detail.guides[:3]:
print(f" {guide.name} | {guide.tagline} | Rating: {guide.rating}")
# Construct an adventure directly by slug and fetch details
known = client.adventure(slug="backcountry-skiing-sailing-svalbard-expedition")
try:
detail = known.details()
print(f"\n{detail.title}: {len(detail.guides)} guides, credentials: {detail.guide_credentials}")
except AdventureNotFound as exc:
print(f"Adventure not found: {exc.slug}")
print("\nExercised: adventures.search / adventure.details / direct slug construction / error handling")
Search outdoor adventure listings by keyword, activity type, or country. Returns paginated results with basic listing info including title, price, duration, location, activity, and URL. Results are ordered by relevance to the search query.
| Param | Type | Description |
|---|---|---|
| page | integer | Zero-based page number for pagination. |
| query | string | Free-text search query (e.g. 'hiking', 'ski touring Alps', 'Grand Canyon'). |
| country | string | Filter by country name (e.g. 'United States', 'Switzerland', 'Norway'). Case-sensitive, must match the site's country labels. |
| activity | string | Filter by activity type (e.g. 'Hiking', 'Rock Climbing', 'Backcountry Skiing', 'Mountain Biking', 'Kiteboarding'). Case-sensitive, must match the site's activity labels. Omit or pass empty string for no activity filter. |
| hits_per_page | integer | Number of results per page (max 100). |
{
"type": "object",
"fields": {
"page": "integer",
"adventures": "array of adventure listing summaries with name, slug, activity, location, price, url, etc.",
"total_hits": "integer",
"total_pages": "integer",
"hits_per_page": "integer"
},
"sample": {
"data": {
"page": 0,
"adventures": [
{
"url": "https://57hours.com/adventure/grand-canyon-guided-backpacking-trip/",
"name": "Grand Canyon Backpacking Trip: 4-Day Adventure",
"slug": "grand-canyon-guided-backpacking-trip",
"tags": [
"Backpacking Trips",
"Multi-Day Hiking Tours"
],
"price": 2400,
"state": "Arizona",
"country": "United States",
"activity": "Hiking",
"currency": "USD",
"duration": "5 days",
"location": "Grand Canyon National Park",
"collection": [
"Hiking",
"The Next Big Thing"
],
"difficulty": [
"Moderate",
"Challenging"
],
"accommodation": [
"Standard"
],
"average_rating": 5,
"featured_image": "https://57hours.com/wp-content/uploads/2025/06/grand-canyon-guided-backpacking-trip-3-night-608x810.jpeg",
"location_custom": "GRAND CANYON | ARIZONA"
}
],
"total_hits": 432,
"total_pages": 144,
"hits_per_page": 3
},
"status": "success"
}
}About the 57hours API
Searching Adventures
The search_adventures endpoint accepts a free-text query parameter (e.g. 'ski touring Alps' or 'Grand Canyon'), an activity filter (e.g. 'Rock Climbing', 'Backcountry Skiing', 'Mountain Biking'), and a country filter (e.g. 'Norway', 'United States'). Results are ordered by relevance and paginated via zero-based page and hits_per_page (up to 100 per page). Each result in the adventures array includes the listing name, slug, activity type, location, price, and URL. The response also returns total_hits and total_pages so you can walk through full result sets.
Retrieving Adventure Details
get_adventure_details takes a slug — the URL path segment for a specific listing, such as 'grand-canyon-guided-backpacking-trip' — and returns the full record. Fields include title, description, activity, and location. The guides array is the richest part of the detail response: each guide object carries a name, tagline, bio, and rating. A convenience field guide_names also returns a comma-separated string of guide names for quick display.
Practical Notes
Activity and country filter values are case-sensitive and must match 57hours.com's own taxonomy. If you pass 'hiking' instead of 'Hiking', or a partial country name, results may be empty. Slugs for get_adventure_details can be extracted from the url or slug fields returned by search_adventures, making the two endpoints designed to work together in a search-then-fetch pattern.
The 57hours API is a managed, monitored endpoint for 57hours.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when 57hours.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 57hours.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?+
- Build a trip discovery tool that filters adventures by activity type and country using the
activityandcountryparams - Aggregate guide profiles — names, bios, taglines, and ratings — across multiple adventures for a guide comparison feature
- Populate a travel app with structured outdoor trip data including pricing and location from the
adventuresarray - Monitor new adventure listings in a specific region by polling
search_adventureswith a country filter - Enrich a travel planning dataset with full trip descriptions and guide credentials from
get_adventure_details - Create a curated outdoor activity directory organized by activity category using the
activityresponse field - Research guide quality by extracting
ratingvalues from theguidesarray across many listings
| 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 57hours.com have an official developer API?+
What does `get_adventure_details` return beyond what `search_adventures` provides?+
search_adventures returns summary fields — name, slug, activity, location, price, and URL. get_adventure_details adds the full description text and a guides array with per-guide name, tagline, bio, and rating fields not present in search results. Use the slug from a search result to fetch details.Does the API return itineraries, availability calendars, or booking data?+
Are activity and country filter values case-sensitive?+
activity and country parameters must match 57hours.com's taxonomy exactly — for example 'Backcountry Skiing' not 'backcountry skiing', and 'United States' not 'USA'. Mismatched values will return empty results rather than an error.Can I retrieve reviews or user-submitted ratings separately from guide ratings?+
rating values within the guides array on get_adventure_details, but there is no dedicated reviews endpoint returning individual user review text or scores. You can fork this API on Parse and revise it to add a reviews endpoint if that data is publicly accessible on the listing pages.