{"openapi":"3.1.0","info":{"title":"Round Connect API","version":"1.0.0","description":"Read-only, plus one write: bookings (keys with «bookings» allowed). One key per studio, created by the owner in Connections (Digital). No health data: no cautions, consent, heart rate or pain reports."},"servers":[{"url":"https://app.roundconnect.uk"}],"components":{"securitySchemes":{"key":{"type":"http","scheme":"bearer","description":"rck_… key"}}},"security":[{"key":[]}],"paths":{"/api/v1/studio":{"get":{"summary":"Studio, product, plan and rooms","responses":{"200":{"description":"OK"}}}},"/api/v1/classes":{"get":{"summary":"Classes with attendance, newest first","parameters":[{"name":"since","in":"query","schema":{"type":"string","format":"date-time"},"description":"Default: 30 days ago"},{"name":"room_id","in":"query","schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"OK"}}}},"/api/v1/classes/{id}/attendance":{"get":{"summary":"Who attended a class","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"},"404":{"description":"Not found"}}}},"/api/v1/clients":{"get":{"summary":"Clients: visits in 30 days, last visit, drifting away","parameters":[{"name":"drifting","in":"query","schema":{"type":"boolean"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":200}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"OK"}}}},"/api/v1/programmes":{"get":{"summary":"Class programmes","responses":{"200":{"description":"OK"}}}},"/api/v1/bookings":{"post":{"summary":"Who is booked into a class (key with «bookings» allowed). Idempotent by booking_id; status «cancelled» withdraws it. The client is matched by email.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["booking_id","room_id","starts_at","client"],"properties":{"booking_id":{"type":"string","description":"Your booking id"},"room_id":{"type":"string","format":"uuid","description":"From GET /api/v1/studio"},"starts_at":{"type":"string","format":"date-time"},"client":{"type":"object","required":["name","email"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"}}},"status":{"type":"string","enum":["booked","cancelled"],"default":"booked"},"answers":{"type":"object","description":"Booking questions. «First time?» is not needed: newcomers are known from attendance.","properties":{"hands_on":{"type":"string","enum":["yes","no","words"],"description":"Hands-on adjustments"},"note":{"type":"string","maxLength":140,"description":"«Anything your teacher should know?» — kept for that class only, and only if the client has given this studio consent to health notes; otherwise dropped (response: note = no_consent)"}}}}}}}},"responses":{"200":{"description":"OK"},"403":{"description":"Key without «bookings»"}}}},"/mcp":{"post":{"summary":"MCP (Streamable HTTP, JSON responses): tools get_studio, list_classes, get_class_attendance, list_clients, list_programmes","responses":{"200":{"description":"JSON-RPC"}}}}}}