{"openapi":"3.1.0","info":{"title":"Yerevan Padel Demo API (v2 — mangled keys)","version":"2.0.0","description":"Same logic as v1, but field names use entity-prefixed keys (court_id, club_title, player_full_name, etc.) and a wrapped envelope ({ status, response, meta }). Used to test OpenPaddle field mapping."},"servers":[{"url":"/","description":"Same-origin"}],"tags":[{"name":"About","description":"Facility information (v2)"},{"name":"Clubs","description":"Sport clubs (v2)"},{"name":"Courts","description":"Playing courts (v2)"},{"name":"Availability","description":"Time slot availability (v2)"},{"name":"Players","description":"Registered players (v2)"},{"name":"Matches","description":"Open matches (v2)"}],"paths":{"/api/about-v2":{"get":{"tags":["About"],"summary":"Facility info (v2)","operationId":"getAboutV2","responses":{"200":{"description":"Facility info wrapped","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"response":{"$ref":"#/components/schemas/AboutV2"},"meta":{"type":"object"}}}}}}}}},"/api/clubs-v2":{"get":{"tags":["Clubs"],"summary":"List clubs (v2)","operationId":"listClubsV2","parameters":[{"name":"sport","in":"query","schema":{"type":"string"}},{"name":"city","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Clubs","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"response":{"type":"array","items":{"$ref":"#/components/schemas/ClubV2"}},"meta":{"type":"object"}}}}}}}}},"/api/courts-v2":{"get":{"tags":["Courts"],"summary":"List courts (v2)","operationId":"listCourtsV2","responses":{"200":{"description":"Courts","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"response":{"type":"array","items":{"$ref":"#/components/schemas/CourtV2"}},"meta":{"type":"object"}}}}}}}}},"/api/availability-v2":{"get":{"tags":["Availability"],"summary":"Court availability (v2)","operationId":"getAvailabilityV2","parameters":[{"name":"courtId","in":"query","required":true,"schema":{"type":"integer"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Availability with slots","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"response":{"type":"object","properties":{"court_id":{"type":"integer"},"requested_date":{"type":"string"},"time_slots":{"type":"array","items":{"$ref":"#/components/schemas/SlotV2"}}}},"meta":{"type":"object"}}}}}}}}},"/api/players-v2":{"get":{"tags":["Players"],"summary":"List players (v2)","operationId":"listPlayersV2","parameters":[{"name":"minLevel","in":"query","schema":{"type":"number"}},{"name":"maxLevel","in":"query","schema":{"type":"number"}},{"name":"gender","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"Players","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"response":{"type":"array","items":{"$ref":"#/components/schemas/PlayerV2"}},"meta":{"type":"object"}}}}}}}}},"/api/matches-v2":{"get":{"tags":["Matches"],"summary":"List open matches (v2)","operationId":"listMatchesV2","parameters":[{"name":"sport","in":"query","schema":{"type":"string"}},{"name":"dateFrom","in":"query","schema":{"type":"string","format":"date"}},{"name":"dateTo","in":"query","schema":{"type":"string","format":"date"}},{"name":"status","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Matches","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"response":{"type":"array","items":{"$ref":"#/components/schemas/MatchV2"}},"meta":{"type":"object"}}}}}}}}}},"components":{"schemas":{"AboutV2":{"type":"object","properties":{"facility_description":{"type":"string"},"facility_address":{"type":"string"},"facility_city":{"type":"string"},"facility_country":{"type":"string"},"facility_phone":{"type":"string"},"facility_email":{"type":"string"},"facility_hours":{"type":"object","properties":{"open_at":{"type":"string"},"close_at":{"type":"string"}}},"facility_features":{"type":"array","items":{"type":"string"}},"facility_sports":{"type":"array","items":{"type":"string"}}}},"ClubV2":{"type":"object","properties":{"club_id":{"type":"integer"},"club_title":{"type":"string"},"club_city":{"type":"string"},"club_address":{"type":"string"},"club_description":{"type":"string"},"club_image_url":{"type":"string"},"club_sports_offered":{"type":"array","items":{"type":"string"}},"club_court_count":{"type":"integer"},"club_created_at":{"type":"string","format":"date-time"},"extra_field":{"type":"string"},"nested":{"type":"object","properties":{"rating":{"type":"number"},"reviews_count":{"type":"integer"}}}}},"CourtV2":{"type":"object","properties":{"court_id":{"type":"integer"},"court_name":{"type":"string"},"court_description":{"type":"string"},"court_features":{"type":"array","items":{"type":"string"}},"court_image":{"type":"string"},"court_created_at":{"type":"string","format":"date-time"},"extra_field":{"type":"string"},"nested":{"type":"object","properties":{"rating":{"type":"number"},"reviews_count":{"type":"integer"}}}}},"SlotV2":{"type":"object","properties":{"slot_id":{"type":"integer"},"slot_time":{"type":"string"},"slot_available":{"type":"boolean"},"slot_price":{"type":"number"},"slot_duration_minutes":{"type":"integer"},"booked_by":{"type":"string"}}},"PlayerV2":{"type":"object","properties":{"player_id":{"type":"string"},"player_full_name":{"type":"string"},"player_home_location":{"type":"string"},"player_skill_level":{"type":"number"},"player_gender_code":{"type":"string"},"player_avatar_url":{"type":"string"},"player_joined_at":{"type":"string","format":"date-time"},"extra_field":{"type":"string"}}},"MatchV2":{"type":"object","properties":{"match_id":{"type":"string"},"match_club_id":{"type":"integer"},"match_club_title":{"type":"string"},"match_court_id":{"type":"integer"},"match_court_title":{"type":"string"},"match_sport_type":{"type":"string"},"match_date":{"type":"string","format":"date"},"match_time_start":{"type":"string"},"match_time_end":{"type":"string"},"match_duration_minutes":{"type":"integer"},"match_skill_min":{"type":"number"},"match_skill_max":{"type":"number"},"match_gender_filter":{"type":"string"},"match_max_participants":{"type":"integer"},"match_price_amount":{"type":"number"},"match_status_code":{"type":"string"},"match_spots_remaining":{"type":"integer"},"match_owner_id":{"type":"string"},"match_participants":{"type":"array","items":{"type":"object","properties":{"participant_id":{"type":"string"},"participant_name":{"type":"string"},"participant_level":{"type":"number"},"participant_avatar":{"type":"string"}}}}}}}}}