{"openapi":"3.1.0","info":{"title":"Dragon Kids Land API","version":"1.0.1","summary":"Original kids' songs, retold fairy tales and places to play with kids.","description":"Read-only public API of Dragon Kids Land: original songs for little ones, retold fairy tales and fables, and Play Places, a directory of places to play with kids built on OpenStreetMap data. No key needed. 120 requests per minute per IP. Cite meta.canonicalUrl. Guide: https://dragonkidsland.com/ai","contact":{"name":"Dragon Kids Land","email":"hello@dragonkidsland.com","url":"https://dragonkidsland.com/ai"},"license":{"name":"Content © Dragon Kids Land; venue data ODbL 1.0 (© OpenStreetMap contributors)","url":"https://dragonkidsland.com/terms"}},"servers":[{"url":"https://dragonkidsland.com"}],"tags":[{"name":"Play Places","description":"Places to play with kids, worldwide."},{"name":"Songs","description":"Original songs for babies, toddlers and preschoolers."},{"name":"Stories","description":"Retold fairy tales, fables and folk tales."},{"name":"Site","description":"Overview, search and changes."}],"paths":{"/api/v1/ai/capabilities":{"get":{"operationId":"getCapabilities","tags":["Site"],"summary":"What Dragon Kids Land offers","description":"Live counts of songs, stories and play places, when each was last updated, every endpoint, the rate limit and the rules for citing us. Call this first if unsure what exists.","parameters":[],"responses":{"200":{"description":"Site overview","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Capabilities"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/search":{"get":{"operationId":"searchAll","tags":["Site"],"summary":"Search songs, stories, places and cities","description":"One typo-tolerant search across everything: songs, stories, play places (by name or city) and cities. Good first call for a vague request.","parameters":[{"name":"q","in":"query","required":false,"description":"Words to search for.","schema":{"type":"string","minLength":2,"maxLength":80},"example":"teeth"},{"name":"limit","in":"query","required":false,"description":"Results per group (1-10).","schema":{"type":"integer","minimum":1,"maximum":10,"default":5},"example":5}],"responses":{"200":{"description":"Results grouped by kind","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SearchResults"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/songs":{"get":{"operationId":"listSongs","tags":["Songs"],"summary":"Find original songs for kids","description":"Original songs for babies, toddlers and preschoolers, for daily routines (teeth, bath, potty, bedtime…). Filter by routine, age, calm, released, video; sort. Typo-tolerant q.","parameters":[{"name":"q","in":"query","required":false,"description":"Words, typo tolerant (teeth, potty, bedtime, dance).","schema":{"type":"string","maxLength":80},"example":"teeth"},{"name":"routine","in":"query","required":false,"description":"Routine or kind of song.","schema":{"type":"string","enum":["morning","bath-teeth","food","potty","doctor","bedtime","dance","big-days","holidays"]},"example":"bedtime"},{"name":"age","in":"query","required":false,"description":"Child's age in years; songs whose range includes it.","schema":{"type":"integer","minimum":0,"maximum":12},"example":2},{"name":"audience","in":"query","required":false,"description":"baby = songs a grown-up sings to a baby.","schema":{"type":"string","enum":["kids","baby"]}},{"name":"calm","in":"query","required":false,"description":"true = calm songs (lullabies, bedtime, quiet time); false = lively ones.","schema":{"type":"boolean"}},{"name":"released","in":"query","required":false,"description":"true = out on YouTube/streaming; false = coming soon (with release date and pre-save link).","schema":{"type":"boolean"}},{"name":"hasVideo","in":"query","required":false,"description":"true = a public YouTube video exists.","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"description":"recommended, newest, az, shortest, calm.","schema":{"type":"string","enum":["recommended","newest","az","shortest","calm"],"default":"recommended"},"example":"recommended"},{"name":"limit","in":"query","required":false,"description":"Results per page (1-50).","schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"example":10},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from pagination.nextCursor of the previous page. Omit for the first page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Songs","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SongSummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/songs/{slug}":{"get":{"operationId":"getSong","tags":["Songs"],"summary":"One song: lyrics, moves, notes, links","description":"The original lyrics, the moves step by step, notes for grown-ups with sources, FAQ, a listening sample, and YouTube/Spotify/Apple Music links once released (else release date and pre-save).","parameters":[{"name":"slug","in":"path","required":true,"description":"Song slug from listSongs.","schema":{"type":"string"},"example":"dragon-teeth"}],"responses":{"200":{"description":"Song","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SongDetail"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/stories":{"get":{"operationId":"listStories","tags":["Stories"],"summary":"Find fairy tales and fables to read","description":"Retold fairy tales, fables and folk tales for ages 3-12. Filter by age, length, scariness (0-3), type, audio, video; sort. Typo-tolerant q (wolf, princess, pigs).","parameters":[{"name":"q","in":"query","required":false,"description":"Words, typo tolerant.","schema":{"type":"string","maxLength":80},"example":"wolf"},{"name":"age","in":"query","required":false,"description":"Child's age; stories whose range includes it.","schema":{"type":"integer","minimum":0,"maximum":14},"example":5},{"name":"ageBand","in":"query","required":false,"description":"Age band.","schema":{"type":"string","enum":["3-5","5-8","8-12"]}},{"name":"type","in":"query","required":false,"description":"fable, fairy-tale, or bedtime (calm and under 12 minutes).","schema":{"type":"string","enum":["fable","fairy-tale","bedtime"]}},{"name":"length","in":"query","required":false,"description":"short ≤ 5 min, medium 6-10, long > 10 (full version).","schema":{"type":"string","enum":["short","medium","long"]}},{"name":"maxMinutes","in":"query","required":false,"description":"At most this many minutes to read.","schema":{"type":"integer","minimum":1,"maximum":120},"example":8},{"name":"maxScariness","in":"query","required":false,"description":"0 nothing alarming … 3 real danger resolved. Use 1 for 'not scary'.","schema":{"type":"integer","minimum":0,"maximum":3},"example":1},{"name":"hasAudio","in":"query","required":false,"description":"true = can be listened to (narration).","schema":{"type":"boolean"}},{"name":"hasVideo","in":"query","required":false,"description":"true = has an illustrated read-along video.","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"description":"recommended, shortest, az, newest.","schema":{"type":"string","enum":["recommended","shortest","az","newest"],"default":"recommended"}},{"name":"limit","in":"query","required":false,"description":"Results per page (1-50).","schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"example":10},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from pagination.nextCursor of the previous page. Omit for the first page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Stories","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/StorySummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/stories/{slug}":{"get":{"operationId":"getStory","tags":["Stories"],"summary":"One story: moral, characters, audio, video","description":"Summary, moral and its explanation, characters, reading time, age, scariness, discussion questions, vocabulary, narration audio and video URLs, and where to read the text.","parameters":[{"name":"slug","in":"path","required":true,"description":"Story slug from listStories.","schema":{"type":"string"},"example":"the-three-little-pigs"}],"responses":{"200":{"description":"Story","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/StoryDetail"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/stories/{slug}/text":{"get":{"operationId":"getStoryText","tags":["Stories"],"summary":"The story text, in parts","description":"The retelling as plain text in parts of about 3,500 characters. version=short (about 5 minutes, default) or full. Follow nextPartUrl until it is null.","parameters":[{"name":"slug","in":"path","required":true,"description":"Story slug.","schema":{"type":"string"},"example":"the-three-little-pigs"},{"name":"version","in":"query","required":false,"description":"short or full.","schema":{"type":"string","enum":["full","short"],"default":"short"},"example":"short"},{"name":"part","in":"query","required":false,"description":"Part number, from 1.","schema":{"type":"integer","minimum":1,"maximum":50,"default":1},"example":1}],"responses":{"200":{"description":"Text part","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/StoryText"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/places":{"get":{"operationId":"searchPlaces","tags":["Play Places"],"summary":"Find places to play with kids","description":"Indoor play centres, trampoline parks, kids' cafés, children's museums and named playgrounds, by city/country or near lat/lng. Filters incl. open now (local time zone). Data: OpenStreetMap.","parameters":[{"name":"q","in":"query","required":false,"description":"Venue name or city, typo tolerant.","schema":{"type":"string","maxLength":80},"example":"trampoline"},{"name":"country","in":"query","required":false,"description":"ISO 3166-1 alpha-2 code (pt) or country slug (portugal).","schema":{"type":"string","maxLength":60},"example":"pt"},{"name":"city","in":"query","required":false,"description":"City name or slug, typo tolerant. Best with country.","schema":{"type":"string","maxLength":80},"example":"Lisbon"},{"name":"lat","in":"query","required":false,"description":"Latitude of the point to search around (with lng). Only when the user gave a location.","schema":{"type":"number","minimum":-90,"maximum":90},"example":38.7223},{"name":"lng","in":"query","required":false,"description":"Longitude (with lat).","schema":{"type":"number","minimum":-180,"maximum":180},"example":-9.1393},{"name":"radiusKm","in":"query","required":false,"description":"Radius around lat/lng in km (default 10, max 100).","schema":{"type":"number","minimum":0.1,"maximum":100,"default":10},"example":5},{"name":"category","in":"query","required":false,"description":"One or more categories.","schema":{"type":"array","items":{"type":"string","enum":["indoor_play","trampoline_park","kids_cafe","childrens_museum","activity_venue","playground"]}},"example":["indoor_play","trampoline_park"],"style":"form","explode":false},{"name":"indoor","in":"query","required":false,"description":"true = indoors (good for rain); false = only places not marked indoors.","schema":{"type":"boolean"}},{"name":"free","in":"query","required":false,"description":"true = free entry only.","schema":{"type":"boolean"}},{"name":"openNow","in":"query","required":false,"description":"true = open at `at` (default now) in each place's own time zone. Places without published hours are left out.","schema":{"type":"boolean"}},{"name":"at","in":"query","required":false,"description":"Moment for openNow, ISO 8601 with offset. Default: now.","schema":{"type":"string","format":"date-time"},"example":"2026-11-07T10:00:00+00:00"},{"name":"wheelchair","in":"query","required":false,"description":"true = wheelchair accessible (wheelchair=yes on OpenStreetMap).","schema":{"type":"boolean"}},{"name":"hasWebsite","in":"query","required":false,"description":"true = lists a website.","schema":{"type":"boolean"}},{"name":"hasPhone","in":"query","required":false,"description":"true = lists a phone number.","schema":{"type":"boolean"}},{"name":"partner","in":"query","required":false,"description":"true = Dragon Kids Land partners only.","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"description":"best = our published ranking (partners first); distance needs lat/lng; name = A-Z.","schema":{"type":"string","enum":["best","distance","name"],"default":"best"},"example":"best"},{"name":"limit","in":"query","required":false,"description":"Results per page (1-50).","schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"example":10},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from pagination.nextCursor of the previous page. Omit for the first page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Places in our ranking order","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PlaceSummary"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/places/{id}":{"get":{"operationId":"getPlace","tags":["Play Places"],"summary":"One place: address, hours, map, ranking","description":"Address, map links, opening hours with open-now in the place's time zone, website and phone when public, category, why it ranks where it does, partner flag and data source.","parameters":[{"name":"id","in":"path","required":true,"description":"Place id from searchPlaces.","schema":{"type":"string","format":"uuid"}},{"name":"at","in":"query","required":false,"description":"Moment for openNow, ISO 8601. Default now.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Place","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PlaceDetail"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/places/countries":{"get":{"operationId":"listPlaceCountries","tags":["Play Places"],"summary":"Countries with listed places","description":"Every country with play places listed, with counts, its capital and its page.","parameters":[{"name":"q","in":"query","required":false,"description":"Filter by country name or ISO code.","schema":{"type":"string","maxLength":80},"example":"portugal"},{"name":"limit","in":"query","required":false,"description":"Results per page (1-200).","schema":{"type":"integer","minimum":1,"maximum":200,"default":200},"example":200},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from pagination.nextCursor of the previous page. Omit for the first page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Countries","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Country"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/places/countries/{country}/cities":{"get":{"operationId":"listPlaceCities","tags":["Play Places"],"summary":"Cities of a country with listed places","description":"Cities with listed places in one country, capital first, with counts and links.","parameters":[{"name":"country","in":"path","required":true,"description":"ISO code (pt) or country slug (portugal).","schema":{"type":"string"},"example":"pt"}],"responses":{"200":{"description":"Cities","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/City"}},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/places/how-we-rank":{"get":{"operationId":"getPlaceRanking","tags":["Play Places"],"summary":"How Play Places are ranked","description":"The published ranking rules: partners first and labelled, then a score from public data only (kind of place, public details, distance). No ratings, reviews or payments.","parameters":[],"responses":{"200":{"description":"Ranking rules","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Ranking"},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}},"/api/v1/ai/changelog":{"get":{"operationId":"getChangelog","tags":["Site"],"summary":"What changed in this API","description":"Dated list of changes to the API and the documents for assistants.","parameters":[],"responses":{"200":{"description":"Changelog","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ChangelogEntry"}},"meta":{"$ref":"#/components/schemas/Meta"},"links":{"$ref":"#/components/schemas/Links"},"suggestedNext":{"type":"array","items":{"$ref":"#/components/schemas/Suggestion"}}},"required":["data","meta","links"]}}}},"429":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-openai-isConsequential":false}}},"components":{"schemas":{"Meta":{"type":"object","properties":{"endpoint":{"type":"string","description":"operationId of the endpoint"},"apiVersion":{"type":"string"},"generatedAt":{"type":"string","format":"date-time"},"canonicalUrl":{"type":["string","null"],"format":"uri","description":"The page on dragonkidsland.com to link to when citing this."},"source":{"type":"string"},"attribution":{"type":"string","description":"How to credit us."},"notice":{"type":"string","description":"A hint when nothing matched or a filter needs explaining."},"ignoredParams":{"type":"array","items":{"type":"string"},"description":"Query parameters this endpoint does not know (check for typos)."}},"additionalProperties":true},"Links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"next":{"type":"string","description":"Next page, when there is one.","format":"uri"},"docs":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"}},"additionalProperties":{"type":["string","null"]}},"Suggestion":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string","format":"uri"}}},"Pagination":{"type":"object","properties":{"limit":{"type":"integer"},"total":{"type":"integer","description":"Total matching items."},"returned":{"type":"integer"},"nextCursor":{"type":["string","null"],"description":"Pass as cursor to get the next page; null on the last page."},"hasMore":{"type":"boolean"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"status":{"type":"integer"},"code":{"type":"string","examples":["invalid_parameter","not_found","city_not_found","rate_limited"]},"message":{"type":"string"},"param":{"type":"string","description":"The parameter at fault."},"hint":{"type":"string","description":"How to fix the request."},"docs":{"type":"string","format":"uri"}}}},"required":["error"]},"Routine":{"type":"object","properties":{"id":{"type":"string","enum":["morning","bath-teeth","food","potty","doctor","bedtime","dance","big-days","holidays"]},"label":{"type":"string"}}},"SongSummary":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"hook":{"type":"string","description":"One line on what the song is for."},"routines":{"type":"array","items":{"$ref":"#/components/schemas/Routine"}},"category":{"type":["string","null"]},"ageMin":{"type":"integer"},"ageMax":{"type":"integer"},"ageLabel":{"type":"string"},"audience":{"type":"string","enum":["kids","baby"]},"instrumental":{"type":"boolean"},"calm":{"type":"boolean","description":"A calm song (lullaby, bedtime, quiet time)."},"durationSeconds":{"type":["integer","null"]},"status":{"type":"string","description":"video = moves and stills on the page; audio = song ready, video soon; soon = coming soon.","enum":["video","audio","soon"]},"statusLabel":{"type":"string"},"released":{"type":"boolean","description":"Out on YouTube and streaming services."},"releaseDate":{"type":["string","null"],"description":"Release date (YYYY-MM-DD), past or planned."},"preSaveUrl":{"type":["string","null"],"format":"uri","description":"Pre-save page while the song is not out yet."},"hasVideo":{"type":"boolean","description":"A public YouTube video exists."},"hasMoves":{"type":"boolean"},"thumbnailUrl":{"type":["string","null"],"format":"uri"},"url":{"type":"string","description":"The song page.","format":"uri"}}},"SongDetail":{"allOf":[{"$ref":"#/components/schemas/SongSummary"},{"type":"object","properties":{"fullTitle":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"about":{"type":"array","items":{"type":"string"}},"bpm":{"type":["integer","null"]},"musicalKey":{"type":["string","null"]},"lyrics":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"Verse, Chorus…"},"lines":{"type":"array","items":{"type":"string"}}}},"description":"The original lyrics, as sung."},"lyricsNote":{"type":"string"},"movesHeading":{"type":["string","null"]},"moves":{"type":"array","items":{"type":"object","properties":{"step":{"type":"integer"},"title":{"type":"string"},"how":{"type":"string"},"atTime":{"type":["string","null"],"description":"m:ss in the song"},"imageUrl":{"type":["string","null"],"format":"uri"},"imageAlt":{"type":["string","null"]}}}},"grownUps":{"type":["object","null"],"properties":{"summary":{"type":"string"},"points":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"}}}},"notMedicalAdvice":{"type":"boolean"}},"description":"Notes for parents, with official sources."},"faq":{"type":"array","items":{"type":"object","properties":{"q":{"type":"string"},"a":{"type":"string"}}}},"sample":{"type":["object","null"],"properties":{"mp3Url":{"type":"string","format":"uri"},"seconds":{"type":"integer"}},"description":"A short listening sample."},"listen":{"type":"object","properties":{"youtube":{"type":["string","null"],"format":"uri"},"spotify":{"type":["string","null"],"format":"uri"},"appleMusic":{"type":["string","null"],"format":"uri"},"preSave":{"type":["string","null"],"format":"uri"}}},"relatedStories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"api":{"type":"string","format":"uri"}}}},"disclosure":{"type":"string"}}}]},"StorySummary":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"summary":{"type":["string","null"]},"type":{"type":"string","enum":["fable","fairy-tale","folk-tale","other"]},"genre":{"type":["string","null"]},"ageMin":{"type":"integer"},"ageMax":{"type":"integer"},"readingMinutes":{"type":["integer","null"],"description":"Reading time of the full story."},"scariness":{"type":["integer","null"],"description":"0 nothing alarming, 1 mild tension, 2 a villain appears but is never frightening, 3 real danger resolved before the end."},"scarinessLabel":{"type":["string","null"]},"collectedBy":{"type":["string","null"],"description":"The collector or author of the original tale."},"collection":{"type":["string","null"]},"origin":{"type":["string","null"]},"hasAudio":{"type":"boolean","description":"A narration can be listened to."},"hasVideo":{"type":"boolean","description":"An illustrated read-along video exists."},"coverUrl":{"type":["string","null"],"format":"uri"},"url":{"type":"string","description":"The story page.","format":"uri"}}},"Media":{"type":["object","null"],"properties":{"url":{"type":"string","format":"uri"},"durationSeconds":{"type":["integer","null"]},"captionsUrl":{"type":["string","null"],"format":"uri"}}},"Video":{"type":["object","null"],"properties":{"url":{"type":"string","description":"MP4 file","format":"uri"},"youtubeUrl":{"type":["string","null"],"format":"uri"},"durationSeconds":{"type":["integer","null"]},"posterUrl":{"type":["string","null"],"format":"uri"},"captionsUrl":{"type":["string","null"],"format":"uri"}}},"StoryDetail":{"allOf":[{"$ref":"#/components/schemas/StorySummary"},{"type":"object","properties":{"subtitle":{"type":["string","null"]},"moral":{"type":["string","null"]},"moralExplained":{"type":["string","null"]},"themes":{"type":"array","items":{"type":"string"}},"contentWarnings":{"type":"array","items":{"type":"string"}},"wordCount":{"type":["integer","null"]},"taleType":{"type":["string","null"],"description":"ATU tale type"},"characters":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"role":{"type":"string"},"species":{"type":["string","null"]},"description":{"type":["string","null"]},"isVillain":{"type":"boolean"},"url":{"type":"string","format":"uri"}}}},"discussionQuestions":{"type":"array","items":{"type":"string"}},"vocabulary":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"definition":{"type":"string"}}}},"audio":{"type":"object","properties":{"full":{"$ref":"#/components/schemas/Media"},"short":{"$ref":"#/components/schemas/Media"}}},"video":{"type":"object","properties":{"full":{"$ref":"#/components/schemas/Video"},"short":{"$ref":"#/components/schemas/Video"}}},"text":{"type":"object","properties":{"full":{"type":["object","null"],"properties":{"parts":{"type":"integer"},"url":{"type":"string","format":"uri"}}},"short":{"type":["object","null"],"properties":{"parts":{"type":"integer"},"url":{"type":"string","format":"uri"}}},"markdownUrl":{"type":"string","format":"uri"}}},"bannerUrl":{"type":["string","null"],"format":"uri"},"rights":{"type":"string"}}}]},"StoryText":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"version":{"type":"string","enum":["full","short"]},"part":{"type":"integer"},"parts":{"type":"integer"},"words":{"type":"integer"},"text":{"type":"string","description":"Plain text, paragraphs separated by blank lines."},"nextPartUrl":{"type":["string","null"],"format":"uri"}}},"PlaceSummary":{"type":"object","properties":{"id":{"type":"string","description":"Use with getPlace.","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","enum":["indoor_play","trampoline_park","kids_cafe","childrens_museum","activity_venue","playground"]},"categoryLabel":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"countryCode":{"type":"string"},"address":{"type":["string","null"]},"lat":{"type":"number"},"lng":{"type":"number"},"distanceKm":{"type":["number","null"],"description":"From lat/lng, when given."},"indoor":{"type":"boolean"},"free":{"type":"boolean","description":"Marked free, or a public playground."},"wheelchair":{"type":["string","null"],"description":"yes, limited or no, when mapped."},"ages":{"type":["object","null"],"properties":{"min":{"type":["integer","null"]},"max":{"type":["integer","null"]}}},"partner":{"type":"boolean","description":"A Dragon Kids Land partner (listed first, labelled)."},"rankInCity":{"type":["integer","null"]},"openNow":{"type":["boolean","null"],"description":"At `at` (default now), in the place's own time zone. null = hours not published or not understood."},"closesAt":{"type":["string","null"],"description":"Local closing time (HH:MM) when open."},"openingHours":{"type":["array","null"],"items":{"type":"string"},"description":"Published hours, one rule per line."},"website":{"type":["string","null"],"format":"uri"},"phone":{"type":["string","null"]},"url":{"type":"string","description":"The place page on dragonkidsland.com.","format":"uri"},"mapUrl":{"type":"string","description":"OpenStreetMap","format":"uri"}}},"PlaceDetail":{"allOf":[{"$ref":"#/components/schemas/PlaceSummary"},{"type":"object","properties":{"description":{"type":["string","null"]},"hours":{"type":"object","properties":{"openNow":{"type":["boolean","null"]},"closesAt":{"type":["string","null"]},"localTimeAtPlace":{"type":["string","null"]},"timezone":{"type":["string","null"]},"published":{"type":"array","items":{"type":"string"}},"osm":{"type":["string","null"],"description":"Raw OpenStreetMap opening_hours"}}},"ranking":{"type":"object","properties":{"score":{"type":"integer"},"rankInCity":{"type":["integer","null"]},"partnerFirst":{"type":"boolean"},"breakdown":{"type":"array","items":{"type":"object","properties":{"factor":{"type":"string"},"label":{"type":"string"},"points":{"type":"number"}}}},"explanation":{"type":"string"},"howWeRank":{"type":"string","format":"uri"}}},"links":{"type":"object","properties":{"page":{"type":"string","format":"uri"},"city":{"type":"string","format":"uri"},"openStreetMap":{"type":"string","format":"uri"},"googleMapsSearch":{"type":"string","format":"uri"}}},"dataSource":{"type":"object","properties":{"name":{"type":"string"},"attribution":{"type":"string"},"licence":{"type":"string"},"licenceUrl":{"type":"string","format":"uri"},"updatedAt":{"type":"string","format":"date-time"}}},"checkBeforeYouGo":{"type":"string"}}}]},"Country":{"type":"object","properties":{"code":{"type":"string","description":"ISO 3166-1 alpha-2, lower case"},"name":{"type":"string"},"slug":{"type":"string"},"region":{"type":["string","null"]},"places":{"type":"integer"},"cities":{"type":"integer"},"capital":{"type":["string","null"]},"url":{"type":"string","format":"uri"},"citiesApi":{"type":"string","format":"uri"}}},"City":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"isCapital":{"type":"boolean"},"places":{"type":"integer"},"lat":{"type":"number"},"lng":{"type":"number"},"url":{"type":"string","format":"uri"},"placesApi":{"type":"string","format":"uri"}}},"Ranking":{"type":"object","properties":{"summary":{"type":"string"},"order":{"type":"array","items":{"type":"string"}},"score":{"type":"object","properties":{"kindOfPlace":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"label":{"type":"string"},"points":{"type":"integer"}}}},"explicitTagBonus":{"type":"object","properties":{"points":{"type":"integer"},"label":{"type":"string"}}},"publicInformation":{"type":"array","items":{"type":"object","properties":{"factor":{"type":"string"},"label":{"type":"string"},"points":{"type":"integer"}}}},"distance":{"type":"object","properties":{"freeKm":{"type":"number"},"pointsPerKmAfter":{"type":"number"},"maxPenalty":{"type":"number"},"label":{"type":"string"}}}}},"coverage":{"type":"string"},"notUsed":{"type":"array","items":{"type":"string"}},"dataSource":{"type":"object","properties":{"attribution":{"type":"string"},"licenceUrl":{"type":"string","format":"uri"},"details":{"type":"string"}}}}},"SearchResults":{"type":"object","properties":{"songs":{"type":"array","items":{"$ref":"#/components/schemas/SongSummary"}},"stories":{"type":"array","items":{"$ref":"#/components/schemas/StorySummary"}},"places":{"type":"array","items":{"$ref":"#/components/schemas/PlaceSummary"}},"cities":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"country":{"type":"string"},"countryCode":{"type":"string"},"places":{"type":"integer"},"url":{"type":"string","format":"uri"},"placesApi":{"type":"string","format":"uri"}}}}}},"Capabilities":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"audience":{"type":"string"},"counts":{"type":"object","properties":{"songs":{"type":"integer"},"songsReleased":{"type":"integer"},"stories":{"type":"integer"},"storiesWithAudio":{"type":"integer"},"storiesWithVideo":{"type":"integer"},"places":{"type":"integer"},"placeCountries":{"type":"integer"},"placeCities":{"type":"integer"},"partners":{"type":"integer"}}},"lastUpdated":{"type":"object","properties":{"songs":{"type":["string","null"]},"stories":{"type":["string","null"]},"places":{"type":["string","null"]}}},"endpoints":{"type":"array","items":{"type":"object","properties":{"operationId":{"type":"string"},"method":{"type":"string"},"path":{"type":"string"},"summary":{"type":"string"}}}},"rateLimit":{"type":"object","properties":{"requests":{"type":"integer"},"perSeconds":{"type":"integer"},"scope":{"type":"string"}}},"rules":{"type":"array","items":{"type":"string"}},"documents":{"type":"object","properties":{"ai":{"type":"string","format":"uri"},"llms":{"type":"string","format":"uri"},"llmsFull":{"type":"string","format":"uri"},"workflows":{"type":"string","format":"uri"},"changelog":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"}}},"contact":{"type":"string"}}},"ChangelogEntry":{"type":"object","properties":{"version":{"type":"string"},"date":{"type":"string"},"added":{"type":"array","items":{"type":"string"}},"changed":{"type":"array","items":{"type":"string"}},"fixed":{"type":"array","items":{"type":"string"}}}}}},"externalDocs":{"description":"Guide for AI assistants","url":"https://dragonkidsland.com/ai"}}