{"components":{"securitySchemes":{"AdminToken":{"in":"header","name":"x-admin-token","type":"apiKey"},"BearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},"info":{"contact":{"email":"support@noque.co.za","name":"NoQue Support"},"description":"Cloud-native appointment booking API for public services","title":"NoQue Public API","version":"1.0.0"},"openapi":"3.0.0","paths":{"/api/auth/send-otp":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"phone_number":{"description":"Phone number in format +27XXXXXXXXX","type":"string"}},"required":["phone_number"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"type":"string"},"otp_id":{"format":"uuid","type":"string"}},"type":"object"}}},"description":"OTP sent successfully"}},"summary":"Send OTP to phone number","tags":["Authentication"]}},"/api/auth/verify-otp":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"otp_code":{"type":"string"},"otp_id":{"format":"uuid","type":"string"}},"required":["otp_id","otp_code"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"access_token":{"type":"string"},"identity_id":{"format":"uuid","type":"string"}},"type":"object"}}},"description":"OTP verified successfully"}},"summary":"Verify OTP code","tags":["Authentication"]}},"/api/bookings":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"identity_id":{"format":"uuid","type":"string"},"notes":{"type":"string"},"slot_id":{"format":"uuid","type":"string"}},"required":["slot_id","identity_id"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"id":{"format":"uuid","type":"string"},"reference_number":{"type":"string"},"slot":{"type":"object"},"status":{"type":"string"}},"type":"object"}}},"description":"Booking created successfully"}},"summary":"Create a new booking","tags":["Bookings"]}},"/api/bookings/by-ref/{reference}":{"get":{"parameters":[{"in":"path","name":"reference","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"id":{"format":"uuid","type":"string"},"reference_number":{"type":"string"},"slot":{"type":"object"},"status":{"type":"string"}},"type":"object"}}},"description":"Booking details"}},"summary":"Get booking by reference number","tags":["Bookings"]}},"/api/locations":{"get":{"responses":{"200":{"content":{"application/json":{"schema":{"items":{"properties":{"address":{"type":"string"},"city":{"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"province":{"type":"string"}},"type":"object"},"type":"array"}}},"description":"List of locations"}},"summary":"List all locations","tags":["Locations"]}},"/api/services":{"get":{"parameters":[{"description":"Filter by location","in":"query","name":"location_id","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"properties":{"description":{"type":"string"},"duration_minutes":{"type":"integer"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}}},"description":"List of services"}},"summary":"List all services","tags":["Services"]}},"/api/slots":{"get":{"parameters":[{"in":"query","name":"service_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"date","required":true,"schema":{"format":"date","type":"string"}},{"in":"query","name":"available_only","schema":{"default":true,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"properties":{"available":{"type":"boolean"},"bookings_count":{"type":"integer"},"capacity":{"type":"integer"},"end_time":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"start_time":{"format":"date-time","type":"string"}},"type":"object"},"type":"array"}}},"description":"List of time slots"}},"summary":"List available time slots","tags":["Slots"]}}},"servers":[{"description":"NoQue API Server","url":"https://www.noque.co.za"}]}
