{"openapi":"3.1.0","info":{"title":"DotHack Backend API","description":"Lead enrichment and outreach automation platform","version":"v1"},"paths":{"/api/v1/auth/login":{"post":{"tags":["Authentication"],"summary":"Login with AINative credentials","description":"Authenticate using your existing AINative Studio email and password.\n    No separate registration needed - if you have an AINative account, you can log in.\n\n    Returns JWT tokens (access + refresh) and user profile.\n    Use the access_token as `Authorization: Bearer <token>` on subsequent requests.","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["Authentication"],"summary":"Refresh access token","description":"Exchange an expired access token for a new one using your refresh token.\n    The refresh token is returned from the login endpoint.","operationId":"refresh_token_api_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["Authentication"],"summary":"Get current user profile","description":"Returns the profile of the currently authenticated user.\n    Requires a valid `Authorization: Bearer <token>` or `X-API-Key` header.","operationId":"get_me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/hackathons":{"post":{"tags":["Hackathons"],"summary":"Create a hackathon","description":"Create a new hackathon with the authenticated user as ORGANIZER.\n\n    The creator is automatically assigned the ORGANIZER role, granting them\n    full permissions to manage the hackathon including updates, deletions,\n    participant management, and judging configuration.\n\n    **Authentication Required:** Yes (JWT or API Key)\n\n    **Permissions:** Any authenticated user can create a hackathon\n\n    **Request Body:**\n    - name: Hackathon name (3-200 characters, required)\n    - description: Detailed description (optional, max 5000 chars)\n    - organizer_id: UUID of the organizer (must match authenticated user)\n    - start_date: Start date/time in ISO 8601 format (required)\n    - end_date: End date/time in ISO 8601 format (must be after start_date, required)\n    - location: Physical location or \"virtual\" (required)\n    - registration_deadline: Optional deadline in ISO 8601 (must be ≤ start_date)\n    - max_participants: Optional participant limit (≥ 1)\n    - website_url: Optional hackathon website URL\n    - prizes: Optional prize information as JSON object\n    - rules: Optional rules and guidelines text\n    - status: Initial status (default: \"draft\")\n\n    **Status Values:**\n    - draft: Being planned, not visible to public\n    - upcoming: Visible, accepting registrations\n    - active: Currently running\n    - judging: Submissions closed, judging in progress\n    - completed: Finished, results published\n    - cancelled: Cancelled\n\n    **Response:** Created hackathon with hackathon_id\n\n    **Error Responses:**\n    - 400: Validation error (invalid dates, status, etc.)\n    - 401: Not authenticated\n    - 500: Database error\n    - 504: Timeout","operationId":"create_hackathon_api_v1_hackathons_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonCreateRequest"}}}},"responses":{"201":{"description":"Hackathon created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonResponse"},"example":{"hackathon_id":"550e8400-e29b-41d4-a716-446655440000","name":"AI Hackathon 2025","description":"Build AI-powered applications","organizer_id":"user-123","start_date":"2025-03-01T09:00:00Z","end_date":"2025-03-03T18:00:00Z","location":"San Francisco, CA","status":"draft","created_at":"2025-01-15T10:00:00Z","updated_at":"2025-01-15T10:00:00Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"504":{"description":"Gateway Timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"example":{"error":"Validation error","detail":"end_date must be after start_date","status_code":400}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Hackathons"],"summary":"List hackathons","description":"List hackathons with pagination and optional status filtering.\n\n    By default, returns active and upcoming hackathons. Soft-deleted\n    hackathons are excluded.\n\n    **Authentication Required:** Yes (JWT or API Key)\n\n    **Permissions:** Any authenticated user can list hackathons\n\n    **Query Parameters:**\n    - skip: Number of records to skip (default: 0, for pagination)\n    - limit: Maximum records to return (default: 100, max: 1000)\n    - status: Optional status filter (draft, upcoming, active, judging, completed, cancelled)\n\n    **Response:** Paginated list with total count\n\n    **Error Responses:**\n    - 400: Invalid pagination parameters\n    - 401: Not authenticated\n    - 500: Database error\n    - 504: Timeout","operationId":"list_hackathons_api_v1_hackathons_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Skip"},"description":"Number of records to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum records to return","default":100,"title":"Limit"},"description":"Maximum records to return"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"}],"responses":{"200":{"description":"Hackathons retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonListResponse"},"example":{"hackathons":[{"hackathon_id":"550e8400-e29b-41d4-a716-446655440000","name":"AI Hackathon 2025","description":"Build AI apps","start_date":"2025-03-01T09:00:00Z","end_date":"2025-03-03T18:00:00Z","status":"active","location":"San Francisco"}],"total":1,"skip":0,"limit":100}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"504":{"description":"Gateway Timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}":{"get":{"tags":["Hackathons"],"summary":"Get hackathon details","description":"Retrieve detailed information about a specific hackathon.\n\n    Returns all hackathon fields including organizer info, dates,\n    participant counts, and current status.\n\n    **Authentication Required:** Yes (JWT or API Key)\n\n    **Permissions:** Any authenticated user can view hackathon details\n\n    **Path Parameters:**\n    - hackathon_id: UUID of the hackathon\n\n    **Response:** Complete hackathon details\n\n    **Error Responses:**\n    - 401: Not authenticated\n    - 404: Hackathon not found or deleted\n    - 500: Database error\n    - 504: Timeout","operationId":"get_hackathon_api_v1_hackathons__hackathon_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"responses":{"200":{"description":"Hackathon details retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonResponse"},"example":{"hackathon_id":"550e8400-e29b-41d4-a716-446655440000","name":"AI Hackathon 2025","description":"Build AI-powered applications","organizer_id":"user-123","start_date":"2025-03-01T09:00:00Z","end_date":"2025-03-03T18:00:00Z","location":"San Francisco, CA","max_participants":100,"website_url":"https://aihack2025.com","prizes":{"first":"$10,000","second":"$5,000"},"rules":"Standard hackathon rules apply","status":"active","created_at":"2025-01-15T10:00:00Z","updated_at":"2025-01-15T10:00:00Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"404":{"description":"Hackathon not found","content":{"application/json":{"example":{"error":"Not found","detail":"Hackathon 550e8400-e29b-41d4-a716-446655440000 not found","status_code":404}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"504":{"description":"Gateway Timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Hackathons"],"summary":"Update hackathon","description":"Update hackathon details (ORGANIZER role required).\n\n    Only users with the ORGANIZER role for this hackathon can make updates.\n    All fields are optional - only provided fields will be updated.\n\n    **Authentication Required:** Yes (JWT or API Key)\n\n    **Permissions:** ORGANIZER role for this hackathon\n\n    **Path Parameters:**\n    - hackathon_id: UUID of the hackathon to update\n\n    **Request Body:** (all fields optional)\n    - name: Updated hackathon name (3-200 characters)\n    - description: Updated description (max 5000 chars)\n    - start_date: Updated start date in ISO 8601\n    - end_date: Updated end date in ISO 8601\n    - location: Updated location\n    - registration_deadline: Updated deadline in ISO 8601\n    - max_participants: Updated participant limit\n    - website_url: Updated website URL\n    - prizes: Updated prize information\n    - rules: Updated rules\n    - status: Updated status\n\n    **Status Transitions:**\n    Recommended flow: draft → upcoming → active → judging → completed\n\n    **Response:** Updated hackathon details\n\n    **Error Responses:**\n    - 400: Validation error (invalid dates, status, etc.)\n    - 401: Not authenticated\n    - 403: User is not ORGANIZER for this hackathon\n    - 404: Hackathon not found\n    - 500: Database error\n    - 504: Timeout","operationId":"update_hackathon_api_v1_hackathons__hackathon_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonUpdateRequest"}}}},"responses":{"200":{"description":"Hackathon updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonResponse"},"example":{"hackathon_id":"550e8400-e29b-41d4-a716-446655440000","name":"AI Hackathon 2025 - Extended","status":"active","max_participants":150,"updated_at":"2025-01-20T15:30:00Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"403":{"description":"Not authorized to update this hackathon","content":{"application/json":{"example":{"error":"Forbidden","detail":"User does not have ORGANIZER role for this hackathon","status_code":403}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"504":{"description":"Gateway Timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Hackathons"],"summary":"Delete hackathon","description":"Soft delete a hackathon (ORGANIZER role required).\n\n    This performs a soft delete, marking the hackathon as deleted\n    (is_deleted=True) rather than removing the record. This preserves\n    data integrity and allows for potential recovery.\n\n    **Authentication Required:** Yes (JWT or API Key)\n\n    **Permissions:** ORGANIZER role for this hackathon\n\n    **Path Parameters:**\n    - hackathon_id: UUID of the hackathon to delete\n\n    **Response:** Deletion confirmation\n\n    **Error Responses:**\n    - 401: Not authenticated\n    - 403: User is not ORGANIZER for this hackathon\n    - 404: Hackathon not found or already deleted\n    - 500: Database error\n    - 504: Timeout\n\n    **Note:** Soft-deleted hackathons will not appear in list endpoints\n    or get requests by default. Contact support for recovery.","operationId":"delete_hackathon_api_v1_hackathons__hackathon_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"responses":{"200":{"description":"Hackathon deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonDeleteResponse"},"example":{"success":true,"hackathon_id":"550e8400-e29b-41d4-a716-446655440000","message":"Hackathon successfully deleted"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"403":{"description":"Not authorized to delete this hackathon","content":{"application/json":{"example":{"error":"Forbidden","detail":"User does not have ORGANIZER role for this hackathon","status_code":403}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"504":{"description":"Gateway Timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathon-themes":{"get":{"tags":["hackathon-themes"],"summary":"List Hackathon Themes","description":"List all hackathon themes with statistics (PUBLIC).\n\nNo authentication required - this endpoint is public for homepage display.\n\nReturns themes ordered by display_order with:\n- Theme name and description\n- Icon emoji\n- Number of hackathons\n- Total prize pool","operationId":"list_hackathon_themes_api_v1_hackathon_themes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonThemeListResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}}}},"post":{"tags":["hackathon-themes"],"summary":"Create Hackathon Theme","description":"Create a new hackathon theme (ADMIN ONLY).\n\nCreates a new theme category with optional icon and description.\nDisplay order is auto-assigned if not provided.\n\n**Authorization:** Requires ADMIN role","operationId":"create_hackathon_theme_api_v1_hackathon_themes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonThemeCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonThemeResponse"}}}},"400":{"description":"Invalid request data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"403":{"description":"Not authorized (admin only)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"409":{"description":"Theme name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/hackathon-themes/{theme_id}":{"get":{"tags":["hackathon-themes"],"summary":"Get Hackathon Theme","description":"Get a single hackathon theme by ID (PUBLIC).\n\nNo authentication required.","operationId":"get_hackathon_theme_api_v1_hackathon_themes__theme_id__get","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonThemeResponse"}}}},"404":{"description":"Theme not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["hackathon-themes"],"summary":"Update Hackathon Theme","description":"Update a hackathon theme's details (ADMIN ONLY).\n\nUpdates theme name, description, icon, or display order.\nOnly provided fields will be updated.\n\n**Authorization:** Requires ADMIN role","operationId":"update_hackathon_theme_api_v1_hackathon_themes__theme_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","title":"Theme Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonThemeUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonThemeResponse"}}}},"400":{"description":"Invalid request data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"403":{"description":"Not authorized (admin only)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"404":{"description":"Theme not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"409":{"description":"Theme name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["hackathon-themes"],"summary":"Delete Hackathon Theme","description":"Delete a hackathon theme (ADMIN ONLY).\n\nRemoves a theme category. Use with caution.\n\n**Authorization:** Requires ADMIN role","operationId":"delete_hackathon_theme_api_v1_hackathon_themes__theme_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","title":"Theme Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"403":{"description":"Not authorized (admin only)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"404":{"description":"Theme not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathon-themes/{theme_id}/order":{"patch":{"tags":["hackathon-themes"],"summary":"Update Theme Display Order","description":"Update a theme's display order (ADMIN ONLY).\n\nChanges the order in which themes appear on the homepage.\n\n**Authorization:** Requires ADMIN role","operationId":"update_theme_display_order_api_v1_hackathon_themes__theme_id__order_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","title":"Theme Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonThemeOrderUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonThemeResponse"}}}},"400":{"description":"Invalid display order","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"403":{"description":"Not authorized (admin only)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"404":{"description":"Theme not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__hackathon_theme__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/tracks":{"post":{"tags":["Tracks"],"summary":"Create a track","description":"Create a new track for a hackathon.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    Track names must be unique within a hackathon.","operationId":"create_track_api_v1_hackathons__hackathon_id__tracks_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Tracks"],"summary":"List tracks","description":"List all tracks for a hackathon.\n\n    **Authentication Required:** Yes\n    **Permissions:** Any authenticated user","operationId":"list_tracks_api_v1_hackathons__hackathon_id__tracks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/tracks/{track_id}":{"get":{"tags":["Tracks"],"summary":"Get track","description":"Get a single track by ID.\n\n    **Authentication Required:** Yes\n    **Permissions:** Any authenticated user","operationId":"get_track_api_v1_hackathons__hackathon_id__tracks__track_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"track_id","in":"path","required":true,"schema":{"type":"string","title":"Track Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Tracks"],"summary":"Update track","description":"Update a track's details.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon","operationId":"update_track_api_v1_hackathons__hackathon_id__tracks__track_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"track_id","in":"path","required":true,"schema":{"type":"string","title":"Track Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Tracks"],"summary":"Delete track","description":"Delete a track.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    Cannot delete a track that has teams assigned to it.","operationId":"delete_track_api_v1_hackathons__hackathon_id__tracks__track_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"track_id","in":"path","required":true,"schema":{"type":"string","title":"Track Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__track__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/prizes":{"post":{"tags":["Prizes"],"summary":"Create a prize","description":"Create a new prize for a hackathon.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    Prizes can be hackathon-level (overall winners) or track-specific.\n    Rank must be unique within the same scope (hackathon or track).","operationId":"create_prize_api_v1_hackathons__hackathon_id__prizes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrizeCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrizeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Prizes"],"summary":"List prizes","description":"List all prizes for a hackathon.\n\n    **Authentication Required:** No (public endpoint)\n    **Permissions:** Any user can view prizes\n\n    Supports filtering by track_id and rank.\n    Results are sorted by display_order and rank.","operationId":"list_prizes_api_v1_hackathons__hackathon_id__prizes_get","parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"track_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by track ID","title":"Track Id"},"description":"Filter by track ID"},{"name":"rank","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"description":"Filter by rank","title":"Rank"},"description":"Filter by rank"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrizeListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/prizes/{prize_id}":{"get":{"tags":["Prizes"],"summary":"Get prize","description":"Get a single prize by ID.\n\n    **Authentication Required:** No (public endpoint)\n    **Permissions:** Any user can view prizes","operationId":"get_prize_api_v1_hackathons__hackathon_id__prizes__prize_id__get","parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"prize_id","in":"path","required":true,"schema":{"type":"string","title":"Prize Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrizeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Prizes"],"summary":"Update prize","description":"Update a prize's details.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    Only provided fields will be updated.\n    Rank must remain unique within the same scope.","operationId":"update_prize_api_v1_hackathons__hackathon_id__prizes__prize_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"prize_id","in":"path","required":true,"schema":{"type":"string","title":"Prize Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrizeUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrizeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Prizes"],"summary":"Delete prize","description":"Delete a prize.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    This is a hard delete operation and cannot be undone.","operationId":"delete_prize_api_v1_hackathons__hackathon_id__prizes__prize_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"prize_id","in":"path","required":true,"schema":{"type":"string","title":"Prize Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__prize__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/join":{"post":{"tags":["Participants"],"summary":"Join hackathon","description":"Add current user as BUILDER participant to hackathon","operationId":"join_hackathon_api_v1_hackathons__hackathon_id__join_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hackathon Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JoinHackathonResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/invite-judges":{"post":{"tags":["Participants"],"summary":"Invite judges to hackathon","description":"Invite judges by email (ORGANIZER only)","operationId":"invite_judges_api_v1_hackathons__hackathon_id__invite_judges_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteJudgesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteJudgesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/participants":{"get":{"tags":["Participants"],"summary":"List hackathon participants","description":"Get all participants in a hackathon, optionally filtered by role","operationId":"list_participants_api_v1_hackathons__hackathon_id__participants_get","parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hackathon Id"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(BUILDER|ORGANIZER|JUDGE|MENTOR)$"},{"type":"null"}],"description":"Filter by role (BUILDER, ORGANIZER, JUDGE, MENTOR)","title":"Role"},"description":"Filter by role (BUILDER, ORGANIZER, JUDGE, MENTOR)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListParticipantsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/leave":{"delete":{"tags":["Participants"],"summary":"Leave hackathon","description":"Remove current user from hackathon participants","operationId":"leave_hackathon_api_v1_hackathons__hackathon_id__leave_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hackathon Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaveHackathonResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams":{"post":{"tags":["Teams"],"summary":"Create Team","description":"Create a new team for a hackathon.\n\n    - Automatically adds the creator as team LEAD\n    - Team starts in FORMING status\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"create_team_endpoint_teams_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamCreateRequest"}}}},"responses":{"201":{"description":"Team created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamResponse"}}}},"400":{"description":"Invalid request data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Teams"],"summary":"List Teams","description":"List teams for a hackathon with optional filtering.\n\n    - Supports pagination via skip/limit\n    - Optional status filter\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"list_teams_endpoint_teams_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"query","required":true,"schema":{"type":"string","description":"Hackathon UUID to list teams for","title":"Hackathon Id"},"description":"Hackathon UUID to list teams for"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by team status (FORMING, ACTIVE, SUBMITTED)","title":"Status"},"description":"Filter by team status (FORMING, ACTIVE, SUBMITTED)"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Skip"},"description":"Number of records to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of records to return","default":100,"title":"Limit"},"description":"Maximum number of records to return"}],"responses":{"200":{"description":"Teams retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}":{"get":{"tags":["Teams"],"summary":"Get Team Details","description":"Get detailed information about a team including members.\n\n    - Returns team metadata\n    - Includes full member list\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"get_team_endpoint_teams__team_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Team retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamDetailResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"404":{"description":"Team not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Teams"],"summary":"Update Team","description":"Update team details.\n\n    - All fields are optional\n    - Only provided fields will be updated\n    - Requires authentication\n\n    **Authorization:** User must be authenticated (team lead recommended)","operationId":"update_team_endpoint_teams__team_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamUpdateRequest"}}}},"responses":{"200":{"description":"Team updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamResponse"}}}},"400":{"description":"Invalid request data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"404":{"description":"Team not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Teams"],"summary":"Delete Team","description":"Delete a team.\n\n    - Removes team and all associated members\n    - Cannot be undone\n    - Requires authentication\n\n    **Authorization:** User must be authenticated (team lead or admin recommended)","operationId":"delete_team_endpoint_teams__team_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Team deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamDeleteResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"404":{"description":"Team not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/members":{"post":{"tags":["Teams"],"summary":"Add Team Member","description":"Add a member to a team.\n\n    - Prevents duplicate members\n    - Supports LEAD or MEMBER role\n    - Requires authentication\n\n    **Authorization:** User must be authenticated (team lead recommended)","operationId":"add_team_member_endpoint_teams__team_id__members_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberAddRequest"}}}},"responses":{"201":{"description":"Member added successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberAddResponse"}}}},"400":{"description":"Invalid request or member already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"404":{"description":"Team not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/members/{participant_id}":{"delete":{"tags":["Teams"],"summary":"Remove Team Member","description":"Remove a member from a team.\n\n    - Prevents removing the last LEAD\n    - Requires authentication\n\n    **Authorization:** User must be authenticated (team lead recommended)","operationId":"remove_team_member_endpoint_teams__team_id__members__participant_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"participant_id","in":"path","required":true,"schema":{"type":"string","title":"Participant Id"}}],"responses":{"200":{"description":"Member removed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberRemoveResponse"}}}},"400":{"description":"Cannot remove last LEAD","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"404":{"description":"Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__teams__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/hackathons/{hackathon_id}/projects":{"post":{"tags":["Projects"],"summary":"Create Project","description":"Create a new project for a team in a hackathon.\n\n    - Enforces one project per team per hackathon\n    - Project starts in IDEA status\n    - Requires authentication and team membership\n\n    **Authorization:** User must be a team member","operationId":"create_project_endpoint_v1_hackathons__hackathon_id__projects_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","description":"Hackathon UUID","title":"Hackathon Id"},"description":"Hackathon UUID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateRequest"}}}},"responses":{"201":{"description":"Project created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"400":{"description":"Invalid request or duplicate project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Team not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Projects"],"summary":"List Projects","description":"List projects for a hackathon with optional filtering.\n\n    - Supports pagination via skip/limit\n    - Optional status filter (IDEA, BUILDING, SUBMITTED)\n    - Optional team ID filter\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"list_projects_endpoint_v1_hackathons__hackathon_id__projects_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","description":"Hackathon UUID","title":"Hackathon Id"},"description":"Hackathon UUID"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by project status (IDEA, BUILDING, SUBMITTED)","title":"Status"},"description":"Filter by project status (IDEA, BUILDING, SUBMITTED)"},{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by team ID","title":"Team Id"},"description":"Filter by team ID"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Skip"},"description":"Number of records to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of records to return","default":100,"title":"Limit"},"description":"Maximum number of records to return"}],"responses":{"200":{"description":"Projects retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/hackathons/{hackathon_id}/projects/{project_id}":{"get":{"tags":["Projects"],"summary":"Get Project Details","description":"Get detailed information about a project.\n\n    - Returns all project metadata\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"get_project_endpoint_v1_hackathons__hackathon_id__projects__project_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","description":"Hackathon UUID","title":"Hackathon Id"},"description":"Hackathon UUID"},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","description":"Project UUID","title":"Project Id"},"description":"Project UUID"}],"responses":{"200":{"description":"Project retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDetailResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Projects"],"summary":"Update Project","description":"Update project details.\n\n    - All fields are optional\n    - Only provided fields will be updated\n    - Requires authentication and team membership\n\n    **Authorization:** User must be a team member","operationId":"update_project_endpoint_v1_hackathons__hackathon_id__projects__project_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","description":"Hackathon UUID","title":"Hackathon Id"},"description":"Hackathon UUID"},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","description":"Project UUID","title":"Project Id"},"description":"Project UUID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateRequest"}}}},"responses":{"200":{"description":"Project updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"400":{"description":"Invalid request data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - not a team member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Projects"],"summary":"Delete Project","description":"Delete a project.\n\n    - Removes project permanently\n    - Cannot be undone\n    - Requires authentication and team membership\n\n    **Authorization:** User must be a team member","operationId":"delete_project_endpoint_v1_hackathons__hackathon_id__projects__project_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","description":"Hackathon UUID","title":"Hackathon Id"},"description":"Hackathon UUID"},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","description":"Project UUID","title":"Project Id"},"description":"Project UUID"}],"responses":{"200":{"description":"Project deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - not a team member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/hackathons/{hackathon_id}/projects/{project_id}/status":{"patch":{"tags":["Projects"],"summary":"Update Project Status","description":"Update project status.\n\n    - Valid statuses: IDEA, BUILDING, SUBMITTED\n    - Requires authentication and team membership\n\n    **Authorization:** User must be a team member","operationId":"update_project_status_endpoint_v1_hackathons__hackathon_id__projects__project_id__status_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","description":"Hackathon UUID","title":"Hackathon Id"},"description":"Hackathon UUID"},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","description":"Project UUID","title":"Project Id"},"description":"Project UUID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectStatusUpdateRequest"}}}},"responses":{"200":{"description":"Project status updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"400":{"description":"Invalid status value","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - not a team member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Project not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/hackathons/teams/{team_id}/project":{"get":{"tags":["Projects"],"summary":"Get Team's Project","description":"Get a team's project (if any).\n\n    - Returns project if team has one\n    - Returns 204 if team has no project\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"get_team_project_endpoint_v1_hackathons_teams__team_id__project_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","description":"Team UUID","title":"Team Id"},"description":"Team UUID"}],"responses":{"200":{"description":"Project retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDetailResponse"}}}},"204":{"description":"No project found for team"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"Request timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/submissions":{"post":{"tags":["Submissions"],"summary":"Create a new submission","description":"Create a new hackathon project submission. Submission starts in DRAFT status.","operationId":"create_submission_endpoint_v1_submissions_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionCreateRequest"}}}},"responses":{"201":{"description":"Submission created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionResponse"}}}},"400":{"description":"Invalid request data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"404":{"description":"Team or hackathon not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Submissions"],"summary":"List submissions","description":"List submissions with optional filters (hackathon, team, status).","operationId":"list_submissions_endpoint_v1_submissions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by hackathon ID","title":"Hackathon Id"},"description":"Filter by hackathon ID"},{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by team ID","title":"Team Id"},"description":"Filter by team ID"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (DRAFT, SUBMITTED, SCORED)","title":"Status"},"description":"Filter by status (DRAFT, SUBMITTED, SCORED)"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip (pagination)","default":0,"title":"Skip"},"description":"Number of records to skip (pagination)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum records to return","default":100,"title":"Limit"},"description":"Maximum records to return"}],"responses":{"200":{"description":"List of submissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/submissions/{submission_id}":{"get":{"tags":["Submissions"],"summary":"Get submission details","description":"Retrieve detailed information about a specific submission.","operationId":"get_submission_endpoint_v1_submissions__submission_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Submission Id"}}],"responses":{"200":{"description":"Submission details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"404":{"description":"Submission not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Submissions"],"summary":"Update submission","description":"Update an existing submission's details. Only provided fields will be updated.","operationId":"update_submission_endpoint_v1_submissions__submission_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Submission Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionUpdateRequest"}}}},"responses":{"200":{"description":"Submission updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionResponse"}}}},"400":{"description":"Invalid request data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"404":{"description":"Submission not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Submissions"],"summary":"Delete submission","description":"Delete a submission. Cannot delete submissions that have been scored.","operationId":"delete_submission_endpoint_v1_submissions__submission_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Submission Id"}}],"responses":{"204":{"description":"Submission deleted successfully"},"400":{"description":"Cannot delete scored submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"404":{"description":"Submission not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/submissions/{submission_id}/files":{"post":{"tags":["Submissions"],"summary":"Upload file to submission","description":"Upload a file (PDF, images, etc.) to a submission.","operationId":"upload_file_endpoint_v1_submissions__submission_id__files_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Submission Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileUploadRequest"}}}},"responses":{"201":{"description":"File uploaded successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__FileUploadResponse"}}}},"400":{"description":"Invalid file data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"404":{"description":"Submission not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"413":{"description":"File too large (max 100MB)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/submissions/{submission_id}/similar":{"get":{"tags":["Submissions"],"summary":"Find similar submissions","description":"Find submissions similar to the given submission using semantic search","operationId":"get_similar_submissions_v1_submissions__submission_id__similar_get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Submission Id"}},{"name":"top_k","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of similar submissions to return","default":10,"title":"Top K"},"description":"Maximum number of similar submissions to return"},{"name":"similarity_threshold","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Minimum similarity score (0.0-1.0)","default":0.5,"title":"Similarity Threshold"},"description":"Minimum similarity score (0.0-1.0)"},{"name":"same_hackathon_only","in":"query","required":false,"schema":{"type":"boolean","description":"If true, only return submissions from the same hackathon","default":true,"title":"Same Hackathon Only"},"description":"If true, only return submissions from the same hackathon"}],"responses":{"200":{"description":"Similar submissions found successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimilarSubmissionsResponse"}}}},"404":{"description":"Submission not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__submission__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/judging/scores":{"post":{"tags":["Judging"],"summary":"Submit score for submission","description":"Submit a judge's score for a hackathon submission. Requires JUDGE role for the hackathon. Judge can only submit one score per submission.","operationId":"submit_score_endpoint_judging_scores_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"submission_id","in":"query","required":true,"schema":{"type":"string","description":"UUID of submission to score","title":"Submission Id"},"description":"UUID of submission to score"},{"name":"hackathon_id","in":"query","required":true,"schema":{"type":"string","description":"UUID of hackathon","title":"Hackathon Id"},"description":"UUID of hackathon"},{"name":"rubric_id","in":"query","required":true,"schema":{"type":"string","description":"UUID of judging rubric","title":"Rubric Id"},"description":"UUID of judging rubric"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreSubmitRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Submit Score Endpoint Judging Scores Post"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"504":{"description":"Gateway timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/judging/hackathons/{hackathon_id}/results":{"get":{"tags":["Judging"],"summary":"Get hackathon results","description":"Get final results and leaderboard for a hackathon. Shows rankings based on average scores from all judges. Optionally filter by track.","operationId":"get_hackathon_results_judging_hackathons__hackathon_id__results_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"track_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional track UUID to filter results","title":"Track Id"},"description":"Optional track UUID to filter results"},{"name":"top_n","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Limit to top N entries (max 1000)","title":"Top N"},"description":"Limit to top N entries (max 1000)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaderboardResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"504":{"description":"Gateway timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/judging/assignments":{"get":{"tags":["Judging"],"summary":"Get judge assignments","description":"Get list of submissions assigned to the authenticated judge. Requires JUDGE role. Returns submissions the judge needs to score.","operationId":"get_judge_assignments_judging_assignments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"query","required":true,"schema":{"type":"string","description":"UUID of hackathon","title":"Hackathon Id"},"description":"UUID of hackathon"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Judge Assignments Judging Assignments Get"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"504":{"description":"Gateway timeout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__judging__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/rubrics":{"post":{"tags":["Rubrics"],"summary":"Create rubric","description":"Create a new judging rubric for a hackathon.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    Rubrics define evaluation criteria with weights that must sum to 1.0.\n    Optionally set as active rubric immediately upon creation.","operationId":"create_rubric_api_v1_hackathons__hackathon_id__rubrics_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubricCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubricResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"403":{"description":"Forbidden - ORGANIZER required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Rubrics"],"summary":"List rubrics","description":"List all rubrics for a hackathon.\n\n    **Authentication Required:** Yes\n    **Permissions:** Any authenticated user","operationId":"list_rubrics_api_v1_hackathons__hackathon_id__rubrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubricListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"403":{"description":"Forbidden - ORGANIZER required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/rubrics/active":{"get":{"tags":["Rubrics"],"summary":"Get active rubric","description":"Get the currently active rubric for a hackathon.\n\n    **Authentication Required:** Yes\n    **Permissions:** Any authenticated user (JUDGE, ORGANIZER, etc.)","operationId":"get_active_rubric_api_v1_hackathons__hackathon_id__rubrics_active_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubricResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"403":{"description":"Forbidden - ORGANIZER required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/rubrics/{rubric_id}":{"get":{"tags":["Rubrics"],"summary":"Get rubric","description":"Get a single rubric by ID.\n\n    **Authentication Required:** Yes\n    **Permissions:** Any authenticated user","operationId":"get_rubric_api_v1_hackathons__hackathon_id__rubrics__rubric_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"rubric_id","in":"path","required":true,"schema":{"type":"string","title":"Rubric Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubricResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"403":{"description":"Forbidden - ORGANIZER required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Rubrics"],"summary":"Update rubric","description":"Update a rubric's details.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon","operationId":"update_rubric_api_v1_hackathons__hackathon_id__rubrics__rubric_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"rubric_id","in":"path","required":true,"schema":{"type":"string","title":"Rubric Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubricUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubricResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"403":{"description":"Forbidden - ORGANIZER required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Rubrics"],"summary":"Delete rubric","description":"Delete a rubric.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    Cannot delete the active rubric - deactivate it first.","operationId":"delete_rubric_api_v1_hackathons__hackathon_id__rubrics__rubric_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"rubric_id","in":"path","required":true,"schema":{"type":"string","title":"Rubric Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"403":{"description":"Forbidden - ORGANIZER required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/rubrics/{rubric_id}/activate":{"patch":{"tags":["Rubrics"],"summary":"Activate rubric","description":"Set a rubric as the active rubric for judging.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    Only one rubric can be active at a time. Setting a rubric as active\n    will deactivate any previously active rubric.","operationId":"activate_rubric_api_v1_hackathons__hackathon_id__rubrics__rubric_id__activate_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"rubric_id","in":"path","required":true,"schema":{"type":"string","title":"Rubric Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubricResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"403":{"description":"Forbidden - ORGANIZER required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__rubric__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/invitations":{"post":{"tags":["Invitations"],"summary":"Create invitations","description":"Create invitation(s) for hackathon participants.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon\n\n    Sends invitation emails with secure tokens that expire in 7 days.\n    Prevents duplicate invitations for the same email+hackathon.","operationId":"create_invitations_api_v1_hackathons__hackathon_id__invitations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Invitations"],"summary":"List invitations","description":"List all invitations for a hackathon.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER role for the hackathon","operationId":"list_invitations_api_v1_hackathons__hackathon_id__invitations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/{invitation_id}":{"get":{"tags":["Invitations"],"summary":"Get invitation","description":"Get a single invitation by ID.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER who created it, or invited user","operationId":"get_invitation_api_v1_invitations__invitation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Invitations"],"summary":"Cancel invitation","description":"Cancel a pending invitation.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER who created the invitation\n\n    Can only cancel PENDING invitations.","operationId":"cancel_invitation_api_v1_invitations__invitation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/token/{token}":{"get":{"tags":["Invitations"],"summary":"Get invitation by token (PUBLIC)","description":"Get invitation details by token.\n\n    **Authentication Required:** NO (public endpoint)\n    **Permissions:** Anyone with the token\n\n    Used by invitation recipients to view invitation details before accepting.","operationId":"get_invitation_by_token_api_v1_invitations_token__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/accept":{"post":{"tags":["Invitations"],"summary":"Accept invitation (PUBLIC)","description":"Accept a hackathon invitation using the token.\n\n    **Authentication Required:** NO (public endpoint)\n    **Permissions:** Anyone with valid token\n\n    Auto-provisions participant record and adds to hackathon with specified role.","operationId":"accept_invitation_api_v1_invitations_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationAcceptRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/decline":{"post":{"tags":["Invitations"],"summary":"Decline invitation (PUBLIC)","description":"Decline a hackathon invitation.\n\n    **Authentication Required:** NO (public endpoint)\n    **Permissions:** Anyone with valid token","operationId":"decline_invitation_api_v1_invitations_decline_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationDeclineRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/{invitation_id}/resend":{"post":{"tags":["Invitations"],"summary":"Resend invitation email","description":"Resend invitation email with fresh expiration date.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER who created the invitation","operationId":"resend_invitation_api_v1_invitations__invitation_id__resend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__invitation__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/featured-hackathons":{"get":{"tags":["Featured Hackathons"],"summary":"List featured hackathons (PUBLIC)","description":"List all featured hackathons for homepage display.\n\n    **Authentication Required:** NO (public endpoint)\n    **Permissions:** Public read access\n\n    Returns active featured hackathons sorted by display_order.","operationId":"list_featured_hackathons_api_v1_featured_hackathons_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedHackathonListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden - Admin only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}}}},"post":{"tags":["Featured Hackathons"],"summary":"Create featured hackathon (ADMIN)","description":"Add a hackathon to featured list.\n\n    **Authentication Required:** Yes\n    **Permissions:** ADMIN role only","operationId":"create_featured_hackathon_api_v1_featured_hackathons_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedHackathonCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedHackathonResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden - Admin only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/featured-hackathons/{featured_id}":{"get":{"tags":["Featured Hackathons"],"summary":"Get featured hackathon (PUBLIC)","description":"Get a single featured hackathon by ID.\n\n    **Authentication Required:** NO (public endpoint)\n    **Permissions:** Public read access","operationId":"get_featured_hackathon_api_v1_featured_hackathons__featured_id__get","parameters":[{"name":"featured_id","in":"path","required":true,"schema":{"type":"string","title":"Featured Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedHackathonResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden - Admin only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Featured Hackathons"],"summary":"Update featured hackathon (ADMIN)","description":"Update featured hackathon details.\n\n    **Authentication Required:** Yes\n    **Permissions:** ADMIN role only","operationId":"update_featured_hackathon_api_v1_featured_hackathons__featured_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"featured_id","in":"path","required":true,"schema":{"type":"string","title":"Featured Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedHackathonUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedHackathonResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden - Admin only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Featured Hackathons"],"summary":"Remove from featured (ADMIN)","description":"Remove a hackathon from the featured list.\n\n    **Authentication Required:** Yes\n    **Permissions:** ADMIN role only","operationId":"delete_featured_hackathon_api_v1_featured_hackathons__featured_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"featured_id","in":"path","required":true,"schema":{"type":"string","title":"Featured Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden - Admin only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/featured-hackathons/{featured_id}/order":{"patch":{"tags":["Featured Hackathons"],"summary":"Update display order (ADMIN)","description":"Update the display order of a featured hackathon.\n\n    **Authentication Required:** Yes\n    **Permissions:** ADMIN role only","operationId":"update_display_order_api_v1_featured_hackathons__featured_id__order_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"featured_id","in":"path","required":true,"schema":{"type":"string","title":"Featured Id"}},{"name":"display_order","in":"query","required":true,"schema":{"type":"integer","title":"Display Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedHackathonResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"403":{"description":"Forbidden - Admin only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__featured_hackathon__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/organizer":{"get":{"tags":["Dashboard"],"summary":"Organizer dashboard","description":"Get organizer dashboard with aggregated statistics.\n\n    **Authentication Required:** Yes\n    **Permissions:** User with ORGANIZER role\n\n    Returns:\n    - List of hackathons they organize\n    - Total participants, teams, submissions\n    - Pending judgments count\n    - Recent activity feed","operationId":"get_organizer_dashboard_api_v1_dashboard_organizer_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizerDashboardResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/dashboard/builder":{"get":{"tags":["Dashboard"],"summary":"Builder dashboard","description":"Get builder dashboard with participation info.\n\n    **Authentication Required:** Yes\n    **Permissions:** User with BUILDER role\n\n    Returns:\n    - List of registered hackathons\n    - My teams and submissions\n    - Upcoming deadlines\n    - Project status","operationId":"get_builder_dashboard_api_v1_dashboard_builder_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuilderDashboardResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/dashboard/judge":{"get":{"tags":["Dashboard"],"summary":"Judge dashboard","description":"Get judge dashboard with judging assignments.\n\n    **Authentication Required:** Yes\n    **Permissions:** User with JUDGE role\n\n    Returns:\n    - Assigned hackathons\n    - Submissions to judge\n    - Completed judgments count\n    - Pending submissions list","operationId":"get_judge_dashboard_api_v1_dashboard_judge_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JudgeDashboardResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/dashboard/hackathons/{hackathon_id}":{"get":{"tags":["Dashboard"],"summary":"Hackathon overview","description":"Get comprehensive hackathon overview with statistics.\n\n    **Authentication Required:** Yes\n    **Permissions:** ORGANIZER or ADMIN\n\n    Returns:\n    - Hackathon details\n    - Participant/team/submission counts\n    - Track distribution\n    - Recent activity feed","operationId":"get_hackathon_overview_api_v1_dashboard_hackathons__hackathon_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonOverviewResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__dashboard__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/stats":{"get":{"tags":["Analytics"],"summary":"Get hackathon statistics","description":"Calculate and return statistics for a hackathon (ORGANIZER only).\n\n    Provides aggregated data including:\n    - Total participant count with breakdown by role\n    - Total team count\n    - Total submission count with breakdown by status\n    - Average scores per track\n\n    **Authentication Required:** Yes (JWT or API Key)\n\n    **Permissions:** ORGANIZER role for this hackathon\n\n    **Path Parameters:**\n    - hackathon_id: UUID of the hackathon\n\n    **Response:** Statistics object with all aggregated data\n\n    **Error Responses:**\n    - 401: Not authenticated\n    - 403: User is not ORGANIZER for this hackathon\n    - 404: Hackathon not found\n    - 500: Database error\n    - 504: Timeout","operationId":"get_hackathon_stats_api_v1_hackathons__hackathon_id__stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"responses":{"200":{"description":"Statistics calculated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonStatsResponse"}}}},"401":{"description":"Unauthorized"},"403":{"description":"Not authorized - ORGANIZER role required","content":{"application/json":{"example":{"detail":"Insufficient permissions. Required role: organizer"}}}},"404":{"description":"Hackathon not found","content":{"application/json":{"example":{"detail":"Hackathon 550e8400-... not found"}}}},"500":{"description":"Internal Server Error"},"504":{"description":"Gateway Timeout"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/export":{"get":{"tags":["Analytics"],"summary":"Export hackathon data","description":"Export all hackathon data in JSON or CSV format (ORGANIZER only).\n\n    Exports complete hackathon data including:\n    - Hackathon details\n    - All participants\n    - All teams\n    - All submissions\n    - All scores\n\n    **Authentication Required:** Yes (JWT or API Key)\n\n    **Permissions:** ORGANIZER role for this hackathon\n\n    **Path Parameters:**\n    - hackathon_id: UUID of the hackathon\n\n    **Query Parameters:**\n    - format: Export format - \"json\" (default) or \"csv\"\n\n    **Response Formats:**\n    - JSON: Structured JSON with nested objects (application/json)\n    - CSV: Flattened CSV with all records (text/csv)\n\n    **Error Responses:**\n    - 400: Invalid format parameter\n    - 401: Not authenticated\n    - 403: User is not ORGANIZER for this hackathon\n    - 404: Hackathon not found\n    - 500: Database error\n    - 504: Timeout","operationId":"export_hackathon_data_api_v1_hackathons__hackathon_id__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"format","in":"query","required":false,"schema":{"enum":["json","csv"],"type":"string","description":"Export format (json or csv)","default":"json","title":"Format"},"description":"Export format (json or csv)"}],"responses":{"200":{"description":"Data exported successfully","content":{"application/json":{"schema":{},"example":{"format":"json","data":{"hackathon":{"hackathon_id":"...","name":"..."},"participants":[],"teams":[],"submissions":[],"scores":[]}}},"text/csv":{"example":"record_type,record_id,hackathon_id,...\nhackathon,hack-123,...\n"}}},"401":{"description":"Unauthorized"},"403":{"description":"Not authorized - ORGANIZER role required","content":{"application/json":{"example":{"detail":"Insufficient permissions. Required role: organizer"}}}},"404":{"description":"Not Found"},"500":{"description":"Internal Server Error"},"504":{"description":"Gateway Timeout"},"400":{"description":"Invalid format parameter","content":{"application/json":{"example":{"detail":"Invalid format 'xml'. Must be 'json' or 'csv'"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hackathons/{hackathon_id}/export":{"get":{"tags":["export"],"summary":"Export hackathon data","description":"Export hackathon data in JSON, CSV, or PDF format.\n\n    - **JSON**: Returns complete data inline\n    - **CSV**: Returns pre-signed URL for download\n    - **PDF**: Returns pre-signed URL for download\n\n    Includes hackathon details, participants, submissions, teams, and optionally judgments.","operationId":"export_hackathon_hackathons__hackathon_id__export_get","parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormat","description":"Export format: json, csv, or pdf","default":"json"},"description":"Export format: json, csv, or pdf"},{"name":"include_participants","in":"query","required":false,"schema":{"type":"boolean","description":"Include participant data in export","default":true,"title":"Include Participants"},"description":"Include participant data in export"},{"name":"include_submissions","in":"query","required":false,"schema":{"type":"boolean","description":"Include submission data in export","default":true,"title":"Include Submissions"},"description":"Include submission data in export"},{"name":"include_teams","in":"query","required":false,"schema":{"type":"boolean","description":"Include team data in export","default":true,"title":"Include Teams"},"description":"Include team data in export"},{"name":"include_judgments","in":"query","required":false,"schema":{"type":"boolean","description":"Include judgment/scoring data in export","default":false,"title":"Include Judgments"},"description":"Include judgment/scoring data in export"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hackathons/{hackathon_id}/rlhf/export":{"get":{"tags":["export"],"summary":"Export RLHF feedback data","description":"Export RLHF (Reinforcement Learning from Human Feedback) interaction data\n    for a specific hackathon.\n\n    Supports filtering by date range and feedback status.\n    Export formats: JSON (inline) or CSV (download URL).","operationId":"export_rlhf_data_hackathons__hackathon_id__rlhf_export_get","parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter interactions from this date onwards","title":"Start Date"},"description":"Filter interactions from this date onwards"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter interactions up to this date","title":"End Date"},"description":"Filter interactions up to this date"},{"name":"include_feedback_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only export interactions with user feedback","default":false,"title":"Include Feedback Only"},"description":"Only export interactions with user feedback"},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormat","description":"Export format: json or csv","default":"json"},"description":"Export format: json or csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RLHFExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/hackathons/{hackathon_id}/archive":{"post":{"tags":["export"],"summary":"Archive completed hackathon","description":"Archive a completed or cancelled hackathon.\n\n    Creates a comprehensive archive including:\n    - Hackathon details\n    - All participants\n    - All submissions\n    - All teams\n    - All judgments\n    - RLHF interactions\n    - Analytics summary\n\n    The archive is stored in ZeroDB file storage with a 30-day expiration.\n    Optionally deletes the original data after archival.","operationId":"archive_hackathon_hackathons__hackathon_id__archive_post","parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search":{"post":{"tags":["Search"],"summary":"Universal search","description":"Search across all hackathons, submissions, projects, and teams using natural language queries","operationId":"universal_search_api_v1_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/search":{"post":{"tags":["Search"],"summary":"Search within hackathon","description":"Semantic search scoped to a specific hackathon with track/status filtering","operationId":"hackathon_search_api_v1_hackathons__hackathon_id__search_post","parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HackathonSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/recommendations/judge":{"get":{"tags":["Recommendations"],"summary":"Get judge recommendations","description":"Get AI-powered submission recommendations for a judge.\n\n    Uses the judge's past evaluations and scoring patterns to recommend\n    relevant submissions they haven't scored yet. For new judges without\n    scoring history, returns diverse submissions to start reviewing.\n\n    Requires JUDGE role in the hackathon.","operationId":"get_judge_recommendations_api_v1_hackathons__hackathon_id__recommendations_judge_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hackathon Id"}},{"name":"top_k","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of recommendations to return","default":10,"title":"Top K"},"description":"Maximum number of recommendations to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JudgeRecommendationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/hackathons/{hackathon_id}/recommendations/team":{"post":{"tags":["Recommendations"],"summary":"Get team formation suggestions","description":"Get AI-powered suggestions for team formation based on complementary skills.\n\n    Suggests available participants (not currently on teams) who match the\n    requested skills or have complementary expertise. Uses semantic search\n    to find participants with relevant experience.\n\n    Requires BUILDER role in the hackathon.","operationId":"get_team_suggestions_api_v1_hackathons__hackathon_id__recommendations_team_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hackathon_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hackathon Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamSuggestionsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamSuggestionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recommendations/{recommendation_id}/feedback":{"post":{"tags":["Recommendations"],"summary":"Track recommendation feedback","description":"Track user feedback on recommendations for RLHF (Reinforcement Learning\n    from Human Feedback) improvement.\n\n    Feedback helps improve the quality of future recommendations by learning\n    from user preferences and satisfaction levels.\n\n    Feedback types:\n    - thumbs_up: Positive feedback\n    - thumbs_down: Negative feedback\n    - rating: Numeric rating from 1-5 (requires rating field)","operationId":"track_recommendation_feedback_api_v1_recommendations__recommendation_id__feedback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recommendation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Recommendation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationFeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files/teams/{team_id}/logo":{"post":{"tags":["Files"],"summary":"Upload Team Logo","description":"Upload a team logo image.\n\n    - Max file size: 10MB\n    - Allowed types: PNG, JPG, JPEG, GIF\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"upload_team_logo_endpoint_files_teams__team_id__logo_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_team_logo_endpoint_files_teams__team_id__logo_post"}}}},"responses":{"201":{"description":"Team logo uploaded successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileUploadResponse"}}}},"400":{"description":"Invalid file or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"413":{"description":"File too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files/submissions/{submission_id}/files":{"post":{"tags":["Files"],"summary":"Upload Submission File","description":"Upload a submission artifact (screenshot, video, or document).\n\n    - Max file size: 10MB\n    - Allowed types: Images (PNG, JPG, JPEG, GIF), Videos (MP4, MOV), PDFs\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"upload_submission_file_endpoint_files_submissions__submission_id__files_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}},{"name":"file_type","in":"query","required":true,"schema":{"type":"string","description":"File type (image, video, pdf)","title":"File Type"},"description":"File type (image, video, pdf)"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_submission_file_endpoint_files_submissions__submission_id__files_post"}}}},"responses":{"201":{"description":"Submission file uploaded successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileUploadResponse"}}}},"400":{"description":"Invalid file or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"413":{"description":"File too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files/{file_id}/download":{"get":{"tags":["Files"],"summary":"Get File Download URL","description":"Generate a presigned URL for secure file download.\n\n    - URL expires after specified time (default: 1 hour)\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"get_file_download_url_endpoint_files__file_id__download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}},{"name":"expiration_seconds","in":"query","required":false,"schema":{"type":"integer","maximum":86400,"minimum":60,"description":"URL expiration time in seconds","default":3600,"title":"Expiration Seconds"},"description":"URL expiration time in seconds"}],"responses":{"200":{"description":"Presigned URL generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignedURLResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"404":{"description":"File not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files/teams/{team_id}":{"get":{"tags":["Files"],"summary":"List Team Files","description":"List all files for a specific team.\n\n    - Supports pagination\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"list_team_files_endpoint_files_teams__team_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum files to return","default":100,"title":"Limit"},"description":"Maximum files to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"}],"responses":{"200":{"description":"Files retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileListResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files/{file_id}":{"delete":{"tags":["Files"],"summary":"Delete File","description":"Delete a file from storage.\n\n    - Permanently removes the file\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"delete_file_endpoint_files__file_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"File deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileDeleteResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"404":{"description":"File not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/files/{file_id}/metadata":{"get":{"tags":["Files"],"summary":"Get File Metadata","description":"Get file metadata without downloading content.\n\n    - Returns file details and custom metadata\n    - Requires authentication\n\n    **Authorization:** User must be authenticated","operationId":"get_file_metadata_endpoint_files__file_id__metadata_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Metadata retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileMetadataResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"404":{"description":"File not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__schemas__files__ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"tags":["Root"],"summary":"Root","description":"API root endpoint.\n\nReturns:\n    Dictionary with API information and available endpoints\n\nResponse Schema:\n    {\n        \"name\": \"DotHack Backend API\",\n        \"version\": \"v1\",\n        \"status\": \"running\",\n        \"docs\": \"/v1/docs\"\n    }","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Root  Get"}}}}}}},"/health":{"get":{"tags":["Health"],"summary":"Health Check","description":"Health check endpoint.\n\nReturns:\n    Dictionary with health status and timestamp\n\nResponse Schema:\n    {\n        \"status\": \"healthy\",\n        \"timestamp\": \"2024-01-01T00:00:00.000000\"\n    }","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Check Health Get"}}}}}}}},"components":{"schemas":{"ArchiveRequest":{"properties":{"confirm":{"type":"boolean","title":"Confirm","description":"Must be True to confirm archival (safety check)"},"delete_after_archive":{"type":"boolean","title":"Delete After Archive","description":"Delete original data after successful archival","default":false},"include_analytics":{"type":"boolean","title":"Include Analytics","description":"Include analytics and summary statistics in archive","default":true}},"type":"object","required":["confirm"],"title":"ArchiveRequest","description":"Request schema for archiving a completed hackathon.","example":{"confirm":true,"delete_after_archive":false,"include_analytics":true}},"ArchiveResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"archive_id":{"type":"string","title":"Archive Id","description":"Unique identifier for the archive"},"archive_url":{"type":"string","title":"Archive Url","description":"Pre-signed URL for downloading the complete archive"},"archive_size_bytes":{"type":"integer","minimum":0.0,"title":"Archive Size Bytes"},"items_archived":{"additionalProperties":{"type":"integer"},"type":"object","title":"Items Archived","description":"Count of each item type archived"},"original_deleted":{"type":"boolean","title":"Original Deleted","description":"Whether original data was deleted after archival","default":false},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"When the archive download URL expires"},"archived_at":{"type":"string","format":"date-time","title":"Archived At"}},"type":"object","required":["success","hackathon_id","archive_id","archive_url","archive_size_bytes","items_archived","expires_at","archived_at"],"title":"ArchiveResponse","description":"Response schema for hackathon archival operations.","example":{"archive_id":"archive-abc-456","archive_size_bytes":1048576,"archive_url":"https://storage.example.com/archives/archive-abc-456.zip","archived_at":"2024-12-28T10:00:00Z","expires_at":"2025-01-28T10:00:00Z","hackathon_id":"hack-123","items_archived":{"hackathon":1,"judgments":135,"participants":150,"rlhf_interactions":250,"submissions":45,"teams":30},"original_deleted":false,"success":true}},"AuthTokens":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"AuthTokens","description":"JWT token pair returned on login."},"Body_upload_submission_file_endpoint_files_submissions__submission_id__files_post":{"properties":{"file":{"type":"string","format":"binary","title":"File","description":"Submission file"}},"type":"object","required":["file"],"title":"Body_upload_submission_file_endpoint_files_submissions__submission_id__files_post"},"Body_upload_team_logo_endpoint_files_teams__team_id__logo_post":{"properties":{"file":{"type":"string","format":"binary","title":"File","description":"Team logo image file"}},"type":"object","required":["file"],"title":"Body_upload_team_logo_endpoint_files_teams__team_id__logo_post"},"BuilderDashboardResponse":{"properties":{"registered_hackathons":{"items":{"$ref":"#/components/schemas/BuilderHackathonSummary"},"type":"array","title":"Registered Hackathons","description":"Hackathons user has joined"},"my_teams":{"items":{"$ref":"#/components/schemas/BuilderTeamSummary"},"type":"array","title":"My Teams","description":"Teams user is part of"},"my_submissions":{"items":{"$ref":"#/components/schemas/BuilderSubmissionSummary"},"type":"array","title":"My Submissions","description":"Projects user has submitted"},"upcoming_deadlines":{"items":{"$ref":"#/components/schemas/UpcomingDeadline"},"type":"array","title":"Upcoming Deadlines","description":"Upcoming deadlines sorted by date"}},"type":"object","title":"BuilderDashboardResponse","description":"Builder dashboard with participation overview."},"BuilderHackathonSummary":{"properties":{"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"start_date":{"type":"string","format":"date-time","title":"Start Date"},"end_date":{"type":"string","format":"date-time","title":"End Date"},"registration_deadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Deadline"},"location":{"type":"string","title":"Location"},"my_role":{"type":"string","title":"My Role","description":"User's role in hackathon","default":"builder"}},"type":"object","required":["hackathon_id","name","status","start_date","end_date","location"],"title":"BuilderHackathonSummary","description":"Summary of a hackathon for builder dashboard."},"BuilderSubmissionSummary":{"properties":{"submission_id":{"type":"string","format":"uuid","title":"Submission Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"project_name":{"type":"string","title":"Project Name"},"team_id":{"type":"string","format":"uuid","title":"Team Id"},"team_name":{"type":"string","title":"Team Name"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"hackathon_name":{"type":"string","title":"Hackathon Name"},"submitted_at":{"type":"string","format":"date-time","title":"Submitted At"},"status":{"type":"string","title":"Status"}},"type":"object","required":["submission_id","project_id","project_name","team_id","team_name","hackathon_id","hackathon_name","submitted_at","status"],"title":"BuilderSubmissionSummary","description":"Summary of a submission for builder dashboard."},"BuilderTeamSummary":{"properties":{"team_id":{"type":"string","format":"uuid","title":"Team Id"},"name":{"type":"string","title":"Name"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"hackathon_name":{"type":"string","title":"Hackathon Name"},"status":{"type":"string","title":"Status"},"member_count":{"type":"integer","title":"Member Count"},"my_role":{"type":"string","title":"My Role","description":"User's role in team","default":"MEMBER"}},"type":"object","required":["team_id","name","hackathon_id","hackathon_name","status","member_count"],"title":"BuilderTeamSummary","description":"Summary of a team for builder dashboard."},"CriterionSchema":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Criterion name"},"description":{"type":"string","maxLength":1000,"minLength":1,"title":"Description","description":"Criterion description"},"max_score":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Max Score","description":"Maximum score for this criterion"},"weight":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Weight","description":"Weight factor (all weights must sum to 1.0)"}},"type":"object","required":["name","description","max_score","weight"],"title":"CriterionSchema","description":"Schema for a single criterion in a rubric.\n\nAttributes:\n    name: Criterion name (e.g., 'Innovation', 'Technical Implementation')\n    description: Detailed description of what this criterion evaluates\n    max_score: Maximum points available for this criterion\n    weight: Weight factor for this criterion (all weights must sum to 1.0)"},"ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error message\n    detail: Additional error details\n    status_code: HTTP status code"},"ExportFormat":{"type":"string","enum":["json","csv","pdf"],"title":"ExportFormat","description":"Export format enumeration."},"ExportResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"format":{"type":"string","title":"Format"},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url","description":"Pre-signed URL for downloading the export (for PDF/CSV)"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data","description":"Inline export data (for JSON format)"},"file_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"File Size Bytes","description":"Size of the exported file in bytes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"When the download URL expires (for file-based exports)"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["success","format","generated_at"],"title":"ExportResponse","description":"Response schema for export operations.","example":{"data":{"hackathon":{"hackathon_id":"hack-123","name":"AI Hackathon 2025","status":"completed"},"participants":150,"submissions":45,"teams":30},"file_size_bytes":25600,"format":"json","generated_at":"2024-12-28T10:00:00Z","success":true}},"FeaturedHackathonCreateRequest":{"properties":{"hackathon_id":{"type":"string","minLength":1,"title":"Hackathon Id","description":"Hackathon UUID to feature"},"display_order":{"type":"integer","minimum":1.0,"title":"Display Order","description":"Display order on homepage"},"featured_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Featured Until","description":"Auto-unfeature after this timestamp"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Active status","default":true}},"type":"object","required":["hackathon_id","display_order"],"title":"FeaturedHackathonCreateRequest","description":"Request schema for creating a new featured hackathon entry.\n\nAttributes:\n    hackathon_id: UUID of the hackathon to feature (required)\n    display_order: Display order on homepage (required, >= 1)\n    featured_until: Optional expiration date for auto-unfeaturing\n    is_active: Active status (optional, defaults to true)"},"FeaturedHackathonListResponse":{"properties":{"featured_hackathons":{"items":{"$ref":"#/components/schemas/FeaturedHackathonResponse"},"type":"array","title":"Featured Hackathons"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["featured_hackathons","total"],"title":"FeaturedHackathonListResponse","description":"Response schema for listing featured hackathons.\n\nAttributes:\n    featured: List of featured hackathons\n    total: Total number of featured hackathons"},"FeaturedHackathonResponse":{"properties":{"id":{"type":"string","title":"Id"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"display_order":{"type":"integer","title":"Display Order"},"featured_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Featured Until"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"hackathon":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Hackathon","description":"Nested hackathon details"}},"type":"object","required":["id","hackathon_id","display_order","is_active","created_at","updated_at"],"title":"FeaturedHackathonResponse","description":"Response schema for a single featured hackathon entry.\n\nAttributes:\n    id: Unique featured entry identifier\n    hackathon_id: UUID of the featured hackathon\n    display_order: Display order on homepage\n    featured_until: Optional expiration timestamp\n    is_active: Active status\n    created_at: Creation timestamp\n    updated_at: Last update timestamp\n    hackathon: Optional nested hackathon details"},"FeaturedHackathonUpdateRequest":{"properties":{"display_order":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Display Order"},"featured_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Featured Until"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"FeaturedHackathonUpdateRequest","description":"Request schema for updating featured hackathon details.\n\nAll fields are optional - only provided fields will be updated.\n\nAttributes:\n    display_order: New display order\n    featured_until: New expiration date\n    is_active: New active status"},"FileDeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Deletion success status"},"file_id":{"type":"string","title":"File Id","description":"Deleted file identifier"},"message":{"type":"string","title":"Message","description":"Confirmation message"}},"type":"object","required":["success","file_id","message"],"title":"FileDeleteResponse","description":"Response schema for file deletion.\n\nAttributes:\n    success: True if deleted successfully\n    file_id: Deleted file identifier\n    message: Confirmation message","example":{"file_id":"file_abc123xyz","message":"File deleted successfully","success":true}},"FileListItem":{"properties":{"file_id":{"type":"string","title":"File Id","description":"Unique file identifier"},"file_name":{"type":"string","title":"File Name","description":"Name of the file"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"size":{"type":"integer","title":"Size","description":"File size in bytes"},"folder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder","description":"Virtual folder path"},"created_at":{"type":"string","title":"Created At","description":"Upload timestamp (ISO 8601)"}},"type":"object","required":["file_id","file_name","content_type","size","created_at"],"title":"FileListItem","description":"Schema for individual file in list response.\n\nAttributes:\n    file_id: Unique file identifier\n    file_name: Name of the file\n    content_type: MIME type\n    size: File size in bytes\n    folder: Virtual folder path\n    created_at: Upload timestamp"},"FileListResponse":{"properties":{"files":{"items":{"$ref":"#/components/schemas/FileListItem"},"type":"array","title":"Files","description":"List of files"},"total":{"type":"integer","title":"Total","description":"Total files matching filters"},"limit":{"type":"integer","title":"Limit","description":"Items per page"},"offset":{"type":"integer","title":"Offset","description":"Current offset"}},"type":"object","required":["files","total","limit","offset"],"title":"FileListResponse","description":"Response schema for file listing.\n\nAttributes:\n    files: List of file objects\n    total: Total number of files matching filters\n    limit: Items per page\n    offset: Current offset","example":{"files":[{"content_type":"image/png","created_at":"2024-12-28T10:30:00Z","file_id":"file_abc123","file_name":"logo.png","folder":"teams/team-123/logos","size":245678}],"limit":100,"offset":0,"total":1}},"FileMetadata":{"properties":{"file_id":{"type":"string","title":"File Id","description":"ZeroDB file ID"},"file_name":{"type":"string","maxLength":255,"minLength":1,"title":"File Name","description":"Original filename"},"file_url":{"type":"string","title":"File Url","description":"URL to access the file"},"file_type":{"type":"string","title":"File Type","description":"MIME type (e.g., 'application/pdf')"},"file_size":{"type":"integer","minimum":0.0,"title":"File Size","description":"File size in bytes"},"uploaded_at":{"type":"string","format":"date-time","title":"Uploaded At","description":"Upload timestamp"}},"type":"object","required":["file_id","file_name","file_url","file_type","file_size","uploaded_at"],"title":"FileMetadata","description":"Metadata for a single uploaded file.\n\nAttributes:\n    file_id: Unique identifier for the file in ZeroDB storage\n    file_name: Original filename\n    file_url: URL to access the file (presigned or public)\n    file_type: MIME type of the file\n    file_size: Size in bytes\n    uploaded_at: Timestamp when file was uploaded"},"FileMetadataResponse":{"properties":{"file_id":{"type":"string","title":"File Id","description":"Unique file identifier"},"file_name":{"type":"string","title":"File Name","description":"Name of the file"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"size":{"type":"integer","title":"Size","description":"File size in bytes"},"folder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder","description":"Virtual folder path"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Custom metadata"},"created_at":{"type":"string","title":"Created At","description":"Upload timestamp (ISO 8601)"}},"type":"object","required":["file_id","file_name","content_type","size","created_at"],"title":"FileMetadataResponse","description":"Response schema for file metadata.\n\nAttributes:\n    file_id: Unique file identifier\n    file_name: Name of the file\n    content_type: MIME type\n    size: File size in bytes\n    folder: Virtual folder path\n    metadata: Custom metadata\n    created_at: Upload timestamp"},"FileUploadRequest":{"properties":{"file_name":{"type":"string","maxLength":255,"minLength":1,"title":"File Name"},"file_type":{"type":"string","title":"File Type","description":"MIME type"},"file_size":{"type":"integer","maximum":100000000.0,"minimum":1.0,"title":"File Size","description":"Max 100MB"},"file_content":{"type":"string","title":"File Content","description":"Base64-encoded file content"}},"type":"object","required":["file_name","file_type","file_size","file_content"],"title":"FileUploadRequest","description":"Request schema for uploading a file to a submission.\n\nAttributes:\n    file_name: Name of the file\n    file_type: MIME type of the file\n    file_size: Size in bytes\n    file_content: Base64-encoded file content"},"FileUploadResponse":{"properties":{"file_id":{"type":"string","title":"File Id","description":"Unique file identifier"},"file_name":{"type":"string","title":"File Name","description":"Name of the file"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"size":{"type":"integer","title":"Size","description":"File size in bytes"},"folder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder","description":"Virtual folder path"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Custom metadata"},"created_at":{"type":"string","title":"Created At","description":"Upload timestamp (ISO 8601)"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Public download URL (if available)"}},"type":"object","required":["file_id","file_name","content_type","size","created_at"],"title":"FileUploadResponse","description":"Response schema for file upload.\n\nAttributes:\n    file_id: Unique file identifier\n    file_name: Name of the uploaded file\n    content_type: MIME type of the file\n    size: File size in bytes\n    folder: Virtual folder path\n    metadata: Custom metadata dictionary\n    created_at: Upload timestamp\n    url: Optional public download URL","example":{"content_type":"image/png","created_at":"2024-12-28T10:30:00Z","file_id":"file_abc123xyz","file_name":"team_logo.png","folder":"teams/team-123/logos","metadata":{"file_type":"team_logo","team_id":"team-123"},"size":245678}},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HackathonCreateRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":3,"title":"Name","description":"Hackathon name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description","description":"Hackathon description"},"organizer_id":{"type":"string","format":"uuid","title":"Organizer Id","description":"UUID of the organizer"},"start_date":{"type":"string","format":"date-time","title":"Start Date","description":"Start date/time"},"end_date":{"type":"string","format":"date-time","title":"End Date","description":"End date/time"},"registration_deadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Deadline","description":"Registration deadline"},"max_participants":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Participants","description":"Maximum participants"},"location":{"type":"string","maxLength":200,"minLength":1,"title":"Location","description":"Location or 'virtual'"},"website_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Website Url","description":"Hackathon website"},"logo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Logo Url","description":"Hackathon logo URL"},"is_online":{"type":"boolean","title":"Is Online","description":"Virtual/in-person flag","default":false},"prizes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Prizes","description":"Prize information (JSON)"},"rules":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Rules","description":"Rules and guidelines"},"status":{"$ref":"#/components/schemas/HackathonStatus","description":"Hackathon status","default":"draft"}},"type":"object","required":["name","organizer_id","start_date","end_date","location"],"title":"HackathonCreateRequest","description":"Request schema for creating a hackathon.\n\nAttributes:\n    name: Hackathon name (required, 3-200 chars)\n    description: Detailed description (optional, max 5000 chars)\n    organizer_id: UUID of the organizer creating the hackathon\n    start_date: Start date/time (ISO 8601)\n    end_date: End date/time (ISO 8601)\n    registration_deadline: Optional registration cutoff date\n    max_participants: Optional participant limit\n    location: Physical location or \"virtual\"\n    website_url: Optional hackathon website URL\n    logo_url: Optional hackathon logo image URL\n    is_online: Boolean flag for virtual/in-person (defaults to False)\n    prizes: Optional prize information (JSON object)\n    rules: Optional rules and guidelines (text)\n    status: Initial status (defaults to \"draft\")"},"HackathonDeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","hackathon_id","message"],"title":"HackathonDeleteResponse","description":"Response schema for hackathon deletion.\n\nAttributes:\n    success: Whether deletion was successful\n    hackathon_id: ID of deleted hackathon\n    message: Confirmation message"},"HackathonListResponse":{"properties":{"hackathons":{"items":{"$ref":"#/components/schemas/HackathonResponse"},"type":"array","title":"Hackathons"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total matching hackathons"},"skip":{"type":"integer","minimum":0.0,"title":"Skip","description":"Records skipped","default":0},"limit":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Limit","description":"Records per page","default":100}},"type":"object","required":["hackathons","total"],"title":"HackathonListResponse","description":"Response schema for listing hackathons.\n\nAttributes:\n    hackathons: List of hackathon objects\n    total: Total number of hackathons matching filters\n    skip: Number of records skipped (pagination)\n    limit: Maximum records returned"},"HackathonOverviewResponse":{"properties":{"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"start_date":{"type":"string","format":"date-time","title":"Start Date"},"end_date":{"type":"string","format":"date-time","title":"End Date"},"location":{"type":"string","title":"Location"},"stats":{"$ref":"#/components/schemas/HackathonStats"},"recent_activity":{"items":{"$ref":"#/components/schemas/RecentActivity"},"type":"array","title":"Recent Activity","description":"Last 10 activities"}},"type":"object","required":["hackathon_id","name","status","start_date","end_date","location","stats"],"title":"HackathonOverviewResponse","description":"Hackathon overview dashboard for organizers."},"HackathonResponse":{"properties":{"hackathon_id":{"type":"string","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"organizer_id":{"type":"string","title":"Organizer Id"},"start_date":{"type":"string","format":"date-time","title":"Start Date"},"end_date":{"type":"string","format":"date-time","title":"End Date"},"registration_deadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Deadline"},"max_participants":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Participants"},"location":{"type":"string","title":"Location"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"is_online":{"type":"boolean","title":"Is Online"},"participant_count":{"type":"integer","title":"Participant Count"},"prizes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Prizes"},"rules":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rules"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["hackathon_id","name","description","organizer_id","start_date","end_date","registration_deadline","max_participants","location","website_url","logo_url","is_online","participant_count","prizes","rules","status","created_at","updated_at"],"title":"HackathonResponse","description":"Response schema for a single hackathon.\n\nAttributes:\n    hackathon_id: Unique hackathon identifier\n    name: Hackathon name\n    description: Hackathon description\n    organizer_id: UUID of the organizer\n    start_date: Start date/time\n    end_date: End date/time\n    registration_deadline: Registration deadline (if set)\n    max_participants: Maximum participants (if set)\n    location: Location\n    website_url: Website URL (if set)\n    logo_url: Logo image URL (if set)\n    is_online: Virtual/in-person flag\n    participant_count: Total number of participants\n    prizes: Prize information (if set)\n    rules: Rules and guidelines (if set)\n    status: Current status\n    created_at: Creation timestamp\n    updated_at: Last update timestamp"},"HackathonSearchRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query","description":"Natural language search query","examples":["AI-powered recommendation engine","sustainable energy solution"]},"entity_type":{"anyOf":[{"type":"string","enum":["submission","project","team"]},{"type":"null"}],"title":"Entity Type","description":"Filter by entity type (submission, project, team)"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id","description":"Filter by track ID"},"status":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Status","description":"Filter by status (e.g., SUBMITTED, DRAFT)"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum number of results to return","default":10},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of results to skip (pagination)","default":0},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score (0.0 - 1.0)","default":0.5}},"type":"object","required":["query"],"title":"HackathonSearchRequest","description":"Search request within a specific hackathon."},"HackathonSearchResponse":{"properties":{"query":{"type":"string","title":"Query","description":"Original search query"},"total_results":{"type":"integer","title":"Total Results","description":"Total number of matching results"},"results":{"items":{"$ref":"#/components/schemas/SearchResult"},"type":"array","title":"Results","description":"Search results sorted by relevance (score descending)"},"limit":{"type":"integer","title":"Limit","description":"Maximum results per page"},"offset":{"type":"integer","title":"Offset","description":"Current offset for pagination"},"has_more":{"type":"boolean","title":"Has More","description":"Whether there are more results available"},"execution_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Execution Time Ms","description":"Search execution time in milliseconds"},"hackathon_id":{"type":"string","title":"Hackathon Id","description":"Hackathon ID for scoped search"}},"type":"object","required":["query","total_results","results","limit","offset","has_more","hackathon_id"],"title":"HackathonSearchResponse","description":"Search response scoped to a specific hackathon."},"HackathonStats":{"properties":{"participant_count":{"type":"integer","title":"Participant Count","description":"Total participants","default":0},"team_count":{"type":"integer","title":"Team Count","description":"Total teams","default":0},"submission_count":{"type":"integer","title":"Submission Count","description":"Total submissions","default":0},"builder_count":{"type":"integer","title":"Builder Count","description":"Total builders","default":0},"judge_count":{"type":"integer","title":"Judge Count","description":"Total judges","default":0},"track_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Track Distribution","description":"Submissions by track"}},"type":"object","title":"HackathonStats","description":"Statistics for hackathon overview."},"HackathonStatsResponse":{"properties":{"hackathon_id":{"type":"string","title":"Hackathon Id","description":"Hackathon UUID"},"total_participants":{"type":"integer","title":"Total Participants","description":"Total number of participants"},"participants_by_role":{"additionalProperties":{"type":"integer"},"type":"object","title":"Participants By Role","description":"Participants count by role"},"total_teams":{"type":"integer","title":"Total Teams","description":"Total number of teams"},"total_submissions":{"type":"integer","title":"Total Submissions","description":"Total number of submissions"},"submissions_by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"Submissions By Status","description":"Submissions count by status"},"average_scores":{"additionalProperties":{"type":"number"},"type":"object","title":"Average Scores","description":"Average scores per track"},"calculated_at":{"type":"string","title":"Calculated At","description":"ISO 8601 timestamp of calculation"}},"type":"object","required":["hackathon_id","total_participants","participants_by_role","total_teams","total_submissions","submissions_by_status","average_scores","calculated_at"],"title":"HackathonStatsResponse","description":"Response model for hackathon statistics","example":{"average_scores":{"ai":92.3,"general":85.5},"calculated_at":"2025-12-28T10:30:00Z","hackathon_id":"550e8400-e29b-41d4-a716-446655440000","participants_by_role":{"builder":35,"judge":5,"organizer":2},"submissions_by_status":{"DRAFT":2,"SCORED":3,"SUBMITTED":3},"total_participants":42,"total_submissions":8,"total_teams":8}},"HackathonStatus":{"type":"string","enum":["draft","upcoming","active","judging","completed","cancelled"],"title":"HackathonStatus","description":"Hackathon status enumeration."},"HackathonThemeCreateRequest":{"properties":{"theme_name":{"type":"string","maxLength":200,"minLength":1,"title":"Theme Name","description":"Theme name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Theme description"},"icon":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Icon","description":"Icon emoji or name"},"display_order":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Display Order","description":"Display order"}},"type":"object","required":["theme_name"],"title":"HackathonThemeCreateRequest","description":"Request schema for creating a new hackathon theme.\n\nAttributes:\n    theme_name: Unique theme name (required)\n    description: Theme description (optional)\n    icon: Icon name or emoji (optional)\n    display_order: Display order on frontend (optional, auto-assigned if not provided)"},"HackathonThemeListResponse":{"properties":{"themes":{"items":{"$ref":"#/components/schemas/HackathonThemeResponse"},"type":"array","title":"Themes"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["themes","total"],"title":"HackathonThemeListResponse","description":"Response schema for listing themes.\n\nAttributes:\n    themes: List of themes\n    total: Total number of themes"},"HackathonThemeOrderUpdateRequest":{"properties":{"display_order":{"type":"integer","minimum":1.0,"title":"Display Order","description":"Display order"}},"type":"object","required":["display_order"],"title":"HackathonThemeOrderUpdateRequest","description":"Request schema for updating theme display order.\n\nAttributes:\n    display_order: New display order (required, >= 1)"},"HackathonThemeResponse":{"properties":{"id":{"type":"string","title":"Id"},"theme_name":{"type":"string","title":"Theme Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"hackathon_count":{"type":"integer","title":"Hackathon Count","description":"Number of hackathons","default":0},"total_prizes":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Total Prizes","description":"Total prize pool","default":"0.00"},"display_order":{"type":"integer","title":"Display Order"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","theme_name","display_order","created_at","updated_at"],"title":"HackathonThemeResponse","description":"Response schema for a single hackathon theme.\n\nAttributes:\n    id: Unique theme identifier\n    theme_name: Theme name\n    description: Theme description\n    icon: Icon emoji or name\n    hackathon_count: Number of hackathons with this theme\n    total_prizes: Total prize pool across all hackathons\n    display_order: Display order on frontend\n    created_at: Creation timestamp\n    updated_at: Last update timestamp"},"HackathonThemeUpdateRequest":{"properties":{"theme_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Theme Name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Icon"},"display_order":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Display Order"}},"type":"object","title":"HackathonThemeUpdateRequest","description":"Request schema for updating theme details.\n\nAll fields are optional - only provided fields will be updated.\n\nAttributes:\n    theme_name: New theme name\n    description: New description\n    icon: New icon\n    display_order: New display order"},"HackathonUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":3},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"},"registration_deadline":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Deadline"},"max_participants":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Participants"},"location":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Location"},"website_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Website Url"},"logo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Logo Url"},"is_online":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Online"},"prizes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Prizes"},"rules":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Rules"},"status":{"anyOf":[{"$ref":"#/components/schemas/HackathonStatus"},{"type":"null"}]}},"type":"object","title":"HackathonUpdateRequest","description":"Request schema for updating a hackathon.\n\nAll fields are optional. Only provided fields will be updated.\n\nAttributes:\n    name: Updated hackathon name\n    description: Updated description\n    start_date: Updated start date/time\n    end_date: Updated end date/time\n    registration_deadline: Updated registration deadline\n    max_participants: Updated participant limit\n    location: Updated location\n    website_url: Updated website URL\n    logo_url: Updated logo URL\n    is_online: Updated virtual/in-person flag\n    prizes: Updated prize information\n    rules: Updated rules\n    status: Updated status"},"InvitationAcceptRequest":{"properties":{"token":{"type":"string","maxLength":256,"minLength":1,"title":"Token","description":"Invitation token"},"email":{"type":"string","title":"Email","description":"Email of the user accepting"},"name":{"type":"string","title":"Name","description":"Name of the user accepting"}},"type":"object","required":["token","email","name"],"title":"InvitationAcceptRequest","description":"Request schema for accepting invitation.\n\nAttributes:\n    token: Invitation token\n    email: Email of the user accepting\n    name: Name of the user accepting"},"InvitationCreateRequest":{"properties":{"emails":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Emails","description":"Email addresses to invite"},"role":{"$ref":"#/components/schemas/InvitationRole","description":"Role for invited participants"}},"type":"object","required":["emails","role"],"title":"InvitationCreateRequest","description":"Request schema for creating invitation(s).\n\nAttributes:\n    emails: List of email addresses to invite (1-50 emails)\n    role: Role for the invited participants (JUDGE, MENTOR, BUILDER)"},"InvitationDeclineRequest":{"properties":{"token":{"type":"string","maxLength":256,"minLength":1,"title":"Token","description":"Invitation token"}},"type":"object","required":["token"],"title":"InvitationDeclineRequest","description":"Request schema for declining invitation.\n\nAttributes:\n    token: Invitation token"},"InvitationListResponse":{"properties":{"invitations":{"items":{"$ref":"#/components/schemas/InvitationResponse"},"type":"array","title":"Invitations"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total invitations"},"created":{"type":"integer","minimum":0.0,"title":"Created","description":"Number created","default":0},"skipped":{"type":"integer","minimum":0.0,"title":"Skipped","description":"Number skipped","default":0}},"type":"object","required":["invitations","total"],"title":"InvitationListResponse","description":"Response schema for listing invitations.\n\nAttributes:\n    invitations: List of invitation objects\n    total: Total number of invitations\n    created: Number of invitations created (for create response)\n    skipped: Number of invitations skipped (for create response)"},"InvitationResponse":{"properties":{"invitation_id":{"type":"string","title":"Invitation Id"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"token":{"type":"string","title":"Token"},"invited_by":{"type":"string","title":"Invited By"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"declined_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Declined At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["invitation_id","hackathon_id","email","role","token","invited_by","status","expires_at","created_at","updated_at"],"title":"InvitationResponse","description":"Response schema for a single invitation.\n\nAttributes:\n    invitation_id: Unique invitation identifier\n    hackathon_id: Associated hackathon ID\n    email: Invitee email address\n    role: Assigned role\n    token: Secure invitation token\n    invited_by: User ID who sent the invitation\n    status: Current invitation status\n    expires_at: Token expiration timestamp\n    accepted_at: Acceptance timestamp (if accepted)\n    declined_at: Decline timestamp (if declined)\n    created_at: Creation timestamp\n    updated_at: Last update timestamp"},"InvitationRole":{"type":"string","enum":["JUDGE","MENTOR","BUILDER"],"title":"InvitationRole","description":"Valid invitation roles."},"InviteJudgesRequest":{"properties":{"emails":{"items":{"type":"string","format":"email"},"type":"array","maxItems":50,"minItems":1,"title":"Emails","description":"List of judge email addresses to invite"},"message":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Message","description":"Optional custom invitation message"}},"type":"object","required":["emails"],"title":"InviteJudgesRequest","description":"Request body for inviting judges to a hackathon."},"InviteJudgesResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether invites were sent"},"invited_count":{"type":"integer","title":"Invited Count","description":"Number of judges invited"},"invited_emails":{"items":{"type":"string","format":"email"},"type":"array","title":"Invited Emails","description":"Emails invited"},"message":{"type":"string","title":"Message","description":"Success message"}},"type":"object","required":["success","invited_count","invited_emails","message"],"title":"InviteJudgesResponse","description":"Response for inviting judges."},"JoinHackathonResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether join was successful"},"participant":{"$ref":"#/components/schemas/ParticipantResponse","description":"Created participant record"},"message":{"type":"string","title":"Message","description":"Success message"}},"type":"object","required":["success","participant","message"],"title":"JoinHackathonResponse","description":"Response for joining a hackathon."},"JudgeDashboardResponse":{"properties":{"assigned_hackathons":{"items":{"$ref":"#/components/schemas/JudgeHackathonSummary"},"type":"array","title":"Assigned Hackathons","description":"Hackathons where user is a judge"},"submissions_to_judge":{"type":"integer","title":"Submissions To Judge","description":"Total pending submissions to judge","default":0},"completed_judgments":{"type":"integer","title":"Completed Judgments","description":"Total completed judgments","default":0},"pending_submissions":{"items":{"$ref":"#/components/schemas/PendingSubmission"},"type":"array","title":"Pending Submissions","description":"Submissions awaiting judgment"}},"type":"object","title":"JudgeDashboardResponse","description":"Judge dashboard with judging assignments overview."},"JudgeHackathonSummary":{"properties":{"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"start_date":{"type":"string","format":"date-time","title":"Start Date"},"end_date":{"type":"string","format":"date-time","title":"End Date"},"assigned_submissions":{"type":"integer","title":"Assigned Submissions","description":"Submissions assigned to judge","default":0},"completed_judgments":{"type":"integer","title":"Completed Judgments","description":"Submissions already judged","default":0}},"type":"object","required":["hackathon_id","name","status","start_date","end_date"],"title":"JudgeHackathonSummary","description":"Summary of a hackathon for judge dashboard."},"JudgeRecommendationsResponse":{"properties":{"recommended_submissions":{"items":{"$ref":"#/components/schemas/RecommendedSubmissionItem"},"type":"array","title":"Recommended Submissions"},"total_recommended":{"type":"integer","minimum":0.0,"title":"Total Recommended"},"recommendation_reason":{"type":"string","title":"Recommendation Reason","description":"Why these were recommended"},"execution_time_ms":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Execution Time Ms","description":"Execution time in milliseconds"}},"type":"object","required":["recommended_submissions","total_recommended","recommendation_reason"],"title":"JudgeRecommendationsResponse","description":"Response for judge recommendations.","example":{"execution_time_ms":145.23,"recommendation_reason":"Based on your highly-rated submissions","recommended_submissions":[{"created_at":"2024-01-15T10:30:00Z","description":"An AI-powered chatbot","hackathon_id":"hack-789","project_name":"AI Healthcare Assistant","relevance_score":0.92,"status":"SUBMITTED","submission_id":"sub-123","team_id":"team-456"}],"total_recommended":1}},"LeaderboardEntry":{"properties":{"rank":{"type":"integer","minimum":1.0,"title":"Rank","description":"Leaderboard position"},"submission_id":{"type":"string","format":"uuid","title":"Submission Id"},"team_name":{"type":"string","title":"Team Name"},"project_title":{"type":"string","title":"Project Title"},"total_score":{"type":"number","title":"Total Score"},"average_score":{"type":"number","title":"Average Score"},"score_count":{"type":"integer","minimum":0.0,"title":"Score Count","description":"Number of scores"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["rank","submission_id","team_name","project_title","total_score","average_score","score_count","created_at"],"title":"LeaderboardEntry","description":"Single entry in the hackathon leaderboard.\n\nAttributes:\n    rank: Position in the leaderboard (1-based)\n    submission_id: UUID of the submission\n    team_name: Name of the team\n    project_title: Title of the project\n    total_score: Aggregate score across all criteria\n    average_score: Average score per criterion\n    score_count: Number of scores received\n    created_at: Submission creation timestamp"},"LeaderboardResponse":{"properties":{"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"hackathon_name":{"type":"string","title":"Hackathon Name"},"entries":{"items":{"$ref":"#/components/schemas/LeaderboardEntry"},"type":"array","title":"Entries"},"total_entries":{"type":"integer","title":"Total Entries"},"last_updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Updated"}},"type":"object","required":["hackathon_id","hackathon_name","entries","total_entries"],"title":"LeaderboardResponse","description":"Response schema for hackathon leaderboard.\n\nAttributes:\n    hackathon_id: UUID of the hackathon\n    hackathon_name: Name of the hackathon\n    entries: List of leaderboard entries, sorted by rank\n    total_entries: Total number of submissions with scores\n    last_updated: Timestamp of last score update"},"LeaveHackathonResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether leave was successful"},"message":{"type":"string","title":"Message","description":"Success message"}},"type":"object","required":["success","message"],"title":"LeaveHackathonResponse","description":"Response for leaving a hackathon."},"ListParticipantsResponse":{"properties":{"hackathon_id":{"type":"string","title":"Hackathon Id","description":"Hackathon ID"},"total_count":{"type":"integer","title":"Total Count","description":"Total number of participants"},"participants":{"items":{"$ref":"#/components/schemas/ParticipantResponse"},"type":"array","title":"Participants","description":"List of participants"}},"type":"object","required":["hackathon_id","total_count","participants"],"title":"ListParticipantsResponse","description":"Response for listing participants."},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest","description":"Login with existing AINative credentials."},"OrganizerDashboardResponse":{"properties":{"my_hackathons":{"items":{"$ref":"#/components/schemas/OrganizerHackathonSummary"},"type":"array","title":"My Hackathons","description":"Hackathons organized by user"},"total_participants":{"type":"integer","title":"Total Participants","description":"Total participants across all hackathons","default":0},"total_teams":{"type":"integer","title":"Total Teams","description":"Total teams across all hackathons","default":0},"total_submissions":{"type":"integer","title":"Total Submissions","description":"Total submissions across all hackathons","default":0},"pending_judgments":{"type":"integer","title":"Pending Judgments","description":"Submissions awaiting judge scores","default":0}},"type":"object","title":"OrganizerDashboardResponse","description":"Organizer dashboard with hackathon management overview."},"OrganizerHackathonSummary":{"properties":{"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"start_date":{"type":"string","format":"date-time","title":"Start Date"},"end_date":{"type":"string","format":"date-time","title":"End Date"},"participant_count":{"type":"integer","title":"Participant Count","description":"Total participants","default":0},"team_count":{"type":"integer","title":"Team Count","description":"Total teams","default":0},"submission_count":{"type":"integer","title":"Submission Count","description":"Total submissions","default":0}},"type":"object","required":["hackathon_id","name","status","start_date","end_date"],"title":"OrganizerHackathonSummary","description":"Summary of a hackathon for organizer dashboard."},"ParticipantResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Participant record ID"},"participant_id":{"type":"string","title":"Participant Id","description":"User participant ID"},"hackathon_id":{"type":"string","title":"Hackathon Id","description":"Hackathon ID"},"role":{"type":"string","enum":["BUILDER","ORGANIZER","JUDGE","MENTOR"],"title":"Role","description":"Participant role"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email","description":"Participant email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Participant name"},"joined_at":{"type":"string","title":"Joined At","description":"ISO timestamp when joined"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"}},"type":"object","required":["id","participant_id","hackathon_id","role","joined_at"],"title":"ParticipantResponse","description":"Participant information response."},"PendingSubmission":{"properties":{"submission_id":{"type":"string","format":"uuid","title":"Submission Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"project_name":{"type":"string","title":"Project Name"},"team_id":{"type":"string","format":"uuid","title":"Team Id"},"team_name":{"type":"string","title":"Team Name"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"hackathon_name":{"type":"string","title":"Hackathon Name"},"submitted_at":{"type":"string","format":"date-time","title":"Submitted At"},"track_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Track Id"}},"type":"object","required":["submission_id","project_id","project_name","team_id","team_name","hackathon_id","hackathon_name","submitted_at"],"title":"PendingSubmission","description":"Pending submission for judge dashboard."},"PresignedURLResponse":{"properties":{"url":{"type":"string","title":"Url","description":"Presigned download URL"},"expires_at":{"type":"string","title":"Expires At","description":"URL expiration timestamp (ISO 8601)"},"file_id":{"type":"string","title":"File Id","description":"File identifier"}},"type":"object","required":["url","expires_at","file_id"],"title":"PresignedURLResponse","description":"Response schema for presigned URL generation.\n\nAttributes:\n    url: Presigned download URL\n    expires_at: URL expiration timestamp\n    file_id: File identifier","example":{"expires_at":"2024-12-28T11:30:00Z","file_id":"file_abc123xyz","url":"https://storage.example.com/files/abc123?signature=xyz..."}},"PrizeCreateRequest":{"properties":{"title":{"type":"string","maxLength":200,"minLength":3,"title":"Title","description":"Prize title"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Prize description"},"amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount","description":"Prize amount"},"currency":{"type":"string","maxLength":10,"title":"Currency","description":"Currency code","default":"USD"},"rank":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Rank","description":"Prize ranking (1=first place)"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id","description":"Track ID for track-specific prizes"},"sponsor_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Sponsor Name","description":"Sponsor name"},"display_order":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Display Order","description":"Display order for sorting"}},"type":"object","required":["title","rank"],"title":"PrizeCreateRequest","description":"Request schema for creating a prize.\n\nAttributes:\n    title: Prize title (required, 3-200 chars)\n    description: Detailed description of the prize (optional, max 2000 chars)\n    amount: Prize amount in the specified currency (optional)\n    currency: Currency code (default: USD, max 10 chars)\n    rank: Prize ranking (1=first place, 2=second, etc.)\n    track_id: Optional track ID for track-specific prizes\n    sponsor_name: Optional sponsor/company name providing the prize\n    display_order: Display order for sorting prizes (default: same as rank)"},"PrizeListResponse":{"properties":{"prizes":{"items":{"$ref":"#/components/schemas/PrizeResponse"},"type":"array","title":"Prizes"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total prizes"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"total_prize_pool":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Total Prize Pool","description":"Total prize pool by currency (e.g., {'USD': 50000, 'EUR': 10000})"}},"type":"object","required":["prizes","total","hackathon_id"],"title":"PrizeListResponse","description":"Response schema for listing prizes.\n\nAttributes:\n    prizes: List of prize objects\n    total: Total number of prizes\n    hackathon_id: UUID of the parent hackathon\n    total_prize_pool: Sum of all prize amounts (grouped by currency)"},"PrizeResponse":{"properties":{"prize_id":{"type":"string","title":"Prize Id"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount"},"currency":{"type":"string","title":"Currency"},"rank":{"type":"integer","title":"Rank"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id"},"sponsor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sponsor Name"},"display_order":{"type":"integer","title":"Display Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["prize_id","hackathon_id","title","description","amount","currency","rank","track_id","sponsor_name","display_order","created_at","updated_at"],"title":"PrizeResponse","description":"Response schema for a single prize.\n\nAttributes:\n    prize_id: Unique prize identifier (UUID)\n    hackathon_id: UUID of the parent hackathon\n    title: Prize title\n    description: Prize description\n    amount: Prize amount\n    currency: Currency code\n    rank: Prize ranking (1=first place, 2=second, etc.)\n    track_id: Optional track ID for track-specific prizes\n    sponsor_name: Optional sponsor name\n    display_order: Display order for sorting\n    created_at: Creation timestamp\n    updated_at: Last update timestamp"},"PrizeUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200,"minLength":3},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount"},"currency":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Currency"},"rank":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Rank"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id"},"sponsor_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Sponsor Name"},"display_order":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Display Order"}},"type":"object","title":"PrizeUpdateRequest","description":"Request schema for updating a prize.\n\nAll fields are optional. Only provided fields will be updated.\n\nAttributes:\n    title: Updated prize title\n    description: Updated description\n    amount: Updated prize amount\n    currency: Updated currency code\n    rank: Updated prize ranking\n    track_id: Updated track ID\n    sponsor_name: Updated sponsor name\n    display_order: Updated display order"},"ProjectCreateRequest":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title","description":"Project title"},"one_liner":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"One Liner","description":"Short project description"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description","description":"Detailed project description"},"repo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Repo Url","description":"Repository URL"},"demo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Demo Url","description":"Demo/deployment URL"},"video_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Video Url","description":"Demo video URL"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id","description":"Hackathon ID"},"team_id":{"type":"string","format":"uuid","title":"Team Id","description":"Team ID"}},"type":"object","required":["title","hackathon_id","team_id"],"title":"ProjectCreateRequest","description":"Request schema for creating a new project.\n\nAttributes:\n    hackathon_id: UUID of the hackathon\n    team_id: UUID of the team creating the project\n    title: Project title\n    one_liner: Short description\n    description: Detailed description\n    repo_url: Repository URL\n    demo_url: Demo URL\n    video_url: Video URL"},"ProjectDetailResponse":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title","description":"Project title"},"one_liner":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"One Liner","description":"Short project description"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description","description":"Detailed project description"},"repo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Repo Url","description":"Repository URL"},"demo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Demo Url","description":"Demo/deployment URL"},"video_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Video Url","description":"Demo video URL"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"team_id":{"type":"string","format":"uuid","title":"Team Id"},"status":{"type":"string","enum":["IDEA","BUILDING","SUBMITTED"],"title":"Status"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["title","project_id","hackathon_id","team_id","status"],"title":"ProjectDetailResponse","description":"Response schema for detailed project view.\n\nIncludes all project fields plus potential team information.\n\nAttributes:\n    project_id: Unique project identifier\n    hackathon_id: UUID of the hackathon\n    team_id: UUID of the team\n    title: Project title\n    one_liner: Short description\n    description: Detailed description\n    status: Current project status\n    repo_url: Repository URL\n    demo_url: Demo URL\n    video_url: Video URL\n    created_at: Timestamp when project was created\n    updated_at: Timestamp when project was last updated"},"ProjectListResponse":{"properties":{"projects":{"items":{"$ref":"#/components/schemas/ProjectResponse"},"type":"array","title":"Projects"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip","default":0},"limit":{"type":"integer","title":"Limit","default":100}},"type":"object","required":["projects","total"],"title":"ProjectListResponse","description":"Response schema for project listing.\n\nAttributes:\n    projects: List of projects\n    total: Total number of projects\n    skip: Number of records skipped\n    limit: Maximum number of records returned"},"ProjectResponse":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title","description":"Project title"},"one_liner":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"One Liner","description":"Short project description"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description","description":"Detailed project description"},"repo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Repo Url","description":"Repository URL"},"demo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Demo Url","description":"Demo/deployment URL"},"video_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Video Url","description":"Demo video URL"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"team_id":{"type":"string","format":"uuid","title":"Team Id"},"status":{"type":"string","enum":["IDEA","BUILDING","SUBMITTED"],"title":"Status"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["title","project_id","hackathon_id","team_id","status"],"title":"ProjectResponse","description":"Response schema for a project.\n\nAttributes:\n    project_id: Unique project identifier\n    hackathon_id: UUID of the hackathon\n    team_id: UUID of the team\n    title: Project title\n    one_liner: Short description\n    description: Detailed description\n    status: Current project status\n    repo_url: Repository URL\n    demo_url: Demo URL\n    video_url: Video URL\n    created_at: Timestamp when project was created\n    updated_at: Timestamp when project was last updated"},"ProjectStatusUpdateRequest":{"properties":{"status":{"type":"string","enum":["IDEA","BUILDING","SUBMITTED"],"title":"Status","description":"New project status"}},"type":"object","required":["status"],"title":"ProjectStatusUpdateRequest","description":"Request schema for updating project status.\n\nAttributes:\n    status: New project status (IDEA, BUILDING, SUBMITTED)"},"ProjectUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Title"},"one_liner":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"One Liner"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"repo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Repo Url"},"demo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Demo Url"},"video_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Video Url"}},"type":"object","title":"ProjectUpdateRequest","description":"Request schema for updating a project.\n\nAll fields are optional - only provided fields will be updated.\n\nAttributes:\n    title: New project title\n    one_liner: New short description\n    description: New detailed description\n    repo_url: New repository URL\n    demo_url: New demo URL\n    video_url: New video URL"},"RLHFExportResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"format":{"type":"string","title":"Format"},"total_interactions":{"type":"integer","minimum":0.0,"title":"Total Interactions"},"interactions_with_feedback":{"type":"integer","minimum":0.0,"title":"Interactions With Feedback"},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"},"data":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Data"},"file_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"File Size Bytes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["success","format","total_interactions","interactions_with_feedback","generated_at"],"title":"RLHFExportResponse","description":"Response schema for RLHF export operations.","example":{"data":[{"feedback":{"rating":5,"type":"rating"},"interaction_id":"int-123","prompt":"Recommend submissions","response":"Here are 5 recommendations"}],"file_size_bytes":51200,"format":"json","generated_at":"2024-12-28T10:00:00Z","interactions_with_feedback":200,"success":true,"total_interactions":250}},"RecentActivity":{"properties":{"activity_type":{"type":"string","title":"Activity Type","description":"Type of activity (team_created, submission_made, participant_joined)"},"description":{"type":"string","title":"Description","description":"Human-readable activity description"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","description":"Additional activity data"}},"type":"object","required":["activity_type","description","timestamp"],"title":"RecentActivity","description":"Recent activity entry for hackathon overview."},"RecommendationFeedbackRequest":{"properties":{"feedback_type":{"type":"string","pattern":"^(thumbs_up|thumbs_down|rating)$","title":"Feedback Type","description":"Type of feedback: thumbs_up, thumbs_down, or rating"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating","description":"Rating value 1-5 (required if feedback_type is 'rating')"},"comment":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Comment","description":"Optional feedback comment"}},"type":"object","required":["feedback_type"],"title":"RecommendationFeedbackRequest","description":"Request to track feedback on a recommendation.","example":{"comment":"Great recommendations, very relevant to my expertise!","feedback_type":"rating","rating":5}},"RecommendationFeedbackResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"recommendation_id":{"type":"string","title":"Recommendation Id"},"feedback_tracked":{"type":"boolean","title":"Feedback Tracked"}},"type":"object","required":["success","recommendation_id","feedback_tracked"],"title":"RecommendationFeedbackResponse","description":"Response after tracking feedback.","example":{"feedback_tracked":true,"recommendation_id":"rec-123","success":true}},"RecommendedSubmissionItem":{"properties":{"submission_id":{"type":"string","title":"Submission Id"},"team_id":{"type":"string","title":"Team Id"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"project_name":{"type":"string","title":"Project Name"},"description":{"type":"string","title":"Description"},"relevance_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Relevance Score","description":"Similarity score"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"repository_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Url"},"demo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Demo Url"},"presentation_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Presentation Url"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id"}},"type":"object","required":["submission_id","team_id","hackathon_id","project_name","description","relevance_score","status","created_at"],"title":"RecommendedSubmissionItem","description":"Individual recommended submission with relevance score.","example":{"created_at":"2024-01-15T10:30:00Z","demo_url":"https://demo.example.com","description":"An AI-powered chatbot for medical diagnosis","hackathon_id":"hack-789","project_name":"AI Healthcare Assistant","relevance_score":0.92,"repository_url":"https://github.com/team/project","status":"SUBMITTED","submission_id":"sub-123","team_id":"team-456"}},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshRequest","description":"Refresh an expired access token."},"RubricCreateRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","description":"Rubric name"},"criteria":{"items":{"$ref":"#/components/schemas/CriterionSchema"},"type":"array","maxItems":20,"minItems":1,"title":"Criteria","description":"Judging criteria"},"is_active":{"type":"boolean","title":"Is Active","description":"Set as active rubric","default":false}},"type":"object","required":["name","criteria"],"title":"RubricCreateRequest","description":"Request schema for creating a new rubric.\n\nAttributes:\n    name: Rubric name\n    criteria: List of criterion definitions\n    is_active: Whether this rubric should be set as active immediately"},"RubricListResponse":{"properties":{"rubrics":{"items":{"$ref":"#/components/schemas/RubricResponse"},"type":"array","title":"Rubrics"},"total":{"type":"integer","title":"Total"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"}},"type":"object","required":["rubrics","total","hackathon_id"],"title":"RubricListResponse","description":"Response schema for listing rubrics.\n\nAttributes:\n    rubrics: List of rubrics\n    total: Total number of rubrics\n    hackathon_id: Associated hackathon identifier"},"RubricResponse":{"properties":{"rubric_id":{"type":"string","format":"uuid","title":"Rubric Id"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"criteria":{"items":{"$ref":"#/components/schemas/CriterionSchema"},"type":"array","title":"Criteria"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["rubric_id","hackathon_id","name","criteria","is_active","created_at","updated_at"],"title":"RubricResponse","description":"Response schema for a rubric.\n\nAttributes:\n    rubric_id: Unique rubric identifier\n    hackathon_id: Associated hackathon identifier\n    name: Rubric name\n    criteria: List of criterion definitions\n    is_active: Whether this is the active rubric for the hackathon\n    created_at: Timestamp when rubric was created\n    updated_at: Timestamp when rubric was last updated"},"RubricUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name","description":"Rubric name"},"criteria":{"anyOf":[{"items":{"$ref":"#/components/schemas/CriterionSchema"},"type":"array","maxItems":20,"minItems":1},{"type":"null"}],"title":"Criteria","description":"Judging criteria"}},"type":"object","title":"RubricUpdateRequest","description":"Request schema for updating an existing rubric.\n\nAll fields are optional - only provided fields will be updated.\n\nAttributes:\n    name: Rubric name\n    criteria: List of criterion definitions"},"ScoreSubmitRequest":{"properties":{"judge_id":{"type":"string","format":"uuid","title":"Judge Id","description":"UUID of the judge"},"criteria":{"type":"string","maxLength":100,"minLength":1,"title":"Criteria","description":"Judging criteria name"},"score":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Score","description":"Score value between 0 and 100"},"comment":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Comment","description":"Optional judge feedback"}},"type":"object","required":["judge_id","criteria","score"],"title":"ScoreSubmitRequest","description":"Request schema for submitting a score for a submission.\n\nAttributes:\n    judge_id: UUID of the judge submitting the score\n    criteria: Name of the judging criteria (e.g., 'innovation', 'technical', 'design')\n    score: Numeric score value (0-100)\n    comment: Optional feedback comment from the judge"},"SearchRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query","description":"Natural language search query","examples":["machine learning healthcare projects","blockchain voting system"]},"entity_type":{"anyOf":[{"type":"string","enum":["submission","project","team","hackathon"]},{"type":"null"}],"title":"Entity Type","description":"Filter by entity type (submission, project, team, hackathon)"},"status":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Status","description":"Filter by status (e.g., SUBMITTED, DRAFT, LIVE)"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum number of results to return","default":10},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of results to skip (pagination)","default":0},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score (0.0 - 1.0)"}},"type":"object","required":["query"],"title":"SearchRequest","description":"Universal search request across all hackathons."},"SearchResponse":{"properties":{"query":{"type":"string","title":"Query","description":"Original search query"},"total_results":{"type":"integer","title":"Total Results","description":"Total number of matching results"},"results":{"items":{"$ref":"#/components/schemas/SearchResult"},"type":"array","title":"Results","description":"Search results sorted by relevance (score descending)"},"limit":{"type":"integer","title":"Limit","description":"Maximum results per page"},"offset":{"type":"integer","title":"Offset","description":"Current offset for pagination"},"has_more":{"type":"boolean","title":"Has More","description":"Whether there are more results available"},"execution_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Execution Time Ms","description":"Search execution time in milliseconds"}},"type":"object","required":["query","total_results","results","limit","offset","has_more"],"title":"SearchResponse","description":"Search response with results and pagination info."},"SearchResult":{"properties":{"id":{"type":"string","title":"Id","description":"Entity ID"},"score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score","description":"Similarity score (0.0 - 1.0, higher is more relevant)"},"metadata":{"$ref":"#/components/schemas/SearchResultMetadata","description":"Entity metadata with contextual information"}},"type":"object","required":["id","score","metadata"],"title":"SearchResult","description":"Individual search result."},"SearchResultMetadata":{"properties":{"entity_type":{"type":"string","title":"Entity Type","description":"Type of entity (submission, project, team, hackathon)"},"hackathon_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hackathon Id","description":"Hackathon ID"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id","description":"Track ID"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id","description":"Team ID"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Entity status"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Title or name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description or summary"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Tags or categories"},"submitted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted At","description":"Submission timestamp"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At","description":"Creation timestamp"}},"type":"object","required":["entity_type"],"title":"SearchResultMetadata","description":"Metadata for a search result."},"SimilarSubmissionItem":{"properties":{"submission_id":{"type":"string","title":"Submission Id","description":"Submission ID"},"team_id":{"type":"string","title":"Team Id","description":"Team ID"},"hackathon_id":{"type":"string","title":"Hackathon Id","description":"Hackathon ID"},"project_name":{"type":"string","title":"Project Name","description":"Project name"},"description":{"type":"string","title":"Description","description":"Project description"},"status":{"type":"string","enum":["DRAFT","SUBMITTED","SCORED"],"title":"Status","description":"Submission status"},"similarity_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Similarity Score","description":"Similarity score (0.0-1.0, higher is more similar)"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"repository_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Url","description":"Git repository URL"},"demo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Demo Url","description":"Live demo URL"}},"type":"object","required":["submission_id","team_id","hackathon_id","project_name","description","status","similarity_score","created_at"],"title":"SimilarSubmissionItem","description":"Individual similar submission with similarity score.\n\nAttributes:\n    submission_id: UUID of the similar submission\n    team_id: UUID of the team\n    hackathon_id: UUID of the hackathon\n    project_name: Name of the project\n    description: Project description\n    status: Submission status\n    similarity_score: Similarity score (0.0 - 1.0, higher is more similar)\n    created_at: When submission was created"},"SimilarSubmissionsResponse":{"properties":{"submission_id":{"type":"string","title":"Submission Id","description":"Query submission ID"},"similar_submissions":{"items":{"$ref":"#/components/schemas/SimilarSubmissionItem"},"type":"array","title":"Similar Submissions","description":"Similar submissions sorted by relevance (highest score first)"},"total_found":{"type":"integer","title":"Total Found","description":"Total number of similar submissions found"},"execution_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Execution Time Ms","description":"Search execution time in milliseconds"}},"type":"object","required":["submission_id","similar_submissions","total_found"],"title":"SimilarSubmissionsResponse","description":"Response containing similar submissions.\n\nAttributes:\n    submission_id: The query submission ID\n    similar_submissions: List of similar submissions sorted by similarity score\n    total_found: Total number of similar submissions found\n    execution_time_ms: Search execution time in milliseconds"},"SubmissionCreateRequest":{"properties":{"team_id":{"type":"string","format":"uuid","title":"Team Id","description":"Team ID"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id","description":"Hackathon ID"},"project_name":{"type":"string","maxLength":200,"minLength":1,"title":"Project Name","description":"Project name"},"description":{"type":"string","maxLength":5000,"minLength":10,"title":"Description","description":"Project description"},"repository_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Repository Url","description":"Git repository URL"},"demo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Demo Url","description":"Live demo URL"},"video_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Video Url","description":"Demo video URL"},"files":{"anyOf":[{"items":{"$ref":"#/components/schemas/FileMetadata"},"type":"array"},{"type":"null"}],"title":"Files","description":"Uploaded files"}},"type":"object","required":["team_id","hackathon_id","project_name","description"],"title":"SubmissionCreateRequest","description":"Request schema for creating a new submission.\n\nAttributes:\n    team_id: UUID of the team submitting the project\n    hackathon_id: UUID of the hackathon\n    project_name: Name of the project\n    description: Project description\n    repository_url: Optional Git repository URL\n    demo_url: Optional live demo URL\n    video_url: Optional demo video URL\n    files: Optional list of file metadata for uploaded files"},"SubmissionListResponse":{"properties":{"submissions":{"items":{"$ref":"#/components/schemas/SubmissionResponse"},"type":"array","title":"Submissions"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total submissions count"},"skip":{"type":"integer","minimum":0.0,"title":"Skip","description":"Pagination offset","default":0},"limit":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Limit","description":"Pagination limit","default":100}},"type":"object","required":["submissions","total"],"title":"SubmissionListResponse","description":"Response schema for listing submissions.\n\nAttributes:\n    submissions: List of submissions\n    total: Total number of submissions\n    skip: Number of submissions skipped (pagination)\n    limit: Maximum number of submissions returned"},"SubmissionResponse":{"properties":{"submission_id":{"type":"string","format":"uuid","title":"Submission Id"},"team_id":{"type":"string","format":"uuid","title":"Team Id"},"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"project_name":{"type":"string","title":"Project Name"},"description":{"type":"string","title":"Description"},"repository_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Url"},"demo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Demo Url"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"status":{"type":"string","enum":["DRAFT","SUBMITTED","SCORED"],"title":"Status"},"files":{"items":{"$ref":"#/components/schemas/FileMetadata"},"type":"array","title":"Files"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"submitted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Submitted At"}},"type":"object","required":["submission_id","team_id","hackathon_id","project_name","description","repository_url","demo_url","video_url","status","files","created_at","updated_at","submitted_at"],"title":"SubmissionResponse","description":"Response schema for a single submission.\n\nAttributes:\n    submission_id: Unique submission identifier\n    team_id: Team UUID\n    hackathon_id: Hackathon UUID\n    project_name: Project name\n    description: Project description\n    repository_url: Git repository URL\n    demo_url: Live demo URL\n    video_url: Demo video URL\n    status: Submission status (DRAFT, SUBMITTED, SCORED)\n    files: List of uploaded file metadata\n    created_at: Creation timestamp\n    updated_at: Last update timestamp\n    submitted_at: Submission timestamp (when status changed to SUBMITTED)"},"SubmissionUpdateRequest":{"properties":{"project_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Project Name"},"description":{"anyOf":[{"type":"string","maxLength":5000,"minLength":10},{"type":"null"}],"title":"Description"},"repository_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Repository Url"},"demo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Demo Url"},"video_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Video Url"},"status":{"anyOf":[{"type":"string","enum":["DRAFT","SUBMITTED","SCORED"]},{"type":"null"}],"title":"Status"},"files":{"anyOf":[{"items":{"$ref":"#/components/schemas/FileMetadata"},"type":"array"},{"type":"null"}],"title":"Files"}},"type":"object","title":"SubmissionUpdateRequest","description":"Request schema for updating an existing submission.\n\nAll fields are optional to allow partial updates.\n\nAttributes:\n    project_name: Optional new project name\n    description: Optional new description\n    repository_url: Optional new repository URL\n    demo_url: Optional new demo URL\n    video_url: Optional new video URL\n    status: Optional new status (DRAFT, SUBMITTED, SCORED)\n    files: Optional updated list of file metadata"},"SuccessResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"SuccessResponse","description":"Standard success response schema.\n\nAttributes:\n    success: Success status (always True)\n    message: Optional success message"},"SuggestedParticipantItem":{"properties":{"participant_id":{"type":"string","title":"Participant Id"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"match_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Match Score","description":"Skill match score"},"role":{"type":"string","title":"Role"},"joined_at":{"type":"string","format":"date-time","title":"Joined At"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional participant metadata"}},"type":"object","required":["participant_id","hackathon_id","match_score","role","joined_at"],"title":"SuggestedParticipantItem","description":"Individual participant suggestion with match score.","example":{"hackathon_id":"hack-456","joined_at":"2024-01-10T08:00:00Z","match_score":0.87,"metadata":{"experience_level":"Intermediate","skills":["Python","React","Machine Learning"]},"participant_id":"user-123","role":"BUILDER"}},"TeamCreateRequest":{"properties":{"hackathon_id":{"type":"string","title":"Hackathon Id","description":"Hackathon UUID"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","description":"Team name"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id","description":"Optional track UUID"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Team description"}},"type":"object","required":["hackathon_id","name"],"title":"TeamCreateRequest","description":"Request schema for creating a new team.\n\nAttributes:\n    hackathon_id: UUID of the hackathon this team belongs to\n    name: Team name (required, non-empty)\n    track_id: Optional track UUID\n    description: Optional team description"},"TeamDeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message","default":"Team deleted successfully"}},"type":"object","required":["success"],"title":"TeamDeleteResponse","description":"Response schema for deleting a team.\n\nAttributes:\n    success: Whether the operation succeeded\n    message: Success message"},"TeamDetailResponse":{"properties":{"team_id":{"type":"string","title":"Team Id"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","enum":["FORMING","ACTIVE","SUBMITTED"],"title":"Status"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"members":{"items":{"$ref":"#/components/schemas/TeamMemberResponse"},"type":"array","title":"Members"},"member_count":{"type":"integer","title":"Member Count"}},"type":"object","required":["team_id","hackathon_id","name","status","members","member_count"],"title":"TeamDetailResponse","description":"Response schema for team details with members.\n\nExtends TeamResponse to include member list and count.\n\nAttributes:\n    members: List of team members\n    member_count: Total number of team members"},"TeamListResponse":{"properties":{"teams":{"items":{"$ref":"#/components/schemas/TeamResponse"},"type":"array","title":"Teams"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["teams","total","skip","limit"],"title":"TeamListResponse","description":"Response schema for listing teams.\n\nAttributes:\n    teams: List of teams\n    total: Total number of teams matching criteria\n    skip: Number of records skipped (pagination)\n    limit: Maximum number of records returned"},"TeamMemberAddRequest":{"properties":{"participant_id":{"type":"string","title":"Participant Id","description":"Participant UUID"},"role":{"type":"string","enum":["LEAD","MEMBER"],"title":"Role","description":"Member role","default":"MEMBER"}},"type":"object","required":["participant_id"],"title":"TeamMemberAddRequest","description":"Request schema for adding a member to a team.\n\nAttributes:\n    participant_id: UUID of the participant to add\n    role: Member role (LEAD or MEMBER)"},"TeamMemberAddResponse":{"properties":{"id":{"type":"string","title":"Id"},"team_id":{"type":"string","title":"Team Id"},"participant_id":{"type":"string","title":"Participant Id"},"role":{"type":"string","enum":["LEAD","MEMBER"],"title":"Role"}},"type":"object","required":["id","team_id","participant_id","role"],"title":"TeamMemberAddResponse","description":"Response schema for adding a team member.\n\nAttributes:\n    id: Member record UUID\n    team_id: Team UUID\n    participant_id: Participant UUID\n    role: Member role"},"TeamMemberRemoveResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message","default":"Member removed successfully"}},"type":"object","required":["success"],"title":"TeamMemberRemoveResponse","description":"Response schema for removing a team member.\n\nAttributes:\n    success: Whether the operation succeeded\n    message: Success message"},"TeamMemberResponse":{"properties":{"id":{"type":"string","title":"Id"},"team_id":{"type":"string","title":"Team Id"},"participant_id":{"type":"string","title":"Participant Id"},"role":{"type":"string","enum":["LEAD","MEMBER"],"title":"Role"}},"type":"object","required":["id","team_id","participant_id","role"],"title":"TeamMemberResponse","description":"Response schema for a team member.\n\nAttributes:\n    id: Member record UUID\n    team_id: Team UUID\n    participant_id: Participant UUID\n    role: Member role (LEAD or MEMBER)"},"TeamResponse":{"properties":{"team_id":{"type":"string","title":"Team Id"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","enum":["FORMING","ACTIVE","SUBMITTED"],"title":"Status"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["team_id","hackathon_id","name","status"],"title":"TeamResponse","description":"Response schema for a single team.\n\nAttributes:\n    team_id: Unique team identifier\n    hackathon_id: Hackathon UUID this team belongs to\n    name: Team name\n    status: Team status (FORMING, ACTIVE, SUBMITTED)\n    track_id: Optional track UUID\n    description: Optional team description\n    created_at: Timestamp when team was created\n    updated_at: Timestamp when team was last updated"},"TeamSuggestionsRequest":{"properties":{"desired_skills":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Desired Skills","description":"Optional list of desired skills to match"},"top_k":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top K","description":"Maximum number of suggestions to return","default":10}},"type":"object","title":"TeamSuggestionsRequest","description":"Request for team formation suggestions.","example":{"desired_skills":["Python","Machine Learning","React"],"top_k":10}},"TeamSuggestionsResponse":{"properties":{"suggested_participants":{"items":{"$ref":"#/components/schemas/SuggestedParticipantItem"},"type":"array","title":"Suggested Participants"},"total_suggested":{"type":"integer","minimum":0.0,"title":"Total Suggested"},"suggestion_reason":{"type":"string","title":"Suggestion Reason","description":"Why these were suggested"},"execution_time_ms":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Execution Time Ms","description":"Execution time in milliseconds"}},"type":"object","required":["suggested_participants","total_suggested","suggestion_reason"],"title":"TeamSuggestionsResponse","description":"Response for team formation suggestions.","example":{"execution_time_ms":132.45,"suggested_participants":[{"hackathon_id":"hack-456","joined_at":"2024-01-10T08:00:00Z","match_score":0.87,"metadata":{"skills":["Python","React"]},"participant_id":"user-123","role":"BUILDER"}],"suggestion_reason":"Participants with skills: Python, Machine Learning","total_suggested":1}},"TeamUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name","description":"Team name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description","description":"Team description"},"status":{"anyOf":[{"type":"string","enum":["FORMING","ACTIVE","SUBMITTED"]},{"type":"null"}],"title":"Status","description":"Team status"},"track_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Id","description":"Track UUID"}},"type":"object","title":"TeamUpdateRequest","description":"Request schema for updating team details.\n\nAll fields are optional - only provided fields will be updated.\n\nAttributes:\n    name: New team name\n    description: New team description\n    status: New team status (FORMING, ACTIVE, SUBMITTED)\n    track_id: New track UUID"},"TokenResponse":{"properties":{"tokens":{"$ref":"#/components/schemas/AuthTokens"},"user":{"additionalProperties":true,"type":"object","title":"User"}},"type":"object","required":["tokens","user"],"title":"TokenResponse","description":"Login/refresh response with tokens and user info.","example":{"tokens":{"access_token":"eyJhbGciOiJIUzI1NiIs...","refresh_token":"eyJhbGciOiJIUzI1NiIs...","token_type":"bearer"},"user":{"email":"dev@example.com","id":"user-uuid","name":"Dev User"}}},"TrackCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":3,"title":"Name","description":"Track name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Track description"}},"type":"object","required":["name"],"title":"TrackCreateRequest","description":"Request schema for creating a track.\n\nAttributes:\n    name: Track name (required, 3-100 chars)\n    description: Detailed description (optional, max 1000 chars)"},"TrackListResponse":{"properties":{"tracks":{"items":{"$ref":"#/components/schemas/TrackResponse"},"type":"array","title":"Tracks"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total tracks"},"hackathon_id":{"type":"string","title":"Hackathon Id"}},"type":"object","required":["tracks","total","hackathon_id"],"title":"TrackListResponse","description":"Response schema for listing tracks.\n\nAttributes:\n    tracks: List of track objects\n    total: Total number of tracks\n    hackathon_id: UUID of the parent hackathon"},"TrackResponse":{"properties":{"track_id":{"type":"string","title":"Track Id"},"hackathon_id":{"type":"string","title":"Hackathon Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["track_id","hackathon_id","name","description","created_at","updated_at"],"title":"TrackResponse","description":"Response schema for a single track.\n\nAttributes:\n    track_id: Unique track identifier (UUID)\n    hackathon_id: UUID of the parent hackathon\n    name: Track name\n    description: Track description\n    created_at: Creation timestamp\n    updated_at: Last update timestamp"},"TrackUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":3},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"}},"type":"object","title":"TrackUpdateRequest","description":"Request schema for updating a track.\n\nAll fields are optional. Only provided fields will be updated.\n\nAttributes:\n    name: Updated track name\n    description: Updated description"},"UpcomingDeadline":{"properties":{"hackathon_id":{"type":"string","format":"uuid","title":"Hackathon Id"},"hackathon_name":{"type":"string","title":"Hackathon Name"},"deadline_type":{"type":"string","title":"Deadline Type","description":"Type of deadline (registration, submission)"},"deadline":{"type":"string","format":"date-time","title":"Deadline"},"days_remaining":{"type":"integer","title":"Days Remaining"}},"type":"object","required":["hackathon_id","hackathon_name","deadline_type","deadline","days_remaining"],"title":"UpcomingDeadline","description":"Upcoming deadline for builder dashboard."},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Verified"}},"type":"object","required":["id","email"],"title":"UserResponse","description":"Current authenticated user info.","example":{"email":"dev@example.com","email_verified":true,"id":"550e8400-e29b-41d4-a716-446655440000","name":"Dev User"}},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"api__schemas__dashboard__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"type":"string","title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","detail","status_code"],"title":"ErrorResponse","description":"Standard error response schema."},"api__schemas__featured_hackathon__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__files__ErrorResponse":{"properties":{"error":{"additionalProperties":true,"type":"object","title":"Error","description":"Error details"}},"type":"object","required":["error"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error details object","example":{"error":{"message":"File size exceeds maximum allowed size of 10.0MB","path":"/api/v1/teams/team-123/logo","status_code":400}}},"api__schemas__hackathon__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error type/message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__hackathon_theme__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__invitation__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error type/message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__judging__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__prize__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error type/message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__rubric__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__submission__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__submission__FileUploadResponse":{"properties":{"file_id":{"type":"string","title":"File Id"},"file_name":{"type":"string","title":"File Name"},"file_url":{"type":"string","title":"File Url"},"file_type":{"type":"string","title":"File Type"},"file_size":{"type":"integer","title":"File Size"},"uploaded_at":{"type":"string","format":"date-time","title":"Uploaded At"}},"type":"object","required":["file_id","file_name","file_url","file_type","file_size","uploaded_at"],"title":"FileUploadResponse","description":"Response schema for file upload.\n\nAttributes:\n    file_id: ZeroDB file ID\n    file_name: Name of the uploaded file\n    file_url: URL to access the file\n    file_type: MIME type\n    file_size: Size in bytes\n    uploaded_at: Upload timestamp"},"api__schemas__teams__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error message\n    detail: Additional error details\n    status_code: HTTP status code"},"api__schemas__track__ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"status_code":{"type":"integer","title":"Status Code"}},"type":"object","required":["error","status_code"],"title":"ErrorResponse","description":"Standard error response schema.\n\nAttributes:\n    error: Error type/message\n    detail: Additional error details\n    status_code: HTTP status code"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}