{"openapi":"3.1.0","info":{"title":"e-MSS Platform API","description":"eMotorsport Series Brasil — Backend API com orquestração AMS2","version":"1.1.1"},"paths":{"/auth/google":{"get":{"tags":["Auth"],"summary":"Google Authorize","description":"Etapa 1 do fluxo PKCE:\n- Gera code_verifier (segredo local) e code_challenge (hash público).\n- Armazena o verifier em cookie HttpOnly temporário (5 min).\n- Redireciona ao Supabase com o challenge, sem expor o verifier.","operationId":"google_authorize_auth_google_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/callback":{"get":{"tags":["Auth"],"summary":"Auth Callback","description":"Etapa 2 do fluxo PKCE:\n1. Recebe o code de autorização do Supabase (nunca tokens diretamente).\n2. Recupera o code_verifier do cookie HttpOnly.\n3. Troca code + verifier por tokens via API REST do Supabase.\n4. Grava access_token e refresh_token em cookies HttpOnly.\n5. Redireciona para o frontend — sem tokens na URL.","operationId":"auth_callback_auth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"next","in":"query","required":false,"schema":{"type":"string","default":"/auth/callback","title":"Next"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/signout":{"post":{"tags":["Auth"],"summary":"Signout","description":"Limpa a sessão através dos cookies.","operationId":"signout_auth_signout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/refresh":{"post":{"tags":["Auth"],"summary":"Refresh Session","description":"Renova a sessão usando o sb-refresh-token.\nUsado pelo frontend quando recebe um 401.","operationId":"refresh_session_auth_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/session":{"get":{"tags":["Auth"],"summary":"Get Session Info","description":"Diagnóstico: Retorna informações sobre os cookies de sessão presentes (requer auth).","operationId":"get_session_info_auth_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/sync-profile":{"post":{"tags":["Auth"],"summary":"Sync Profile","description":"Sincronização manual (legado/fallback).","operationId":"sync_profile_auth_sync_profile_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/discord":{"get":{"tags":["Auth"],"summary":"Discord Authorize","description":"Redireciona diretamente para a autorização do Discord.","operationId":"discord_authorize_auth_discord_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["Auth"],"summary":"Discord Unlink","operationId":"discord_unlink_auth_discord_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/discord/callback":{"get":{"tags":["Auth"],"summary":"Discord Callback","description":"Troca o code por token, busca o perfil Discord e vincula ao usuário e-MSS.","operationId":"discord_callback_auth_discord_callback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/steam":{"get":{"tags":["Auth"],"summary":"Steam Authorize","operationId":"steam_authorize_auth_steam_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["Auth"],"summary":"Steam Unlink","operationId":"steam_unlink_auth_steam_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/steam/callback":{"get":{"tags":["Auth"],"summary":"Steam Callback","operationId":"steam_callback_auth_steam_callback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/xbox":{"post":{"tags":["Auth"],"summary":"Xbox Link","description":"Valida a Gamertag informada via OpenXBL (api.xbl.io) e vincula ao perfil do usuário.","operationId":"xbox_link_auth_xbox_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XboxLinkSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["Auth"],"summary":"Xbox Unlink","description":"Desvincula a conta Xbox do perfil do piloto.","operationId":"xbox_unlink_auth_xbox_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/xbox/link":{"post":{"tags":["Auth"],"summary":"Xbox Link","description":"Valida a Gamertag informada via OpenXBL (api.xbl.io) e vincula ao perfil do usuário.","operationId":"xbox_link_auth_xbox_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XboxLinkSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/api-keys":{"get":{"tags":["Auth"],"summary":"Listar Api Keys","operationId":"listar_api_keys_auth_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Auth"],"summary":"Gerar Api Key","description":"Gera uma nova API Key para o usuário (requer assinatura paga).","operationId":"gerar_api_key_auth_api_keys_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/api-keys/{key_id}":{"delete":{"tags":["Auth"],"summary":"Revogar Api Key","operationId":"revogar_api_key_auth_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/me":{"get":{"tags":["Users"],"summary":"Get Me","description":"Perfil completo do usuário autenticado.","operationId":"get_me_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["Users"],"summary":"Update Me","operationId":"update_me_users_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/users/me/hard-delete":{"post":{"tags":["Users"],"summary":"Hard Delete Me","description":"Exclui a conta permanentemente (Right to Erasure/Anonimização).","operationId":"hard_delete_me_users_me_hard_delete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/users/{identifier}/history":{"get":{"tags":["Users"],"summary":"Get User History","description":"Histórico de sessões (me ou por username).","operationId":"get_user_history_users__identifier__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","title":"Identifier"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}},{"name":"category_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{identifier}/rating-history":{"get":{"tags":["Users"],"summary":"Get Rating History","description":"Dados históricos de eRS para geração de gráfico (me ou por username).","operationId":"get_rating_history_users__identifier__rating_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","title":"Identifier"}},{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}},{"name":"category_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Slug"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/{identifier}/stats":{"get":{"tags":["Users"],"summary":"Get User Stats","description":"Estatísticas por jogo/categoria (me ou por username).","operationId":"get_user_stats_users__identifier__stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","title":"Identifier"}},{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}},{"name":"category_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/search":{"get":{"tags":["Users"],"summary":"Buscar Usuarios","description":"Busca pilotos por nome de exibição ou username (opcionalmente filtrando por role).","operationId":"buscar_usuarios_users_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/stewards":{"get":{"tags":["Users"],"summary":"Listar Stewards Homologados","description":"Lista todos os usuários que possuem cargo de comissário homologado.","operationId":"listar_stewards_homologados_users_stewards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/users/{username}/public":{"get":{"tags":["Users"],"summary":"Get Public Profile","description":"Perfil público de qualquer piloto (sem auth).","operationId":"get_public_profile_users__username__public_get","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/":{"post":{"tags":["Teams"],"summary":"Criar Equipe","operationId":"criar_equipe_teams__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Teams"],"summary":"Listar Equipes","operationId":"listar_equipes_teams__get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/invitations/me":{"get":{"tags":["Teams"],"summary":"Listar Meus Convites","description":"Convites/solicitações do piloto autenticado.","operationId":"listar_meus_convites_teams_invitations_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/teams/invitations/{invitation_id}/accept":{"post":{"tags":["Teams"],"summary":"Aceitar Convite","operationId":"aceitar_convite_teams_invitations__invitation_id__accept_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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/invitations/{invitation_id}/reject":{"post":{"tags":["Teams"],"summary":"Rejeitar Convite","description":"Rejeita um convite (pelo piloto) ou uma solicitação (pela equipe).","operationId":"rejeitar_convite_teams_invitations__invitation_id__reject_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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/invitations/{invitation_id}/cancel":{"post":{"tags":["Teams"],"summary":"Cancelar Convite","description":"Cancela um convite (pela equipe) ou uma solicitação (pelo piloto).","operationId":"cancelar_convite_teams_invitations__invitation_id__cancel_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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}":{"get":{"tags":["Teams"],"summary":"Detalhe Equipe","operationId":"detalhe_equipe_teams__team_id__get","parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Teams"],"summary":"Atualizar Equipe","operationId":"atualizar_equipe_teams__team_id__patch","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/TeamUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/invitations":{"post":{"tags":["Teams"],"summary":"Convidar","operationId":"convidar_teams__team_id__invitations_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/InviteSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/invitations/pending":{"get":{"tags":["Teams"],"summary":"Listar Convites Equipe","operationId":"listar_convites_equipe_teams__team_id__invitations_pending_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/leave":{"post":{"tags":["Teams"],"summary":"Sair Da Equipe","description":"O próprio piloto decide sair da equipe.","operationId":"sair_da_equipe_teams__team_id__leave_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/members/{member_id}":{"delete":{"tags":["Teams"],"summary":"Remover Membro","description":"Líder ou Manager expulsa um membro.","operationId":"remover_membro_teams__team_id__members__member_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","title":"Member Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/members/{member_id}/toggle-promoter":{"post":{"tags":["Teams"],"summary":"Alternar Promotor","description":"Líder alterna a flag is_promoter de um membro (concede/revoga permissão de organizar eventos internos).","operationId":"alternar_promotor_teams__team_id__members__member_id__toggle_promoter_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","title":"Member Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/internal-events":{"get":{"tags":["Team Internal Events"],"summary":"Listar Eventos Internos","description":"Lista todos os eventos internos da equipe (apenas membros ativos).","operationId":"listar_eventos_internos_teams__team_id__internal_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Team Internal Events"],"summary":"Criar Evento Interno","description":"Cria um novo evento interno de equipe.","operationId":"criar_evento_interno_teams__team_id__internal_events_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/InternalEventCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/internal-events/{event_id}":{"get":{"tags":["Team Internal Events"],"summary":"Detalhe Evento Interno","description":"Retorna o detalhe completo de um evento interno com corridas, resultados e standings.","operationId":"detalhe_evento_interno_teams__team_id__internal_events__event_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Team Internal Events"],"summary":"Editar Evento Interno","description":"Atualiza informações de um evento interno.","operationId":"editar_evento_interno_teams__team_id__internal_events__event_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalEventUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/internal-events/{event_id}/toggle-status":{"post":{"tags":["Team Internal Events"],"summary":"Alternar Status Evento","description":"Alterna o status do evento entre 'open' e 'closed'.","operationId":"alternar_status_evento_teams__team_id__internal_events__event_id__toggle_status_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/internal-events/{event_id}/races":{"post":{"tags":["Team Internal Events"],"summary":"Adicionar Corrida Interna","description":"Adiciona uma corrida a um evento interno.","operationId":"adicionar_corrida_interna_teams__team_id__internal_events__event_id__races_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalRaceCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/internal-events/{event_id}/races/{race_id}":{"patch":{"tags":["Team Internal Events"],"summary":"Editar Corrida Interna","description":"Edita metadados de uma corrida interna.","operationId":"editar_corrida_interna_teams__team_id__internal_events__event_id__races__race_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalRaceUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/internal-events/{event_id}/races/{race_id}/results":{"post":{"tags":["Team Internal Events"],"summary":"Lancar Resultados Internos","description":"Lança (ou substitui) os resultados de uma corrida interna.\nCalcula os pontos automaticamente baseado na scoring_table do evento.\nNÃO dispara rating engine, Discord, ou qualquer efeito colateral externo.","operationId":"lancar_resultados_internos_teams__team_id__internal_events__event_id__races__race_id__results_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalResultsLaunchSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/internal-standings":{"get":{"tags":["Team Internal Events"],"summary":"Ranking Interno Equipe","description":"Ranking geral interno da equipe — soma de pontos de TODOS os eventos abertos e fechados.","operationId":"ranking_interno_equipe_teams__team_id__internal_standings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/check-eligibility":{"get":{"tags":["Leagues"],"summary":"Check Eligibility","description":"Verifica se o usuário pode criar uma nova liga.","operationId":"check_eligibility_leagues_check_eligibility_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/leagues/check-slug/{slug}":{"get":{"tags":["Leagues"],"summary":"Check Slug Availability","description":"Verifica se um slug está disponível para ligas ativas.","operationId":"check_slug_availability_leagues_check_slug__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/me/followed":{"get":{"tags":["Leagues"],"summary":"Listar Ligas Seguidas","description":"Lista as ligas ativas que o usuário atual segue.","operationId":"listar_ligas_seguidas_leagues_me_followed_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/leagues/slug/{slug}":{"get":{"tags":["Leagues"],"summary":"Detalhe Liga Por Slug","description":"Busca uma liga pelo slug. Retorna 404 se inativa (soft-deleted).","operationId":"detalhe_liga_por_slug_leagues_slug__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/":{"get":{"tags":["Leagues"],"summary":"Listar Ligas","description":"Lista ligas ativas com contagem de eventos.","operationId":"listar_ligas_leagues__get","parameters":[{"name":"public_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Public Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Leagues"],"summary":"Criar Liga","operationId":"criar_liga_leagues__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeagueCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/{league_id}":{"get":{"tags":["Leagues"],"summary":"Detalhe Liga","description":"Busca uma liga pelo ID. Retorna 404 se inativa.","operationId":"detalhe_liga_leagues__league_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Leagues"],"summary":"Atualizar Liga","description":"Atualiza as configurações de uma liga. Permite owner ou admin da plataforma.","operationId":"atualizar_liga_leagues__league_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeagueUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Leagues"],"summary":"Excluir Liga","description":"Realiza o 'soft delete' da liga, mantendo dados históricos.","operationId":"excluir_liga_leagues__league_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/{league_id}/follow":{"post":{"tags":["Leagues"],"summary":"Follow League","description":"Permite que o usuário siga uma liga ativa.","operationId":"follow_league_leagues__league_id__follow_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Leagues"],"summary":"Unfollow League","description":"Permite que o usuário pare de seguir uma liga.","operationId":"unfollow_league_leagues__league_id__follow_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/{league_id}/seasons":{"post":{"tags":["Leagues"],"summary":"Criar Temporada","operationId":"criar_temporada_leagues__league_id__seasons_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeasonCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/{league_id}/stewards":{"get":{"tags":["Leagues"],"summary":"Listar Stewards","description":"Lista stewards com dados de usuário em uma única query.","operationId":"listar_stewards_leagues__league_id__stewards_get","parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Leagues"],"summary":"Designar Steward","description":"Designa um steward para a liga. Ignora duplicatas silenciosamente.","operationId":"designar_steward_leagues__league_id__stewards_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}},{"name":"pilot_id","in":"query","required":true,"schema":{"type":"string","title":"Pilot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/{league_id}/stewards/{steward_user_id}":{"delete":{"tags":["Leagues"],"summary":"Remover Steward","description":"Remove (soft-deactivate) um steward da liga.","operationId":"remover_steward_leagues__league_id__stewards__steward_user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}},{"name":"steward_user_id","in":"path","required":true,"schema":{"type":"string","title":"Steward User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/{league_id}/co-organizers":{"get":{"tags":["Leagues"],"summary":"Listar Co Organizadores","description":"Lista co-organizadores ativos de uma liga.","operationId":"listar_co_organizadores_leagues__league_id__co_organizers_get","parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Leagues"],"summary":"Adicionar Co Organizador","description":"Adiciona um co-organizador à liga. Apenas o dono pode fazer isso.","operationId":"adicionar_co_organizador_leagues__league_id__co_organizers_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}},{"name":"target_user_id","in":"query","required":true,"schema":{"type":"string","title":"Target User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/leagues/{league_id}/co-organizers/{target_user_id}":{"delete":{"tags":["Leagues"],"summary":"Remover Co Organizador","description":"Remove um co-organizador. Apenas o dono ou o próprio co-organizador pode remover.","operationId":"remover_co_organizador_leagues__league_id__co_organizers__target_user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}},{"name":"target_user_id","in":"path","required":true,"schema":{"type":"string","title":"Target User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/me/upcoming":{"get":{"tags":["Events"],"summary":"Upcoming Feed","description":"Retorna um feed curado de eventos para o Console do Piloto.","operationId":"upcoming_feed_events_me_upcoming_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/catalog/cars":{"get":{"tags":["Events"],"summary":"Listar Carros Catalog","description":"Lista carros disponíveis para uso no formulário de evento (não requer admin).","operationId":"listar_carros_catalog_events_catalog_cars_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}},{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/catalog/circuits":{"get":{"tags":["Events"],"summary":"Listar Circuitos Catalog","description":"Lista circuitos disponíveis para uso no formulário de evento (não requer admin).\n\nUsa 3 queries planas em vez de sub-relações aninhadas para evitar o limite de\n1000 linhas do PostgREST em nested selects.","operationId":"listar_circuitos_catalog_events_catalog_circuits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/leagues/{league_id}":{"post":{"tags":["Events"],"summary":"Criar Evento","operationId":"criar_evento_events_leagues__league_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/publish":{"post":{"tags":["Events"],"summary":"Publicar Evento","description":"Publica um evento (draft → published). Requer estrutura mínima configurada.","operationId":"publicar_evento_events__event_id__publish_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/generate-splits":{"post":{"tags":["Events"],"summary":"Gerar Splits Evento","description":"Gera as divisões (splits) para todas as sessões do evento, \nbaseado nos inscritos atuais e seus respectivos eRS.","operationId":"gerar_splits_evento_events__event_id__generate_splits_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/days":{"post":{"tags":["Events"],"summary":"Adicionar Dia","operationId":"adicionar_dia_events__event_id__days_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDaySchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/days/{day_id}/races":{"post":{"tags":["Events"],"summary":"Adicionar Corrida","operationId":"adicionar_corrida_events__event_id__days__day_id__races_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"day_id","in":"path","required":true,"schema":{"type":"string","title":"Day Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RaceSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/days/{day_id}/races/{race_id}/sessions":{"post":{"tags":["Events"],"summary":"Adicionar Sessao","operationId":"adicionar_sessao_events__event_id__days__day_id__races__race_id__sessions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"day_id","in":"path","required":true,"schema":{"type":"string","title":"Day Id"}},{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/":{"get":{"tags":["Events"],"summary":"Listar Eventos Global","description":"Lista eventos da plataforma com filtros.","operationId":"listar_eventos_global_events__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}},{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Id"}},{"name":"license_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Id"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"published","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/leagues/{league_id}/list":{"get":{"tags":["Events"],"summary":"Listar Eventos Liga","description":"Lista eventos de uma liga (exceto drafts, visíveis ao público).","operationId":"listar_eventos_liga_events_leagues__league_id__list_get","parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}":{"get":{"tags":["Events"],"summary":"Obter Evento","description":"Retorna detalhes de um evento específico.","operationId":"obter_evento_events__event_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Events"],"summary":"Atualizar Evento","description":"Atualiza as informações básicas de um evento.","operationId":"atualizar_evento_events__event_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__events__EventUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Events"],"summary":"Excluir Evento","description":"Exclui um evento e todas as suas dependências (inscrições, dias, corridas, sessões).","operationId":"excluir_evento_events__event_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/register":{"post":{"tags":["Events"],"summary":"Registrar No Evento","description":"Inscreve o piloto logado no evento.","operationId":"registrar_no_evento_events__event_id__register_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/EventRegisterSchema"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Events"],"summary":"Cancelar Inscricao Evento","description":"Cancela a inscrição do piloto logado no evento.","operationId":"cancelar_inscricao_evento_events__event_id__register_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/announcements":{"post":{"tags":["Events"],"summary":"Send Event Announcement","description":"Envia um aviso em forma de notificação para todos os pilotos inscritos no evento.\nAcesso restrito ao organizador, co-organizador ou administrador.","operationId":"send_event_announcement_events__event_id__announcements_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnouncementSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/registrations":{"get":{"tags":["Events"],"summary":"Listar Inscricoes Evento","description":"Lista todos os pilotos inscritos em um evento.","operationId":"listar_inscricoes_evento_events__event_id__registrations_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"include_reserves","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Reserves"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/structure":{"put":{"tags":["Events"],"summary":"Sync Estrutura Evento","description":"Sincroniza a estrutura completa (Dias e Corridas) de um evento.","operationId":"sync_estrutura_evento_events__event_id__structure_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventStructureSyncSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Events"],"summary":"Obter Estrutura Evento","description":"Retorna a estrutura completa (dias, corridas, sessões) de um evento de forma otimizada (batch).","operationId":"obter_estrutura_evento_events__event_id__structure_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/stewards":{"get":{"tags":["Events"],"summary":"Listar Stewards Evento","description":"Retorna a lista de stewards designados para o evento. Usa JOIN para evitar N+1.","operationId":"listar_stewards_evento_events__event_id__stewards_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Events"],"summary":"Designar Steward Evento","operationId":"designar_steward_evento_events__event_id__stewards_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddStewardSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/stewards/{user_id}":{"delete":{"tags":["Events"],"summary":"Remover Steward Evento","operationId":"remover_steward_evento_events__event_id__stewards__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/standings":{"get":{"tags":["Events"],"summary":"Get Event Standings","description":"Retorna a classificação (standings) do evento agregada com pontos customizados e penalidades.","operationId":"get_event_standings_events__event_id__standings_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/upload":{"post":{"tags":["Events"],"summary":"Upload Event Image","description":"Realiza o upload de uma imagem para o bucket 'events'.\nUsa a service_role do backend para bypassar RLS.","operationId":"upload_event_image_events_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder","in":"query","required":false,"schema":{"type":"string","default":"banners","title":"Folder"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_event_image_events_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/teams":{"post":{"tags":["Events"],"summary":"Criar Equipe Evento","description":"Cria uma equipe fictícia para o evento (apenas organizadores).","operationId":"criar_equipe_evento_events__event_id__teams_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventTeamSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Events"],"summary":"Listar Equipes Evento","description":"Lista as equipes fictícias de um evento.","operationId":"listar_equipes_evento_events__event_id__teams_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/teams/{team_id}":{"patch":{"tags":["Events"],"summary":"Atualizar Equipe Evento","description":"Atualiza uma equipe fictícia (apenas organizadores).","operationId":"atualizar_equipe_evento_events__event_id__teams__team_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventTeamSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Events"],"summary":"Remover Equipe Evento","description":"Remove uma equipe fictícia (apenas organizadores).","operationId":"remover_equipe_evento_events__event_id__teams__team_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/registrations/{pilot_id}":{"delete":{"tags":["Events"],"summary":"Remover Inscricao Piloto Admin","description":"Remove a inscrição de um piloto específico do evento (apenas organizadores/admin).","operationId":"remover_inscricao_piloto_admin_events__event_id__registrations__pilot_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"pilot_id","in":"path","required":true,"schema":{"type":"string","title":"Pilot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/registrations/{registration_id}/activate-reserve":{"post":{"tags":["Events"],"summary":"Ativar Piloto Reserva","description":"Ativa um piloto reserva, demovendo opcionalmente um piloto ativo para a lista de reserva.","operationId":"ativar_piloto_reserva_events__event_id__registrations__registration_id__activate_reserve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"registration_id","in":"path","required":true,"schema":{"type":"string","title":"Registration Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ActivateReserveSchema"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/registrations/{registration_id}":{"patch":{"tags":["Events"],"summary":"Atualizar Inscricao Evento Admin","description":"Atualiza dados de uma inscrição, como equipe fictícia ou carro (apenas organizadores).","operationId":"atualizar_inscricao_evento_admin_events__event_id__registrations__registration_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"registration_id","in":"path","required":true,"schema":{"type":"string","title":"Registration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/servers":{"get":{"tags":["Events"],"summary":"Listar Servidores Evento","description":"Lista os servidores cadastrados e vinculados a este evento.","operationId":"listar_servidores_evento_events__event_id__servers_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/cars":{"get":{"tags":["Events"],"summary":"Listar Carros Evento","description":"Lista os carros permitidos no evento.","operationId":"listar_carros_evento_events__event_id__cars_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Events"],"summary":"Cadastrar Carro Evento","description":"Adiciona um carro permitido ao evento.","operationId":"cadastrar_carro_evento_events__event_id__cars_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCarCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/cars/{car_id}":{"delete":{"tags":["Events"],"summary":"Remover Carro Evento","description":"Remove um carro permitido do evento.","operationId":"remover_carro_evento_events__event_id__cars__car_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"car_id","in":"path","required":true,"schema":{"type":"string","title":"Car Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/categories":{"get":{"tags":["Events"],"summary":"Listar Categorias Evento","description":"Lista as categorias virtuais do evento com contagem de inscrições ativas.","operationId":"listar_categorias_evento_events__event_id__categories_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Events"],"summary":"Cadastrar Categoria Evento","description":"Cria uma categoria virtual para o evento.","operationId":"cadastrar_categoria_evento_events__event_id__categories_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCategoryCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/categories/{category_id}":{"patch":{"tags":["Events"],"summary":"Atualizar Categoria Evento","description":"Atualiza uma categoria virtual do evento.","operationId":"atualizar_categoria_evento_events__event_id__categories__category_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCategoryUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Events"],"summary":"Remover Categoria Evento","description":"Remove uma categoria virtual do evento.","operationId":"remover_categoria_evento_events__event_id__categories__category_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/catalog/ams2/tracks":{"get":{"tags":["Events"],"summary":"Get Ams2 Tracks","description":"Retorna a lista de pistas do catálogo do AMS2.","operationId":"get_ams2_tracks_events_catalog_ams2_tracks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/events/catalog/ams2/classes":{"get":{"tags":["Events"],"summary":"Get Ams2 Classes","description":"Retorna a lista de classes de veículos do catálogo do AMS2.","operationId":"get_ams2_classes_events_catalog_ams2_classes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/events/catalog/ams2/vehicles":{"get":{"tags":["Events"],"summary":"Get Ams2 Vehicles","description":"Retorna a lista de veículos do catálogo do AMS2, opcionalmente filtrada por classe.","operationId":"get_ams2_vehicles_events_catalog_ams2_vehicles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"class_server_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Class Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/ams2-config":{"get":{"tags":["Events"],"summary":"Get Ams2 Config","description":"Retorna a configuração AMS2 vinculada ao evento.","operationId":"get_ams2_config_events__event_id__ams2_config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Events"],"summary":"Upsert Ams2 Config","description":"Cria ou atualiza a configuração AMS2 de um evento.","operationId":"upsert_ams2_config_events__event_id__ams2_config_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ams2EventConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/ams2-races":{"get":{"tags":["Events"],"summary":"Get Ams2 Races","description":"Lista todas as corridas configuradas para um evento AMS2, ordenadas por race_number.","operationId":"get_ams2_races_events__event_id__ams2_races_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Events"],"summary":"Create Ams2 Race","description":"Cria uma nova corrida para o evento AMS2.","operationId":"create_ams2_race_events__event_id__ams2_races_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/ams2-races/{race_id}":{"put":{"tags":["Events"],"summary":"Update Ams2 Race","description":"Atualiza uma corrida AMS2 existente.","operationId":"update_ams2_race_events__event_id__ams2_races__race_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Events"],"summary":"Delete Ams2 Race","description":"Remove uma corrida AMS2 do evento.","operationId":"delete_ams2_race_events__event_id__ams2_races__race_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/ams2-export/whitelist":{"get":{"tags":["Events"],"summary":"Get Ams2 Whitelist","description":"Retorna a lista de steam_id de todos os pilotos inscritos no evento formatada como whitelist.cfg.","operationId":"get_ams2_whitelist_events__event_id__ams2_export_whitelist_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/forza-config":{"get":{"tags":["Events"],"summary":"Get Forza Config","description":"Retorna a configuração do Forza vinculada ao evento.","operationId":"get_forza_config_events__event_id__forza_config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Events"],"summary":"Upsert Forza Config","description":"Cria ou atualiza a configuração do Forza para um evento.","operationId":"upsert_forza_config_events__event_id__forza_config_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForzaEventConfigSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/forza-races":{"get":{"tags":["Events"],"summary":"Get Forza Races","description":"Lista todas as corridas configuradas para um evento do Forza.","operationId":"get_forza_races_events__event_id__forza_races_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Events"],"summary":"Create Forza Race","description":"Cria uma nova corrida para o evento do Forza.","operationId":"create_forza_race_events__event_id__forza_races_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/events/{event_id}/forza-races/{race_id}":{"put":{"tags":["Events"],"summary":"Update Forza Race","description":"Atualiza uma corrida do Forza existente.","operationId":"update_forza_race_events__event_id__forza_races__race_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Events"],"summary":"Delete Forza Race","description":"Remove uma corrida do Forza do evento.","operationId":"delete_forza_race_events__event_id__forza_races__race_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"race_id","in":"path","required":true,"schema":{"type":"string","title":"Race Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sessions/{session_id}/entries":{"post":{"tags":["Sessions"],"summary":"Inscrever Piloto","description":"Inscreve o próprio piloto (ou outro, se organizer) em uma sessão.","operationId":"inscrever_piloto_sessions__session_id__entries_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntrySchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Sessions"],"summary":"Listar Inscritos","description":"Lista pilotos inscritos em uma sessão com seus splits.","operationId":"listar_inscritos_sessions__session_id__entries_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sessions/{session_id}/entries/{pilot_id}":{"delete":{"tags":["Sessions"],"summary":"Cancelar Inscricao","description":"Cancela inscrição. Apenas o próprio piloto ou organizer.","operationId":"cancelar_inscricao_sessions__session_id__entries__pilot_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"pilot_id","in":"path","required":true,"schema":{"type":"string","title":"Pilot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sessions/{session_id}/splits":{"post":{"tags":["Sessions"],"summary":"Criar Split","description":"Cria um split para a sessão (organizer only). Bloqueia se atingir limite global.","operationId":"criar_split_sessions__session_id__splits_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SplitCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Sessions"],"summary":"Listar Splits","description":"Lista os splits configurados para uma sessão.","operationId":"listar_splits_sessions__session_id__splits_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sessions/{session_id}/entries/{pilot_id}/split":{"patch":{"tags":["Sessions"],"summary":"Mover Para Split","description":"Move um piloto para um split diferente (organizer only).","operationId":"mover_para_split_sessions__session_id__entries__pilot_id__split_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"pilot_id","in":"path","required":true,"schema":{"type":"string","title":"Pilot Id"}},{"name":"split_id","in":"query","required":true,"schema":{"type":"string","title":"Split Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/results/{session_id}/preview":{"post":{"tags":["Results"],"summary":"Preview Resultado","description":"Calcula impacto de eRS SEM salvar. Usa RPC preview_resultado (sem lock).","operationId":"preview_resultado_results__session_id__preview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultsPayloadSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/results/{session_id}":{"post":{"tags":["Results"],"summary":"Lancar Resultado","description":"Lança resultados via RPC atômico com fila garantida.\npg_advisory_xact_lock + SELECT FOR UPDATE previnem race conditions.","operationId":"lancar_resultado_results__session_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultsPayloadSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Results"],"summary":"Get Resultados","description":"Resultados já lançados de uma sessão (público).","operationId":"get_resultados_results__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/results/server-leaderboard":{"get":{"tags":["Results"],"summary":"Get Server Leaderboard","description":"Leaderboard completo das voltas importadas diretamente do servidor (session_id IS NULL).\nRetorna TODOS os pilotos (registrados ou não) e TODAS as pistas/sessões.\nA filtragem é feita no frontend.","operationId":"get_server_leaderboard_results_server_leaderboard_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":2000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/results/leaderboard":{"get":{"tags":["Results"],"summary":"Get Leaderboard","description":"Leaderboard de melhor volta por piloto × pista × classe.\n\nRegras:\n- Somente pilotos cadastrados na plataforma (pilot_id IS NOT NULL).\n- Exibe a melhor volta de cada piloto no filtro selecionado (ou a melhor volta absoluta se 'Todas as Sessões').\n- Suporta busca flexível de etapa: 'practice' (Treino), 'qualify' (Quali), 'race' (Corrida).\n- Ordenação: is_best_lap_valid DESC, best_lap_ms ASC.","operationId":"get_leaderboard_results_leaderboard_get","parameters":[{"name":"track_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Track Id"}},{"name":"vehicle_class_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Class Id"}},{"name":"stage_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage Key"}},{"name":"steam_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Steam Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/results/ranking/global":{"get":{"tags":["Results"],"summary":"Get Global Ranking","description":"Ranking global evoluído: por Jogo e Categoria.","operationId":"get_global_ranking_results_ranking_global_get","parameters":[{"name":"game_id","in":"query","required":true,"schema":{"type":"string","title":"Game Id"}},{"name":"category_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Slug"}},{"name":"license_tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Tier"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/results/{session_id}/laps":{"post":{"tags":["Results"],"summary":"Import Laps","description":"Importa voltas individuais do sms_stats_data.json para a tabela session_laps.\n\nIdempotente: re-enviar o mesmo arquivo é seguro.\nChave de deduplicação: (session_id, history_index, stage_key, steam_id, lap_number).\nRetorna { inserted, duplicates, total, summary }.","operationId":"import_laps_results__session_id__laps_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportLapsPayload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Results"],"summary":"Get Session Laps","description":"Lista voltas de uma sessão, com filtros opcionais por steam_id e stage.\nPúblico (sem autenticação necessária).","operationId":"get_session_laps_results__session_id__laps_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"steam_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Steam Id"}},{"name":"stage_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/incidents/":{"post":{"tags":["Incidents"],"summary":"Abrir Incidente","operationId":"abrir_incidente_incidents__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentCreateSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Incidents"],"summary":"Listar Incidentes","operationId":"listar_incidentes_incidents__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"league_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"League Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/incidents/my-assignments":{"get":{"tags":["Incidents"],"summary":"Incidentes Atribuidos","description":"Retorna incidentes de todos os eventos onde o usuário é comissário ativo.","operationId":"incidentes_atribuidos_incidents_my_assignments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/incidents/{incident_id}":{"get":{"tags":["Incidents"],"summary":"Detalhe Incidente","operationId":"detalhe_incidente_incidents__incident_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/incidents/{incident_id}/votes":{"post":{"tags":["Incidents"],"summary":"Votar","operationId":"votar_incidents__incident_id__votes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoteSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/incidents/{incident_id}/generate-report":{"post":{"tags":["Incidents"],"summary":"Gerar Relatorio","description":"Gera (ou regenera) o relatório PDF RIS para um incidente já encerrado.","operationId":"gerar_relatorio_incidents__incident_id__generate_report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/incidents/{incident_id}/consolidate":{"post":{"tags":["Incidents"],"summary":"Consolidar Manualmente","description":"Força a consolidação do veredito se o quórum de stewards ativos for atingido.","operationId":"consolidar_manualmente_incidents__incident_id__consolidate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/incidents/{incident_id}/appeals":{"post":{"tags":["Incidents"],"summary":"Abrir Recurso","operationId":"abrir_recurso_incidents__incident_id__appeals_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppealSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/incidents/{incident_id}/defense":{"put":{"tags":["Incidents"],"summary":"Submeter Defesa","description":"Permite que o piloto reportado submeta sua defesa dentro do prazo.","operationId":"submeter_defesa_incidents__incident_id__defense_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefenseSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tokens/balance":{"get":{"tags":["Tokens"],"summary":"Saldo","operationId":"saldo_tokens_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/tokens/history":{"get":{"tags":["Tokens"],"summary":"Historico","operationId":"historico_tokens_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tokens/deposit":{"post":{"tags":["Tokens"],"summary":"Iniciar Deposito","operationId":"iniciar_deposito_tokens_deposit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/licenses/tiers":{"get":{"tags":["Licenses"],"summary":"Listar Tiers","description":"Lista todos os tiers de licença disponíveis (público).","operationId":"listar_tiers_licenses_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/licenses/classes":{"get":{"tags":["Licenses"],"summary":"Listar Classes","description":"Lista todas as classes de licença (público).","operationId":"listar_classes_licenses_classes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/licenses/me":{"get":{"tags":["Licenses"],"summary":"Minha Licenca","description":"Retorna carteira e classe atual do piloto autenticado.","operationId":"minha_licenca_licenses_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/licenses/{pilot_id}":{"get":{"tags":["Licenses"],"summary":"Licenca Piloto","description":"Licença pública de um piloto específico.","operationId":"licenca_piloto_licenses__pilot_id__get","parameters":[{"name":"pilot_id","in":"path","required":true,"schema":{"type":"string","title":"Pilot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/splits/{session_id}":{"get":{"tags":["Splits"],"summary":"Listar Splits","description":"Lista todos os splits de uma sessão com contagem de pilotos.","operationId":"listar_splits_splits__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/splits/{session_id}/{split_id}/entries":{"get":{"tags":["Splits"],"summary":"Pilotos Do Split","description":"Lista pilotos inscritos em um split específico.","operationId":"pilotos_do_split_splits__session_id___split_id__entries_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"split_id","in":"path","required":true,"schema":{"type":"string","title":"Split Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users":{"get":{"tags":["Admin"],"summary":"Listar Usuarios","operationId":"listar_usuarios_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/ban":{"patch":{"tags":["Admin"],"summary":"Banir Usuario","operationId":"banir_usuario_admin_users__user_id__ban_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/unban":{"patch":{"tags":["Admin"],"summary":"Desbanir Usuario","operationId":"desbanir_usuario_admin_users__user_id__unban_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/ers-adjust":{"post":{"tags":["Admin"],"summary":"Ajustar Ers","description":"Ajuste manual de eRS com log de auditoria.","operationId":"ajustar_ers_admin_ers_adjust_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErsAdjustSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/circuits":{"get":{"tags":["Admin"],"summary":"Listar Pistas","operationId":"listar_pistas_admin_circuits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Admin"],"summary":"Criar Pista","operationId":"criar_pista_admin_circuits_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CircuitSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/circuits/{id}":{"patch":{"tags":["Admin"],"summary":"Editar Pista","operationId":"editar_pista_admin_circuits__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CircuitSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/circuit-layouts":{"post":{"tags":["Admin"],"summary":"Criar Layout Pista","operationId":"criar_layout_pista_admin_circuit_layouts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CircuitLayoutSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/circuit-layouts/{layout_id}":{"patch":{"tags":["Admin"],"summary":"Editar Layout Pista","operationId":"editar_layout_pista_admin_circuit_layouts__layout_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"layout_id","in":"path","required":true,"schema":{"type":"string","title":"Layout Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CircuitLayoutSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Excluir Layout Pista","operationId":"excluir_layout_pista_admin_circuit_layouts__layout_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"layout_id","in":"path","required":true,"schema":{"type":"string","title":"Layout Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cars":{"get":{"tags":["Admin"],"summary":"Listar Carros","description":"Lista TODOS os carros da plataforma sem ser truncado pelo limite de 1000 linhas do PostgREST.","operationId":"listar_carros_admin_cars_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"game_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Criar Carro","operationId":"criar_carro_admin_cars_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/cars/{id}":{"patch":{"tags":["Admin"],"summary":"Editar Carro","operationId":"editar_carro_admin_cars__id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/servers":{"get":{"tags":["Admin"],"summary":"Listar Servidores","operationId":"listar_servidores_admin_servers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Admin"],"summary":"Criar Servidor","operationId":"criar_servidor_admin_servers_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameServerSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/servers/{server_id}":{"patch":{"tags":["Admin"],"summary":"Editar Servidor","operationId":"editar_servidor_admin_servers__server_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameServerSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Excluir Servidor","operationId":"excluir_servidor_admin_servers__server_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/events":{"get":{"tags":["Admin"],"summary":"Listar Todos Eventos","description":"Lista todos os eventos da plataforma (máximo 100 mais recentes).","operationId":"listar_todos_eventos_admin_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/events-schedule":{"get":{"tags":["Admin"],"summary":"Listar Agenda Semanal","description":"Retorna eventos com seus event_days para renderizar a agenda semanal.\nFiltra event_days cujo scheduled_date cai entre week_start e week_end (YYYY-MM-DD).\nInclui banner_url e game_id do evento pai para colorização por jogo.\nExclui eventos em status 'draft' ou 'cancelled'.","operationId":"listar_agenda_semanal_admin_events_schedule_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"week_start","in":"query","required":true,"schema":{"type":"string","title":"Week Start"}},{"name":"week_end","in":"query","required":true,"schema":{"type":"string","title":"Week End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/events/{event_id}":{"patch":{"tags":["Admin"],"summary":"Modificar Evento","operationId":"modificar_evento_admin_events__event_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__admin__EventUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/stats":{"get":{"tags":["Admin"],"summary":"Get Admin Stats","operationId":"get_admin_stats_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/metadata":{"get":{"tags":["Admin"],"summary":"Get Metadata","description":"Retorna metadados (jogos, categorias, license_tiers) para preencher dropdowns.\n\nApenas jogos com is_active=True são retornados. Jogos como Forza Horizon 6\n(is_active=False) são exclusivos do console /fh6 e injetados diretamente\nno front-end naquele contexto.","operationId":"get_metadata_admin_metadata_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/license-tiers":{"get":{"tags":["Admin"],"summary":"Listar License Tiers","description":"Retorna carteiras de habilitação disponíveis.","operationId":"listar_license_tiers_admin_license_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/leagues/health":{"get":{"tags":["Admin"],"summary":"Monitorar Ligas","description":"Retorna métricas de saúde e monitoramento para todas as ligas ativas.\n\nUsa RPC para evitar ambiguidade de FK em league_stewards.\nA tabela possui dois relacionamentos com users (user_id e assigned_by),\no que causava erro 300/500 no PostgREST ao usar o join implícito do supabase-py.","operationId":"monitorar_ligas_admin_leagues_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/mrci-cycles":{"get":{"tags":["Admin"],"summary":"Listar Mrci Cycles","description":"Lista todos os ciclos MRCI ordenados do mais recente para o mais antigo.","operationId":"listar_mrci_cycles_admin_mrci_cycles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Admin"],"summary":"Criar Mrci Cycle","description":"Cria um novo ciclo MRCI de 8 semanas para um jogo/categoria.","operationId":"criar_mrci_cycle_admin_mrci_cycles_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MrciCycleSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/mrci-cycles/{cycle_id}/process":{"post":{"tags":["Admin"],"summary":"Processar Mrci Cycle","description":"Executa a rotina de encerramento do ciclo: recalcula status, cria histórico e reseta contadores.","operationId":"processar_mrci_cycle_admin_mrci_cycles__cycle_id__process_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cycle_id","in":"path","required":true,"schema":{"type":"string","title":"Cycle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/mrci-cycles/{cycle_id}":{"put":{"tags":["Admin"],"summary":"Atualizar Mrci Cycle","description":"Atualiza um ciclo MRCI existente (apenas se não processado).","operationId":"atualizar_mrci_cycle_admin_mrci_cycles__cycle_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cycle_id","in":"path","required":true,"schema":{"type":"string","title":"Cycle Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MrciCycleSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Excluir Mrci Cycle","description":"Remove um ciclo MRCI (apenas se não processado).","operationId":"excluir_mrci_cycle_admin_mrci_cycles__cycle_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cycle_id","in":"path","required":true,"schema":{"type":"string","title":"Cycle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/mrci-cycles/{cycle_id}/activate":{"post":{"tags":["Admin"],"summary":"Ativar Mrci Cycle","description":"Ativa um ciclo MRCI e desativa os outros do mesmo jogo/categoria.","operationId":"ativar_mrci_cycle_admin_mrci_cycles__cycle_id__activate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cycle_id","in":"path","required":true,"schema":{"type":"string","title":"Cycle Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/roles":{"get":{"tags":["Admin"],"summary":"Listar Todas Roles","description":"Retorna todas as roles disponíveis no sistema.","operationId":"listar_todas_roles_admin_roles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/admin/users/{user_id}/roles":{"get":{"tags":["Admin"],"summary":"Listar Roles Usuario","description":"Retorna as roles de um usuário específico.","operationId":"listar_roles_usuario_admin_users__user_id__roles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Atribuir Role Usuario","description":"Atribui uma role a um usuário.","operationId":"atribuir_role_usuario_admin_users__user_id__roles_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRoleAssignSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/roles/{role_id}":{"delete":{"tags":["Admin"],"summary":"Remover Role Usuario","description":"Remove (desativa) uma role de um usuário.","operationId":"remover_role_usuario_admin_users__user_id__roles__role_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"integer","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/chat-reports":{"get":{"tags":["Admin"],"summary":"Listar Reportes Chat","description":"Lista todas as denúncias de chat privado.","operationId":"listar_reportes_chat_admin_chat_reports_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/chat-reports/{report_id}/resolve":{"patch":{"tags":["Admin"],"summary":"Resolver Reporte Chat","description":"Marca uma denúncia de chat como resolvida.","operationId":"resolver_reporte_chat_admin_chat_reports__report_id__resolve_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/chat-reports/{report_id}/dismiss":{"patch":{"tags":["Admin"],"summary":"Rejeitar Reporte Chat","description":"Rejeita/arquiva uma denúncia de chat.","operationId":"rejeitar_reporte_chat_admin_chat_reports__report_id__dismiss_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/discord/sync":{"post":{"tags":["Discord"],"summary":"Manual Sync","description":"Sincroniza manualmente os cargos do usuário logado.","operationId":"manual_sync_discord_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/discord/announce":{"post":{"tags":["Discord"],"summary":"Announce","description":"Envia um anúncio para o servidor Discord.\nApenas administradores podem usar este endpoint.","operationId":"announce_discord_announce_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_announce_discord_announce_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/discord/status":{"get":{"tags":["Discord"],"summary":"Bot Status","description":"Retorna o status de conexão do BOT.","operationId":"bot_status_discord_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/discord/announce-results-image":{"post":{"tags":["Discord"],"summary":"Announce Results Image","operationId":"announce_results_image_discord_announce_results_image_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnounceImagePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/discord/announce-splits-text":{"post":{"tags":["Discord"],"summary":"Announce Splits Text","description":"Envia a composição dos splits como mensagem de texto puro para o canal Discord.","operationId":"announce_splits_text_discord_announce_splits_text_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnounceSplitsPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/evaluations/":{"post":{"tags":["Evaluations"],"summary":"Submit Evaluation","operationId":"submit_evaluation_evaluations__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluationSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/notifications/":{"get":{"tags":["Notifications"],"summary":"Get My Notifications","operationId":"get_my_notifications_notifications__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NotificationResponse"},"type":"array","title":"Response Get My Notifications Notifications  Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/notifications/{notification_id}/read":{"post":{"tags":["Notifications"],"summary":"Mark As Read","operationId":"mark_as_read_notifications__notification_id__read_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/read-all":{"post":{"tags":["Notifications"],"summary":"Mark All As Read","operationId":"mark_all_as_read_notifications_read_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/analytics/page-view":{"post":{"tags":["Analytics"],"summary":"Registrar Page View","description":"Recebe um evento de visualização de página com duração em segundos.\nChamado pelo frontend ao sair de uma rota (unmount / visibilitychange).\nDescarta views com menos de 2 segundos (bounces / navegação acidental).","operationId":"registrar_page_view_analytics_page_view_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageViewPayload"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/analytics/admin/retention":{"get":{"tags":["Analytics"],"summary":"Get Retention Stats","description":"Retorna métricas de retenção agregadas por página:\n- avg_duration_sec: tempo médio gasto na tela\n- total_views: número total de acessos\n- unique_users: usuários únicos que acessaram\n- top pages ordenadas por tempo médio\n\nUsa RPC para agregar no banco de dados, evitando o limite de\n1000 linhas do PostgREST ao buscar registros brutos.","operationId":"get_retention_stats_analytics_admin_retention_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/analytics/admin/retention/daily":{"get":{"tags":["Analytics"],"summary":"Get Retention Daily","description":"Retorna série temporal diária: sessões únicas e usuários ativos por dia.\nUsado no gráfico de tendência de engajamento.\n\nUsa RPC para agregar no banco de dados, evitando o limite de\n1000 linhas do PostgREST ao buscar registros brutos.","operationId":"get_retention_daily_analytics_admin_retention_daily_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/conversations":{"get":{"tags":["Messages"],"summary":"Get Conversations","description":"Obtém resumos de todas as conversas/sessões ativas do usuário autenticado.","operationId":"get_conversations_messages_conversations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/messages/session/{session_id}":{"get":{"tags":["Messages"],"summary":"Get Messages By Session","description":"Obtém as mensagens de uma sessão específica e marca como lidas.","operationId":"get_messages_by_session_messages_session__session_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/partner/{partner_id}":{"get":{"tags":["Messages"],"summary":"Get Messages By Partner","description":"Obtém ou cria a sessão ativa com o parceiro e retorna as mensagens.","operationId":"get_messages_by_partner_messages_partner__partner_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/send":{"post":{"tags":["Messages"],"summary":"Send Message","description":"Envia uma mensagem vinculada a uma sessão de chat.","operationId":"send_message_messages_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSendSchema"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/messages/":{"post":{"tags":["Messages"],"summary":"Send Message","description":"Envia uma mensagem vinculada a uma sessão de chat.","operationId":"send_message_messages__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageSendSchema"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/messages/hide":{"post":{"tags":["Messages"],"summary":"Hide Session","description":"Exclui/oculta a sessão apenas do front (mantém no banco).","operationId":"hide_session_messages_hide_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/sessions/{session_id}/hide":{"post":{"tags":["Messages"],"summary":"Hide Session","description":"Exclui/oculta a sessão apenas do front (mantém no banco).","operationId":"hide_session_messages_sessions__session_id__hide_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/read":{"patch":{"tags":["Messages"],"summary":"Mark Session As Read","description":"Marca todas as mensagens de uma sessão como lidas.","operationId":"mark_session_as_read_messages_read_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/session/{session_id}/read":{"patch":{"tags":["Messages"],"summary":"Mark Session As Read","description":"Marca todas as mensagens de uma sessão como lidas.","operationId":"mark_session_as_read_messages_session__session_id__read_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/report":{"post":{"tags":["Messages"],"summary":"Report Message","description":"Reporta uma mensagem ofensiva recebida no chat privado.","operationId":"report_message_messages_report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageReportSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/messages/{message_id}/report":{"post":{"tags":["Messages"],"summary":"Report Message","description":"Reporta uma mensagem ofensiva recebida no chat privado.","operationId":"report_message_messages__message_id__report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageReportSchema"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/categories":{"get":{"tags":["Marketplace"],"summary":"List Categories","description":"Lista categorias ativas do Marketplace.","operationId":"list_categories_marketplace_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/marketplace/items":{"get":{"tags":["Marketplace"],"summary":"Search Items","description":"Busca dinâmica de produtos/serviços no Marketplace.","operationId":"search_items_marketplace_items_get","parameters":[{"name":"game","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Price"}},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Price"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"newest","title":"Sort"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Marketplace"],"summary":"Create Item","description":"Cadastra um novo produto/serviço na loja do vendedor.","operationId":"create_item_marketplace_items_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/items/{item_id}":{"get":{"tags":["Marketplace"],"summary":"Get Item Detail","description":"Detalhes de um produto específico com avaliações e checagem se o usuário já comprou.","operationId":"get_item_detail_marketplace_items__item_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Marketplace"],"summary":"Update Item","description":"Atualiza dados de um item (apenas o dono).","operationId":"update_item_marketplace_items__item_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemUpdateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Marketplace"],"summary":"Archive Item","description":"Arquiva um produto (soft delete).","operationId":"archive_item_marketplace_items__item_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/seller/onboard":{"post":{"tags":["Marketplace"],"summary":"Onboard Seller","description":"Cria ou atualiza a loja do vendedor.","operationId":"onboard_seller_marketplace_seller_onboard_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SellerOnboardSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/marketplace/seller/dashboard":{"get":{"tags":["Marketplace"],"summary":"Get Seller Dashboard","description":"Retorna métricas, produtos e histórico de saques do vendedor.","operationId":"get_seller_dashboard_marketplace_seller_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/marketplace/checkout/{item_id}":{"post":{"tags":["Marketplace"],"summary":"Create Checkout","description":"Inicializa a intenção de compra de um produto.\nCalcula retenção da plataforma (comissão) e cria registro 'pending'.","operationId":"create_checkout_marketplace_checkout__item_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/checkout/{order_id}/confirm":{"post":{"tags":["Marketplace"],"summary":"Confirm Checkout Sandbox","description":"Confirmação instantânea de pagamento (Modo Sandbox / Fase 1).\nAtualiza status para 'paid', libera download e credita saldo do vendedor.","operationId":"confirm_checkout_sandbox_marketplace_checkout__order_id__confirm_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/purchases":{"get":{"tags":["Marketplace"],"summary":"Get My Purchases","description":"Área 'Minha Biblioteca': Retorna todos os itens comprados pelo piloto.","operationId":"get_my_purchases_marketplace_purchases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/marketplace/purchases/{order_id}/download":{"get":{"tags":["Marketplace"],"summary":"Download Purchased Item","description":"Gera um link seguro assinado de download para o comprador verificado.","operationId":"download_purchased_item_marketplace_purchases__order_id__download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/marketplace/seller/payout-request":{"post":{"tags":["Marketplace"],"summary":"Request Payout","description":"Solicita a transferência do saldo disponível para a chave PIX do vendedor.","operationId":"request_payout_marketplace_seller_payout_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutRequestSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/marketplace/items/{item_id}/reviews":{"post":{"tags":["Marketplace"],"summary":"Create Review","description":"Cria uma avaliação para um produto por um comprador verificado.","operationId":"create_review_marketplace_items__item_id__reviews_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewCreateSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lap-records/upsert-bulk":{"post":{"tags":["Lap Records"],"summary":"Upsert Bulk Lap Records","description":"Salva / atualiza recordes de volta rápida em lote na tabela unificada session_laps.","operationId":"upsert_bulk_lap_records_lap_records_upsert_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LapRecordBulkUpsertSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/lap-records/by-event/{event_id}":{"get":{"tags":["Lap Records"],"summary":"Get Lap Records By Event","description":"Retorna os recordes de volta da tabela session_laps associados às sessões deste evento.","operationId":"get_lap_records_by_event_lap_records_by_event__event_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"category_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/lap-records/by-track":{"get":{"tags":["Lap Records"],"summary":"Get Lap Records By Track","description":"Retorna recordes históricos de uma pista pesquisando em session_laps.","operationId":"get_lap_records_by_track_lap_records_by_track_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"track_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Name"}},{"name":"circuit_layout_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Circuit Layout Id"}},{"name":"category_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocr/forza":{"post":{"tags":["OCR"],"summary":"Process Forza Results Ocr","description":"Processa uma ou mais capturas de tela do Forza Motorsport usando Python + EasyOCR + OpenCV.\nRetorna Posição de Corrida e Nickname (Gamertag) com alto índice de precisão.","operationId":"process_forza_results_ocr_ocr_forza_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_process_forza_results_ocr_ocr_forza_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/safety/me":{"get":{"tags":["Safety Wallet"],"summary":"Minha Carteira Safety","description":"Retorna a carteira safety e histórico detalhado do piloto autenticado.","operationId":"minha_carteira_safety_safety_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/safety/pilots/{pilot_id}":{"get":{"tags":["Safety Wallet"],"summary":"Carteira Safety Piloto","description":"Consulta pública/organizador da carteira safety de um piloto.","operationId":"carteira_safety_piloto_safety_pilots__pilot_id__get","parameters":[{"name":"pilot_id","in":"path","required":true,"schema":{"type":"string","title":"Pilot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/safety/summary":{"get":{"tags":["Safety Wallet"],"summary":"Listar Pilotos Com Punicao","description":"Lista todos os pilotos que possuem punições ativas ou níveis de bloqueio na carteira safety.","operationId":"listar_pilotos_com_punicao_safety_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/safety/penalties":{"post":{"tags":["Safety Wallet"],"summary":"Aplicar Punicao Administrativa","description":"Aplica uma punição administrativa (Chat Ofensivo, GamerTag Xbox Falsa, W.O., etc.) na Carteira Safety.","operationId":"aplicar_punicao_administrativa_safety_penalties_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyPenaltySchema"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/safety/records/{record_id}/revoke":{"post":{"tags":["Safety Wallet"],"summary":"Revogar Punicao","description":"Revoga uma punição ativa (marca como inativa e recalcula a carteira do piloto).","operationId":"revogar_punicao_safety_records__record_id__revoke_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/safety/reset-cycle":{"post":{"tags":["Safety Wallet"],"summary":"Reset Safety Cycle","description":"Encerra o ciclo desportivo de Safety e zera os pontos acumulados de todos os pilotos.","operationId":"reset_safety_cycle_safety_reset_cycle_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetCycleSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/emperor/healthcheck":{"get":{"tags":["emperor"],"summary":"Healthcheck","description":"Verifica se a API Emperor está acessível.","operationId":"healthcheck_emperor_healthcheck_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/emperor/active-session":{"get":{"tags":["emperor"],"summary":"Get Active Session","description":"Retorna informações em tempo real da sessão ativa no servidor Emperor.\nInclui: Circuito, Tipo da Sessão, Duração/Voltas, Clima, Categoria, Carro e Pilotos conectados.","operationId":"get_active_session_emperor_active_session_get","parameters":[{"name":"server_id","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/emperor/connect-info":{"get":{"tags":["emperor"],"summary":"Connect Info","description":"Retorna a URL de conexão via Steam URI (+connect) e o link para o conector .vbs.","operationId":"connect_info_emperor_connect_info_get","parameters":[{"name":"ip","in":"query","required":false,"schema":{"type":"string","default":"64.94.95.82","title":"Ip"}},{"name":"port","in":"query","required":false,"schema":{"type":"integer","default":9668,"title":"Port"}},{"name":"label","in":"query","required":false,"schema":{"type":"string","default":"eMSS Server","title":"Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/emperor/connect-script":{"get":{"tags":["emperor"],"summary":"Connect Script","description":"Gera dinamicamente um arquivo .vbs para encerrar instâncias presas do AMS2 (AMS2AVX.exe/AMS2.exe)\nem segundo plano (sem janela CMD) e relançar o jogo com a flag +connect IP:PORT via Steam.","operationId":"connect_script_emperor_connect_script_get","parameters":[{"name":"ip","in":"query","required":false,"schema":{"type":"string","default":"64.94.95.82","title":"Ip"}},{"name":"port","in":"query","required":false,"schema":{"type":"integer","default":9668,"title":"Port"}},{"name":"label","in":"query","required":false,"schema":{"type":"string","default":"eMSS Server","title":"Label"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/emperor/results":{"get":{"tags":["emperor"],"summary":"List Results","description":"Lista resultados disponíveis no Emperor Server Manager.\nRequer autenticação (qualquer usuário da plataforma pode consultar).","operationId":"list_results_emperor_results_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Page"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/emperor/results/match-session":{"get":{"tags":["emperor"],"summary":"Match Session Results","description":"Escaneia os arquivos mais recentes na API Emperor e identifica automaticamente\nquais contêm os pilotos inscritos nesta sessão (cruzando Steam ID 64-bit).\nRetorna a lista de arquivos ordenados por compatibilidade (% de inscritos encontrados).","operationId":"match_session_results_emperor_results_match_session_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"query","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"server_id","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/emperor/results/{filename}/raw":{"get":{"tags":["emperor"],"summary":"Get Raw Result","description":"Baixa e retorna o JSON de resultado bruto diretamente do Emperor Server Manager.\nUsado pelo frontend para alimentar parsers nativos de resultados.","operationId":"get_raw_result_emperor_results__filename__raw_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"server_id","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/emperor/results/{filename}/preview":{"get":{"tags":["emperor"],"summary":"Preview Result","description":"Baixa e processa um resultado do Emperor, retornando:\n  - places: lista de pilotos com posição e tempo\n  - matched: pilotos encontrados na plataforma (via SteamID)\n  - unmatched: GUIDs sem correspondência (Steam não verificado)\n\nÚtil para o organizador ver quem vai entrar no lançamento antes de confirmar.","operationId":"preview_result_emperor_results__filename__preview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"server_id","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/emperor/results/{filename}/import-laps":{"post":{"tags":["emperor"],"summary":"Import Laps From Emperor","description":"Baixa um arquivo JSON de resultado do servidor e importa todas as voltas\npara a tabela session_laps (sem obrigatoriedade de vincular a uma sessão da plataforma).\nAtualiza o Leaderboard global.","operationId":"import_laps_from_emperor_emperor_results__filename__import_laps_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"server_id","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/emperor/results/launch":{"post":{"tags":["emperor"],"summary":"Launch From Emperor","description":"Baixa resultado do Emperor e lança automaticamente para a session_id informada.\n\nFluxo:\n  1. Baixa JSON do Emperor\n  2. Cruza GUIDs → pilot_ids (com overrides manuais opcionais)\n  3. Chama RPC lancar_resultado_atomico","operationId":"launch_from_emperor_emperor_results_launch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchFromEmperorPayload"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/ranking":{"get":{"tags":["Public API"],"summary":"Ranking Global","operationId":"ranking_global_v1_ranking_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"license_tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Tier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/events/{event_id}/results":{"get":{"tags":["Public API"],"summary":"Resultados Evento","operationId":"resultados_evento_v1_events__event_id__results_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},{"name":"split_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Split Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/leagues/{league_id}/standings":{"get":{"tags":["Public API"],"summary":"Classificacao Liga","operationId":"classificacao_liga_v1_leagues__league_id__standings_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"league_id","in":"path","required":true,"schema":{"type":"string","title":"League Id"}},{"name":"season_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Season Id"}},{"name":"scoring_track","in":"query","required":false,"schema":{"type":"string","default":"auto","title":"Scoring Track"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pilots/{username}":{"get":{"tags":["Public API"],"summary":"Perfil Piloto Publico","operationId":"perfil_piloto_publico_v1_pilots__username__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"history_limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"History Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/status":{"get":{"tags":["Public API"],"summary":"Api Status","operationId":"api_status_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/share/leagues/{slug}":{"get":{"tags":["Public API"],"summary":"Share Liga","description":"Endpoint para compartilhamento de liga em redes sociais.\nRetorna metatags Open Graph com logo da liga e redireciona para o perfil da liga.","operationId":"share_liga_v1_share_leagues__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/share/leagues/{slug}/logo":{"get":{"tags":["Public API"],"summary":"Get League Logo","description":"Serve o logo da liga em formato binário (decodificando de Base64 se necessário).\nIsso é necessário porque crawlers de redes sociais (WhatsApp, Discord, etc.)\nnão carregam imagens em formato de data URL Base64.","operationId":"get_league_logo_v1_share_leagues__slug__logo_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/share/events/{event_id}":{"get":{"tags":["Public API"],"summary":"Share Evento","description":"Endpoint para compartilhamento em redes sociais.\nRetorna metatags Open Graph e redireciona para o console.","operationId":"share_evento_v1_share_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/share/events/{event_id}/image":{"get":{"tags":["Public API"],"summary":"Get Event Image","description":"Serve a imagem do evento em formato binário (decodificando de Base64 se necessário).\nIsso é necessário porque crawlers de redes sociais (WhatsApp, Discord, etc.)\nnão carregam imagens em formato de data URL Base64.","operationId":"get_event_image_v1_share_events__event_id__image_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhooks/mercado-pago":{"post":{"tags":["Webhooks"],"summary":"Webhook Mercado Pago","operationId":"webhook_mercado_pago_webhooks_mercado_pago_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/webhooks/stripe":{"post":{"tags":["Webhooks"],"summary":"Webhook Stripe","operationId":"webhook_stripe_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ActivateReserveSchema":{"properties":{"replace_pilot_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Replace Pilot Id"},"replace_registration_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Replace Registration Id"}},"type":"object","title":"ActivateReserveSchema"},"AddStewardSchema":{"properties":{"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["user_id"],"title":"AddStewardSchema"},"Ams2EventConfigSchema":{"properties":{"track_server_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Track Server Id"},"vehicle_class_server_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Class Server Id"},"vehicle_model_server_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Model Server Id"},"vehicle_selection_mode":{"type":"string","title":"Vehicle Selection Mode","default":"class"},"grid_size":{"type":"integer","title":"Grid Size","default":32},"max_players":{"type":"integer","title":"Max Players","default":32},"practice_enabled":{"type":"boolean","title":"Practice Enabled","default":true},"practice_length_min":{"type":"integer","title":"Practice Length Min","default":30},"qualify_enabled":{"type":"boolean","title":"Qualify Enabled","default":true},"qualify_length_min":{"type":"integer","title":"Qualify Length Min","default":10},"qualify_private":{"type":"boolean","title":"Qualify Private","default":false},"race_length":{"type":"integer","title":"Race Length","default":30},"race_is_timed":{"type":"boolean","title":"Race Is Timed","default":false},"race_extra_lap":{"type":"boolean","title":"Race Extra Lap","default":false},"race_rolling_start":{"type":"boolean","title":"Race Rolling Start","default":false},"race_formation_lap":{"type":"boolean","title":"Race Formation Lap","default":false},"race_date_year":{"type":"integer","title":"Race Date Year","default":2026},"race_date_month":{"type":"integer","title":"Race Date Month","default":7},"race_date_day":{"type":"integer","title":"Race Date Day","default":15},"practice_date_hour":{"type":"integer","title":"Practice Date Hour","default":10},"qualify_date_hour":{"type":"integer","title":"Qualify Date Hour","default":12},"race_date_hour":{"type":"integer","title":"Race Date Hour","default":14},"practice_time_progression":{"type":"integer","title":"Practice Time Progression","default":0},"qualify_time_progression":{"type":"integer","title":"Qualify Time Progression","default":0},"race_time_progression":{"type":"integer","title":"Race Time Progression","default":0},"practice_livetrack_preset":{"type":"integer","title":"Practice Livetrack Preset","default":0},"qualify_livetrack_preset":{"type":"integer","title":"Qualify Livetrack Preset","default":0},"race_livetrack_preset":{"type":"integer","title":"Race Livetrack Preset","default":0},"practice_weather_slots":{"type":"integer","title":"Practice Weather Slots","default":1},"practice_weather_slot_1":{"type":"integer","title":"Practice Weather Slot 1","default":-934211870},"practice_weather_slot_2":{"type":"integer","title":"Practice Weather Slot 2","default":-934211870},"practice_weather_slot_3":{"type":"integer","title":"Practice Weather Slot 3","default":-934211870},"practice_weather_slot_4":{"type":"integer","title":"Practice Weather Slot 4","default":-934211870},"qualify_weather_slots":{"type":"integer","title":"Qualify Weather Slots","default":1},"qualify_weather_slot_1":{"type":"integer","title":"Qualify Weather Slot 1","default":-934211870},"qualify_weather_slot_2":{"type":"integer","title":"Qualify Weather Slot 2","default":-934211870},"qualify_weather_slot_3":{"type":"integer","title":"Qualify Weather Slot 3","default":-934211870},"qualify_weather_slot_4":{"type":"integer","title":"Qualify Weather Slot 4","default":-934211870},"race_weather_slots":{"type":"integer","title":"Race Weather Slots","default":1},"race_weather_slot_1":{"type":"integer","title":"Race Weather Slot 1","default":-934211870},"race_weather_slot_2":{"type":"integer","title":"Race Weather Slot 2","default":-934211870},"race_weather_slot_3":{"type":"integer","title":"Race Weather Slot 3","default":-934211870},"race_weather_slot_4":{"type":"integer","title":"Race Weather Slot 4","default":-934211870},"damage_type":{"type":"integer","title":"Damage Type","default":3},"damage_scale":{"type":"integer","title":"Damage Scale","default":2},"tire_wear_type":{"type":"integer","title":"Tire Wear Type","default":6},"fuel_usage_type":{"type":"integer","title":"Fuel Usage Type","default":0},"penalties_type":{"type":"integer","title":"Penalties Type","default":1},"allowed_views":{"type":"integer","title":"Allowed Views","default":0},"damage_random_failures":{"type":"integer","title":"Damage Random Failures","default":0},"flag_abs_allowed":{"type":"boolean","title":"Flag Abs Allowed","default":true},"flag_sc_allowed":{"type":"boolean","title":"Flag Sc Allowed","default":true},"flag_tcs_allowed":{"type":"boolean","title":"Flag Tcs Allowed","default":true},"flag_force_manual":{"type":"boolean","title":"Flag Force Manual","default":false},"flag_force_realistic_aids":{"type":"boolean","title":"Flag Force Realistic Aids","default":false},"flag_force_identical_vehicles":{"type":"boolean","title":"Flag Force Identical Vehicles","default":false},"flag_fill_with_ai":{"type":"boolean","title":"Flag Fill With Ai","default":false},"flag_mechanical_failures":{"type":"boolean","title":"Flag Mechanical Failures","default":false},"flag_auto_start_engine":{"type":"boolean","title":"Flag Auto Start Engine","default":true},"flag_timed_race":{"type":"boolean","title":"Flag Timed Race","default":false},"flag_anti_griefing":{"type":"boolean","title":"Flag Anti Griefing","default":false},"flag_disable_driving_line":{"type":"boolean","title":"Flag Disable Driving Line","default":false},"flag_pit_speed_limiter":{"type":"boolean","title":"Flag Pit Speed Limiter","default":true},"flag_pit_stop_errors_allowed":{"type":"boolean","title":"Flag Pit Stop Errors Allowed","default":true},"flag_wait_for_ready":{"type":"boolean","title":"Flag Wait For Ready","default":false},"flag_cooldown_lap":{"type":"boolean","title":"Flag Cooldown Lap","default":false},"track_limits_enabled":{"type":"boolean","title":"Track Limits Enabled","default":true},"track_limit_warnings":{"type":"integer","title":"Track Limit Warnings","default":3},"drive_through_penalty":{"type":"boolean","title":"Drive Through Penalty","default":true},"pit_exit_penalty":{"type":"boolean","title":"Pit Exit Penalty","default":true},"pit_speed_limit_kmh":{"type":"integer","title":"Pit Speed Limit Kmh","default":60},"safety_car":{"type":"boolean","title":"Safety Car","default":true},"limited_setup":{"type":"boolean","title":"Limited Setup","default":false},"mandatory_pit_stops":{"type":"boolean","title":"Mandatory Pit Stops","default":false},"min_tires_per_pit":{"type":"integer","title":"Min Tires Per Pit","default":0},"allow_refuelling":{"type":"boolean","title":"Allow Refuelling","default":false},"ai_difficulty":{"type":"integer","title":"Ai Difficulty","default":70},"ai_aggression":{"type":"string","title":"Ai Aggression","default":"low"},"fill_with_ai":{"type":"boolean","title":"Fill With Ai","default":false},"max_human_opponents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Human Opponents"},"server_name":{"type":"string","title":"Server Name","default":"eMSS - Servidor 01"},"lobby_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lobby Password"},"server_public":{"type":"boolean","title":"Server Public","default":true},"steam_port":{"type":"integer","title":"Steam Port","default":8766},"host_port":{"type":"integer","title":"Host Port","default":27015},"query_port":{"type":"integer","title":"Query Port","default":27016},"server_controls_track":{"type":"boolean","title":"Server Controls Track","default":true},"server_controls_vehicle":{"type":"boolean","title":"Server Controls Vehicle","default":false},"server_controls_vehicle_class":{"type":"boolean","title":"Server Controls Vehicle Class","default":true},"commission_enabled":{"type":"boolean","title":"Commission Enabled","default":false}},"type":"object","title":"Ams2EventConfigSchema"},"AnnounceImagePayload":{"properties":{"channel_id":{"type":"string","title":"Channel Id","default":"1233196456370769951"},"image_base64":{"type":"string","title":"Image Base64","default":""},"message":{"type":"string","title":"Message","default":""}},"type":"object","title":"AnnounceImagePayload"},"AnnounceSplitsPayload":{"properties":{"channel_id":{"type":"string","title":"Channel Id","default":"1233196456370769951"},"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"AnnounceSplitsPayload"},"AnnouncementSchema":{"properties":{"message":{"type":"string","maxLength":140,"minLength":1,"title":"Message"}},"type":"object","required":["message"],"title":"AnnouncementSchema"},"AppealSchema":{"properties":{"new_evidence_url":{"type":"string","title":"New Evidence Url"},"new_description":{"type":"string","title":"New Description"}},"type":"object","required":["new_evidence_url","new_description"],"title":"AppealSchema"},"ApplyPenaltySchema":{"properties":{"pilot_id":{"type":"string","title":"Pilot Id"},"points":{"type":"integer","title":"Points"},"source_type":{"type":"string","title":"Source Type"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity","default":"administrative"},"description":{"type":"string","title":"Description"},"reference_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Id"},"expires_in_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In Days","default":90}},"type":"object","required":["pilot_id","points","source_type","description"],"title":"ApplyPenaltySchema"},"Body_announce_discord_announce_post":{"properties":{"role_slug":{"type":"string","title":"Role Slug"},"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"Body_announce_discord_announce_post"},"Body_process_forza_results_ocr_ocr_forza_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_process_forza_results_ocr_ocr_forza_post"},"Body_upload_event_image_events_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_event_image_events_upload_post"},"CarSchema":{"properties":{"game_id":{"type":"string","title":"Game Id"},"category_id":{"type":"string","title":"Category Id"},"manufacturer":{"type":"string","title":"Manufacturer"},"model":{"type":"string","title":"Model"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"},"car_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Class"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"brand_logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Logo Url"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["game_id","category_id","manufacturer","model"],"title":"CarSchema"},"CircuitLayoutSchema":{"properties":{"config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config Id"},"layout_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layout Name"},"length_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Length Km"},"map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Map Url"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"CircuitLayoutSchema"},"CircuitSchema":{"properties":{"name":{"type":"string","title":"Name"},"country":{"type":"string","title":"Country"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"flag_emoji":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flag Emoji"},"surface_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface Type","default":"asphalt"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"hero_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hero Image Url"},"is_active":{"type":"boolean","title":"Is Active","default":true},"game_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Game Ids"}},"type":"object","required":["name","country"],"title":"CircuitSchema"},"DaySyncSchema":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"day_number":{"type":"integer","title":"Day Number"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"scheduled_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled Date"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At"},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details"},"is_standalone":{"type":"boolean","title":"Is Standalone","default":false},"races":{"items":{"$ref":"#/components/schemas/RaceSyncSchema"},"type":"array","title":"Races","default":[]}},"type":"object","required":["day_number"],"title":"DaySyncSchema"},"DefenseSchema":{"properties":{"defense_text":{"type":"string","title":"Defense Text"},"defense_link":{"type":"string","title":"Defense Link"}},"type":"object","required":["defense_text","defense_link"],"title":"DefenseSchema"},"DepositSchema":{"properties":{"amount_brl_cents":{"type":"integer","title":"Amount Brl Cents"},"gateway":{"type":"string","title":"Gateway","default":"mercado_pago"},"payment_method":{"type":"string","title":"Payment Method","default":"pix"}},"type":"object","required":["amount_brl_cents"],"title":"DepositSchema"},"EntrySchema":{"properties":{"pilot_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pilot Id"},"split_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Split Id"}},"type":"object","title":"EntrySchema"},"ErsAdjustSchema":{"properties":{"pilot_id":{"type":"string","title":"Pilot Id"},"delta":{"type":"number","title":"Delta"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["pilot_id","delta","reason"],"title":"ErsAdjustSchema"},"EvaluationSchema":{"properties":{"session_id":{"type":"string","title":"Session Id"},"score_conhecimento":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Score Conhecimento"},"score_empatia":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Score Empatia"},"score_pontualidade":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Score Pontualidade"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["session_id","score_conhecimento","score_empatia","score_pontualidade"],"title":"EvaluationSchema"},"EventAnnouncementSchema":{"properties":{"message":{"type":"string","maxLength":1000,"minLength":1,"title":"Message"}},"type":"object","required":["message"],"title":"EventAnnouncementSchema"},"EventCarCreateSchema":{"properties":{"car_id":{"type":"string","title":"Car Id"}},"type":"object","required":["car_id"],"title":"EventCarCreateSchema"},"EventCategoryCreateSchema":{"properties":{"name":{"type":"string","title":"Name"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"},"color_hex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color Hex","default":"#FFFFFF"},"max_slots":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Slots"}},"type":"object","required":["name"],"title":"EventCategoryCreateSchema"},"EventCategoryUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"},"color_hex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color Hex"},"max_slots":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Slots"}},"type":"object","title":"EventCategoryUpdateSchema"},"EventCreateSchema":{"properties":{"name":{"type":"string","maxLength":120,"minLength":3,"title":"Name"},"game_id":{"type":"string","title":"Game Id"},"category_id":{"type":"string","title":"Category Id"},"season_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Season Id"},"scheduled_at":{"type":"string","title":"Scheduled At"},"scoring_template":{"type":"string","title":"Scoring Template","default":"platform"},"is_paid":{"type":"boolean","title":"Is Paid","default":false},"entry_fee_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entry Fee Tokens"},"organized_by":{"type":"string","title":"Organized By","default":"league"},"image_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Image Url"},"event_type":{"type":"string","title":"Event Type","default":"RACE"},"license_check_enabled":{"type":"boolean","title":"License Check Enabled","default":false},"min_license_tier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min License Tier Id"},"max_license_tier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max License Tier Id"},"min_ers":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Ers"},"registration_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Registration Limit"},"allow_reserves":{"type":"boolean","title":"Allow Reserves","default":false},"has_splits":{"type":"boolean","title":"Has Splits","default":false},"slots_per_split":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Slots Per Split"},"check_admin_penalties":{"type":"boolean","title":"Check Admin Penalties","default":true},"details":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Details"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"regulations_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Regulations Url"},"whatsapp_group_link":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Whatsapp Group Link"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform","default":"PC"},"car_classes":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Car Classes"},"broadcast_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Broadcast Url"},"scoring_settings":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Scoring Settings"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","default":"America/Sao_Paulo"},"difficulty":{"type":"string","title":"Difficulty","default":"blocked"},"has_categories":{"type":"boolean","title":"Has Categories","default":false}},"type":"object","required":["name","game_id","category_id","scheduled_at"],"title":"EventCreateSchema"},"EventDaySchema":{"properties":{"day_number":{"type":"integer","title":"Day Number"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"scheduled_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled Date"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At"},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details"},"is_standalone":{"type":"boolean","title":"Is Standalone","default":false}},"type":"object","required":["day_number"],"title":"EventDaySchema"},"EventRegisterSchema":{"properties":{"car_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Id"},"event_category_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Category Id"},"car_name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Car Name"},"category_name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Category Name"}},"type":"object","title":"EventRegisterSchema"},"EventStructureSyncSchema":{"properties":{"days":{"items":{"$ref":"#/components/schemas/DaySyncSchema"},"type":"array","title":"Days"}},"type":"object","required":["days"],"title":"EventStructureSyncSchema"},"EventTeamSchema":{"properties":{"name":{"type":"string","title":"Name"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"},"color_hex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color Hex","default":"#FFFFFF"},"car_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Id"}},"type":"object","required":["name"],"title":"EventTeamSchema"},"ForzaEventConfigSchema":{"properties":{"track_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Name"},"car_category_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Category Name"},"car_class_pi":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Class Pi"},"has_splits":{"type":"boolean","title":"Has Splits","default":false},"slots_per_split":{"type":"integer","title":"Slots Per Split","default":24}},"type":"object","title":"ForzaEventConfigSchema"},"GameServerSchema":{"properties":{"name":{"type":"string","title":"Name"},"ip":{"type":"string","title":"Ip"},"port":{"type":"integer","title":"Port","default":27015},"steam_port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Steam Port","default":8766},"query_port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Query Port","default":27016},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id"},"game_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"},"server_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Type","default":"practice_and_race"},"is_active":{"type":"boolean","title":"Is Active","default":true},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["name","ip"],"title":"GameServerSchema"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImportLapsPayload":{"properties":{"stats_json":{"type":"object","title":"Stats Json"}},"type":"object","required":["stats_json"],"title":"ImportLapsPayload"},"IncidentCreateSchema":{"properties":{"session_id":{"type":"string","title":"Session Id"},"incident_type":{"type":"string","title":"Incident Type"},"description":{"type":"string","title":"Description"},"reported_pilot_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reported Pilot Id"},"lap_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lap Number"},"evidence_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Url"}},"type":"object","required":["session_id","incident_type","description"],"title":"IncidentCreateSchema"},"InternalEventCreateSchema":{"properties":{"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"image_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Image Url"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At"},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes"},"scoring_table":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Scoring Table"}},"type":"object","required":["name"],"title":"InternalEventCreateSchema"},"InternalEventUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":2},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"image_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Image Url"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At"},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes"},"scoring_table":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Scoring Table"}},"type":"object","title":"InternalEventUpdateSchema"},"InternalRaceCreateSchema":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Label"},"circuit_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Circuit Name"},"car_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Car Name"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At"},"laps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Laps"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"type":"object","title":"InternalRaceCreateSchema"},"InternalRaceUpdateSchema":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Label"},"circuit_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Circuit Name"},"car_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Car Name"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At"},"laps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Laps"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"},"is_finished":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Finished"}},"type":"object","title":"InternalRaceUpdateSchema"},"InternalResultItem":{"properties":{"pilot_id":{"type":"string","title":"Pilot Id"},"position":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Position"},"best_lap":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Best Lap"},"total_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Time"},"dnf":{"type":"boolean","title":"Dnf","default":false},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["pilot_id"],"title":"InternalResultItem"},"InternalResultsLaunchSchema":{"properties":{"results":{"items":{"$ref":"#/components/schemas/InternalResultItem"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"InternalResultsLaunchSchema"},"InviteSchema":{"properties":{"pilot_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pilot Id"},"initiated_by":{"type":"string","title":"Initiated By"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["initiated_by"],"title":"InviteSchema"},"ItemCreateSchema":{"properties":{"category_id":{"type":"string","title":"Category Id"},"game_slug":{"type":"string","title":"Game Slug","default":"ams2"},"title":{"type":"string","maxLength":120,"minLength":3,"title":"Title"},"description":{"type":"string","maxLength":3000,"minLength":10,"title":"Description"},"price_brl":{"type":"number","minimum":0.0,"title":"Price Brl"},"car_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Name"},"track_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Name"},"game_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Version"},"preview_urls":{"items":{"type":"string"},"type":"array","title":"Preview Urls","default":[]},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"},"file_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Format"}},"type":"object","required":["category_id","title","description","price_brl"],"title":"ItemCreateSchema"},"ItemUpdateSchema":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":120,"minLength":3},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":3000,"minLength":10},{"type":"null"}],"title":"Description"},"price_brl":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Price Brl"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"car_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Name"},"track_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Name"},"preview_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Preview Urls"}},"type":"object","title":"ItemUpdateSchema"},"LapRecordBulkUpsertSchema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/LapRecordUpsertItem"},"type":"array","title":"Items"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"track_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Track Id"},"track_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Track Name"},"circuit_layout_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Circuit Layout Id"}},"type":"object","required":["items"],"title":"LapRecordBulkUpsertSchema"},"LapRecordUpsertItem":{"properties":{"pilot_id":{"type":"string","title":"Pilot Id"},"best_lap_ms":{"type":"integer","title":"Best Lap Ms"},"best_lap_str":{"type":"string","title":"Best Lap Str"},"car_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Model"},"category_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Name"},"vehicle_class_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vehicle Class Id"},"laps_completed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Laps Completed"}},"type":"object","required":["pilot_id","best_lap_ms","best_lap_str"],"title":"LapRecordUpsertItem"},"LaunchFromEmperorPayload":{"properties":{"session_id":{"type":"string","title":"Session Id"},"filename":{"type":"string","title":"Filename"},"server_id":{"type":"integer","title":"Server Id","default":0},"split_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Split Id"},"overrides":{"items":{"type":"object"},"type":"array","title":"Overrides","default":[]}},"type":"object","required":["session_id","filename"],"title":"LaunchFromEmperorPayload"},"LeagueCreateSchema":{"properties":{"name":{"type":"string","maxLength":80,"minLength":3,"title":"Name"},"slug":{"type":"string","maxLength":60,"minLength":3,"title":"Slug"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"banner_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Banner Url"},"whatsapp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Whatsapp Url"},"discord_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discord Url"},"regulations":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Regulations"},"is_public":{"type":"boolean","title":"Is Public","default":true},"subscription_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Type","default":"none"},"access_code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Access Code"}},"type":"object","required":["name","slug"],"title":"LeagueCreateSchema"},"LeagueUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"banner_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Banner Url"},"whatsapp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Whatsapp Url"},"discord_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discord Url"},"regulations":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Regulations"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"subscription_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Type"},"access_code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Access Code"}},"type":"object","title":"LeagueUpdateSchema"},"MessageReportSchema":{"properties":{"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"},"reason":{"type":"string","title":"Reason"},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details"}},"type":"object","required":["reason"],"title":"MessageReportSchema"},"MessageSendSchema":{"properties":{"recipient_id":{"type":"string","title":"Recipient Id"},"message":{"type":"string","title":"Message"},"chat_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Session Id"}},"type":"object","required":["recipient_id","message"],"title":"MessageSendSchema"},"MrciCycleSchema":{"properties":{"label":{"type":"string","title":"Label"},"game_id":{"type":"string","title":"Game Id"},"category_id":{"type":"string","title":"Category Id"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["label","game_id","category_id","start_date","end_date"],"title":"MrciCycleSchema","description":"Schema para criação/edição de um ciclo MRCI (8 semanas)."},"NotificationResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"},"type":{"type":"string","title":"Type"},"link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link"},"is_read":{"type":"boolean","title":"Is Read"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","title","message","type","is_read","created_at"],"title":"NotificationResponse"},"PageViewPayload":{"properties":{"page":{"type":"string","maxLength":200,"minLength":1,"title":"Page"},"page_label":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Page Label"},"duration_sec":{"type":"integer","maximum":86400.0,"minimum":0.0,"title":"Duration Sec"},"session_token":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Session Token"}},"type":"object","required":["page","duration_sec"],"title":"PageViewPayload"},"PayoutRequestSchema":{"properties":{"amount_brl":{"type":"number","exclusiveMinimum":0.0,"title":"Amount Brl"}},"type":"object","required":["amount_brl"],"title":"PayoutRequestSchema"},"RaceSchema":{"properties":{"race_number":{"type":"integer","title":"Race Number"},"circuit_layout_id":{"type":"string","title":"Circuit Layout Id"},"car_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Id"},"laps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Laps"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes"},"race_mode":{"type":"string","title":"Race Mode","default":"laps"},"weather":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weather"},"virtual_start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Virtual Start Time"},"qualifying_laps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Qualifying Laps"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"}},"type":"object","required":["race_number","circuit_layout_id"],"title":"RaceSchema"},"RaceSyncSchema":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"race_number":{"type":"integer","title":"Race Number"},"circuit_layout_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Circuit Layout Id"},"car_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Id"},"laps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Laps"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes"},"race_mode":{"type":"string","title":"Race Mode","default":"laps"},"weather":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weather"},"virtual_start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Virtual Start Time"},"qualifying_laps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Qualifying Laps"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"practice_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Practice Enabled"},"qualify_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Qualify Enabled"}},"type":"object","required":["race_number"],"title":"RaceSyncSchema"},"RegistrationUpdateSchema":{"properties":{"event_team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Team Id"},"car_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"event_category_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Category Id"}},"type":"object","title":"RegistrationUpdateSchema"},"ResetCycleSchema":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","default":"Encerramento de Ciclo Desportivo"}},"type":"object","title":"ResetCycleSchema"},"ResultItemSchema":{"properties":{"pilot_id":{"type":"string","title":"Pilot Id"},"position":{"type":"integer","title":"Position"},"best_lap":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Best Lap"},"laps_completed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Laps Completed"},"total_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Time"},"total_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Distance"},"status":{"type":"string","title":"Status","default":"registered"},"is_pole":{"type":"boolean","title":"Is Pole","default":false},"is_fastest_lap":{"type":"boolean","title":"Is Fastest Lap","default":false},"split_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Split Id"},"event_category_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Category Id"},"current_ers":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Ers"},"penal":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Penal"}},"type":"object","required":["pilot_id","position"],"title":"ResultItemSchema"},"ResultsPayloadSchema":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ResultItemSchema"},"type":"array","title":"Results"},"split_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Split Id"}},"type":"object","required":["results"],"title":"ResultsPayloadSchema"},"ReviewCreateSchema":{"properties":{"order_id":{"type":"string","title":"Order Id"},"rating":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Rating"},"comment":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Comment"}},"type":"object","required":["order_id","rating"],"title":"ReviewCreateSchema"},"SeasonCreateSchema":{"properties":{"name":{"type":"string","title":"Name"},"season_number":{"type":"integer","title":"Season Number"},"starts_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ends At"}},"type":"object","required":["name","season_number"],"title":"SeasonCreateSchema"},"SellerOnboardSchema":{"properties":{"store_name":{"type":"string","maxLength":60,"minLength":3,"title":"Store Name"},"bio":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Bio"},"pix_key_type":{"type":"string","title":"Pix Key Type","default":"cpf"},"pix_key":{"type":"string","maxLength":100,"minLength":5,"title":"Pix Key"}},"type":"object","required":["store_name","pix_key"],"title":"SellerOnboardSchema"},"SessionCreateSchema":{"properties":{"session_type":{"type":"string","title":"Session Type"},"session_number":{"type":"integer","title":"Session Number","default":1},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"laps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Laps"},"duration_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Min"},"generates_ers":{"type":"boolean","title":"Generates Ers","default":true},"grid_from_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grid From Session Id"}},"type":"object","required":["session_type"],"title":"SessionCreateSchema"},"SplitCreateSchema":{"properties":{"split_number":{"type":"integer","title":"Split Number"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"max_pilots":{"type":"integer","title":"Max Pilots","default":12}},"type":"object","required":["split_number"],"title":"SplitCreateSchema"},"TeamCreateSchema":{"properties":{"name":{"type":"string","title":"Name"},"tag":{"type":"string","title":"Tag"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"banner_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Banner Url"},"discord_role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discord Role Id"}},"type":"object","required":["name","tag"],"title":"TeamCreateSchema"},"TeamUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"banner_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Banner Url"},"discord_role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discord Role Id"}},"type":"object","title":"TeamUpdateSchema"},"UserRoleAssignSchema":{"properties":{"role_id":{"type":"integer","title":"Role Id"},"subscription_tier":{"type":"string","title":"Subscription Tier","default":"free"}},"type":"object","required":["role_id"],"title":"UserRoleAssignSchema"},"UserUpdateSchema":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Display Name","strip_whitespace":true},"avatar_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Avatar Url"},"bio":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Bio","strip_whitespace":true},"location":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Location"},"country_code":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}],"title":"Country Code"},"preferred_language":{"anyOf":[{"type":"string","pattern":"^(pt-BR|en|es)$"},{"type":"null"}],"title":"Preferred Language"},"priority_game_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority Game Id"},"privacy_policy_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Version"},"privacy_policy_accepted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Accepted At"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UserUpdateSchema"},"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"},"VoteSchema":{"properties":{"vote":{"type":"string","title":"Vote"},"justification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Justification"},"is_recused":{"type":"boolean","title":"Is Recused","default":false},"suggested_severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Severity"},"suggested_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Suggested Points"}},"type":"object","required":["vote"],"title":"VoteSchema"},"XboxLinkSchema":{"properties":{"gamertag":{"type":"string","maxLength":50,"minLength":1,"title":"Gamertag","strip_whitespace":true}},"type":"object","required":["gamertag"],"title":"XboxLinkSchema"},"app__routers__admin__EventUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At"},"is_paid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Paid"},"entry_fee_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entry Fee Tokens"}},"type":"object","title":"EventUpdateSchema"},"app__routers__events__EventUpdateSchema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"game_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Game Id"},"category_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Id"},"season_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Season Id"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At"},"scoring_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scoring Template"},"is_paid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Paid"},"entry_fee_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entry Fee Tokens"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"},"license_check_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"License Check Enabled"},"min_license_tier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min License Tier Id"},"max_license_tier_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max License Tier Id"},"min_ers":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Ers"},"registration_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Registration Limit"},"has_splits":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Splits"},"slots_per_split":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Slots Per Split"},"check_admin_penalties":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Check Admin Penalties"},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"regulations_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Regulations Url"},"whatsapp_group_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Whatsapp Group Link"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"car_classes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Car Classes"},"broadcast_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broadcast Url"},"scoring_settings":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Scoring Settings"},"commission_settings":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Commission Settings"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"difficulty":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Difficulty"},"has_categories":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Categories"},"registrations_locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Registrations Locked"},"allow_reserves":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Reserves"}},"type":"object","title":"EventUpdateSchema"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}