{"openapi":"3.1.0","info":{"title":"next muaythai public catalog API","summary":"Read-only venue and availability API for travelers and agents.","description":"Public, unauthenticated catalog for Bangkok Muay Thai venues and open sessions. No API key. No writes, webhooks, or payments.","version":"v1"},"servers":[{"url":"https://nextmuaythai.com","description":"Public origin"}],"tags":[{"name":"Venues","description":"Published gym cards."},{"name":"Availability","description":"Open sessions in ICT."}],"paths":{"/api/v1/venues":{"get":{"operationId":"listPublicVenues","tags":["Venues"],"summary":"List public venues","description":"Returns published venue cards. Optional date and party filters keep venues that have open sessions.","parameters":[{"name":"date","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"description":"Bangkok calendar date in YYYY-MM-DD."},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Start of an ISO 8601 datetime range."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"End of an ISO 8601 datetime range."},{"name":"partySize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":8},"description":"Number of guests, from 1 to 8."},{"name":"timeOfDay","in":"query","required":false,"schema":{"type":"string","enum":["all","morning","afternoon","evening"]}},{"name":"city","in":"query","required":false,"schema":{"type":"string"}},{"name":"area","in":"query","required":false,"schema":{"type":"string"}},{"name":"venueId","in":"query","required":false,"schema":{"type":"string"}},{"name":"questId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Venue list","content":{"application/json":{"schema":{"type":"object","required":["apiVersion","data"],"properties":{"apiVersion":{"type":"string","example":"v1"},"data":{"type":"array","items":{"$ref":"#/components/schemas/PublicVenue"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"Invalid query","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://nextmuaythai.com/docs#invalid-query","title":"Invalid query","status":400,"detail":"date must be YYYY-MM-DD","code":"invalid_query","resolution":"Retry with documented query parameters."}}}},"404":{"description":"Unknown catalog resource","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Method not allowed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/venues/{slug}":{"get":{"operationId":"getPublicVenue","tags":["Venues"],"summary":"Get one public venue","description":"Returns one published venue and its public courses.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Public venue slug, for example onyx-muay-thai."}],"responses":{"200":{"description":"Venue detail","content":{"application/json":{"schema":{"type":"object","required":["apiVersion","data"],"properties":{"apiVersion":{"type":"string"},"data":{"$ref":"#/components/schemas/PublicVenueDetail"}}}}}},"400":{"description":"Invalid query","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://nextmuaythai.com/docs#invalid-query","title":"Invalid query","status":400,"detail":"date must be YYYY-MM-DD","code":"invalid_query","resolution":"Retry with documented query parameters."}}}},"404":{"description":"Unknown catalog resource","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Method not allowed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/availability":{"get":{"operationId":"listPublicAvailability","tags":["Availability"],"summary":"List open sessions","description":"Returns currently bookable sessions with booking page URLs. A booking URL does not reserve the session.","parameters":[{"name":"date","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"description":"Bangkok calendar date in YYYY-MM-DD."},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Start of an ISO 8601 datetime range."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"End of an ISO 8601 datetime range."},{"name":"partySize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":8},"description":"Number of guests, from 1 to 8."},{"name":"timeOfDay","in":"query","required":false,"schema":{"type":"string","enum":["all","morning","afternoon","evening"]}},{"name":"city","in":"query","required":false,"schema":{"type":"string"}},{"name":"area","in":"query","required":false,"schema":{"type":"string"}},{"name":"venueId","in":"query","required":false,"schema":{"type":"string"}},{"name":"questId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Open sessions","content":{"application/json":{"schema":{"type":"object","required":["apiVersion","data"],"properties":{"apiVersion":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/PublicAvailability"}},"meta":{"type":"object","additionalProperties":true}}}}}},"400":{"description":"Invalid query","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://nextmuaythai.com/docs#invalid-query","title":"Invalid query","status":400,"detail":"date must be YYYY-MM-DD","code":"invalid_query","resolution":"Retry with documented query parameters."}}}},"404":{"description":"Unknown catalog resource","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"405":{"description":"Method not allowed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Catalog temporarily unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"Problem":{"type":"object","required":["type","title","status","detail","code"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"code":{"type":"string"},"resolution":{"type":"string"},"instance":{"type":"string"},"apiVersion":{"type":"string"},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"PublicVenue":{"type":"object","required":["id","slug","name","currency"],"properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"countryCode":{"type":"string"},"area":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"district":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"latitude":{"type":"number","nullable":true},"longitude":{"type":"number","nullable":true},"googleMapsUrl":{"type":"string","nullable":true},"sport":{"type":"string","nullable":true},"sports":{"type":"array","items":{"type":"string"}},"amenities":{"type":"string","nullable":true},"priceFromThb":{"type":"integer","nullable":true},"currency":{"type":"string","enum":["THB"]},"verificationStatus":{"type":"string","nullable":true},"imageUrl":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"bestFor":{"type":"string","nullable":true},"level":{"type":"string","nullable":true},"intensity":{"type":"string","nullable":true},"englishSupport":{"type":"boolean","nullable":true},"femaleFriendly":{"type":"boolean","nullable":true},"nearbyTransit":{"type":"string","nullable":true},"canonicalUrl":{"type":"string"},"bookingUrl":{"type":"string"}}},"PublicVenueDetail":{"allOf":[{"$ref":"#/components/schemas/PublicVenue"},{"type":"object","properties":{"bookable":{"type":"boolean"},"courses":{"type":"array","items":{"type":"object"}},"coaches":{"type":"array","items":{"type":"object"}}}}]},"PublicAvailability":{"type":"object","required":["sessionId","venue","startAt","availableSeats"],"properties":{"sessionId":{"type":"string"},"selectedSessionId":{"type":"string"},"venue":{"type":"object"},"courseName":{"type":"string"},"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"availableSeats":{"type":"integer"},"availabilityStatus":{"type":"string"},"bookingUrl":{"type":"string"}}}}}}