morty APImorty.app ↗
Access escape room experiences from morty.app: difficulty, group size, pricing, tags, and today/tomorrow time slot availability by location.
What is the morty API?
The morty.app API exposes 1 endpoint — get_experiences — that returns all active escape room experiences at a given location, including up to 15+ response fields covering difficulty ratings, group size ranges, price ranges, experience tags, ratings, and real-time availability slots for today and tomorrow. Passing a company_slug and location_slug derived from any morty.app URL is all that's needed to retrieve a full experience catalog for that venue.
curl -X GET 'https://api.parse.bot/scraper/dc6b06b6-a75c-4c77-808b-7696a9969612/get_experiences?company_slug=the-great-escape-room&location_slug=the-great-escape-room-providence-awga' \ -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 morty-app-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: Morty escape room API — fetch experiences and availability."""
from parse_apis.morty_app_api import MortyApp, NotFoundError
client = MortyApp()
# Fetch a location's experiences by company and location slugs.
try:
location = client.locations.get(
company_slug="the-great-escape-room",
location_slug="the-great-escape-room-providence-awga",
)
except NotFoundError as e:
print(f"Location not found: {e}")
raise
print(f"Location: {location.name}")
# Browse each experience's details and today's open slots.
for exp in location.experiences:
print(f"\n{exp.name} ({exp.difficulty}, {exp.duration_minutes} min)")
print(f" Players: {exp.players_min}-{exp.players_max} | Rating: {exp.rating}")
print(f" Tags: {', '.join(exp.tags)}")
open_slots = [s for s in exp.today_slots if s.available]
print(f" Today: {len(open_slots)} open slot(s)")
for slot in open_slots[:3]:
print(f" {slot.datetime}")
print("\nexercised: locations.get / Experience fields / TimeSlot availability")
Returns all active escape room experiences at a given location with their details (name, difficulty, group size range, price range, tags) and available time slots for today and tomorrow. Each experience includes full availability data showing which time slots are open or taken. Makes one request to resolve the location, one to fetch all games, and one per game for availability (typically 2-5 games per location).
| Param | Type | Description |
|---|---|---|
| company_slug | string | Company slug from the morty.app URL path (e.g. 'the-great-escape-room' from /location/the-great-escape-room/...). |
| location_slug | string | Location slug from the morty.app URL path (e.g. 'the-great-escape-room-providence-awga'). |
{
"type": "object",
"fields": {
"experiences": "array of experience objects with name, difficulty, group size, pricing, ratings, tags, and time slots for today and tomorrow",
"location_name": "string — display name of the escape room location",
"location_slug": "string — URL slug identifier for the location"
},
"sample": {
"data": {
"experiences": [
{
"id": "42671",
"name": "Mountain Top Murders",
"slug": "mountain-top-murders-nle9",
"tags": [
"Spooky"
],
"rating": "Very Positive",
"category": "Escape room",
"price_max": 999,
"price_min": 1,
"difficulty": "Unknown",
"players_max": 8,
"players_min": 2,
"today_slots": [
{
"datetime": "2026-08-22T16:30:00-04:00",
"available": true
},
{
"datetime": "2026-08-22T18:00:00-04:00",
"available": true
}
],
"tomorrow_slots": [
{
"datetime": "2026-08-23T12:00:00-04:00",
"available": true
},
{
"datetime": "2026-08-23T13:30:00-04:00",
"available": true
}
],
"duration_minutes": 60
}
],
"location_name": "The Great Escape Room - Providence",
"location_slug": "the-great-escape-room-providence-awga"
},
"status": "success"
}
}About the morty API
What the API Returns
The get_experiences endpoint returns an array of escape room experience objects alongside the location's display name and URL slug. Each experience object includes fields for name, difficulty, group size (min and max), price range, ratings, and tags — giving you the core metadata needed to evaluate and compare rooms at a given venue.
Availability Data
Beyond static metadata, each experience includes time slot availability for today and tomorrow. Slots are marked as open or taken, allowing applications to surface real-time booking windows without hitting the morty.app booking flow directly. This is the most time-sensitive data the endpoint provides and reflects current occupancy at the time of the request.
Inputs and Scope
Both inputs — company_slug and location_slug — are optional strings derived directly from the morty.app URL path. For example, the URL /location/the-great-escape-room/the-great-escape-room-providence-awga yields the-great-escape-room as the company slug and the-great-escape-room-providence-awga as the location slug. The API covers one location per call; there is no bulk or search endpoint in the current spec.
The morty API is a managed, monitored endpoint for morty.app — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when morty.app 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 morty.app 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?+
- Display today and tomorrow's open booking slots for a specific escape room venue in a travel or activities app
- Compare difficulty ratings and group size ranges across multiple escape room locations for team event planning
- Aggregate price range data across morty.app venues for market research on escape room pricing
- Build a local entertainment guide that surfaces escape rooms with open slots and tags relevant to group preferences
- Monitor real-time availability changes at a target venue to alert users when a previously full slot opens
- Filter experiences by tag and difficulty to recommend rooms suited to first-timers versus experienced players
| 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 morty.app have an official developer API?+
What does the get_experiences endpoint return beyond basic room info?+
location_name and location_slug are also returned at the top level of the response.