{"openapi":"3.0.3","info":{"title":"Contratei API","version":"1.0.0","summary":"API do SaaS de RH Contratei","description":"API para operacao do Contratei: onboarding de empresa, organograma, vagas, candidatos, testes psicometricos, match com IA, chat contextual e fluxos LGPD.\n\nAutenticacao: os endpoints privados usam cookie de sessao emitido pelo Better Auth em `/api/auth/*`.\nMulti-tenant: os recursos autenticados sao sempre resolvidos pelo usuario autenticado e filtrados por `companyId` no backend.\nWorkspace: a empresa ativa vem da sessao (`active_company_id`); rotas de tenant usam `requireActiveWorkspace`. Usuarios podem pertencer a varias empresas via `company_memberships` e aceitar convites em `company_invites`.\nPublico: endpoints em `/api/public/*` nao exigem login e usam tokens/link publico quando necessario.","contact":{"name":"Contratei","email":"hub@enviagora.com.br"}},"servers":[{"url":"http://localhost:3333","description":"Local backend"}],"tags":[{"name":"Health","description":"Saude e metadados basicos da API."},{"name":"Auth","description":"Autenticacao via Better Auth. Os contratos seguem a biblioteca."},{"name":"Company","description":"Empresa, onboarding, contexto cultural e configuracoes."},{"name":"Workspace","description":"Multi-empresa: criar empresa, trocar sessao ativa, membros e convites."},{"name":"Lookups","description":"Consultas auxiliares como CEP e CNPJ."},{"name":"Organogram","description":"Colaboradores, lideranca direta e personalidade de colaboradores."},{"name":"Jobs","description":"Vagas, publicacao, campos de briefing e candidatos por vaga."},{"name":"Public","description":"Endpoints sem login para candidatos e titulares de dados."},{"name":"Uploads","description":"URLs pre-assinadas para upload de arquivos."},{"name":"Candidates","description":"Base de candidatos, dados profissionais e conversao em colaborador."},{"name":"Applications","description":"Candidaturas e pipeline por vaga."},{"name":"Test Links","description":"Links e execucao de testes DISC, Eneagrama e 16P."},{"name":"AI","description":"Geracao de vaga, JD estruturada e execucoes com IA."},{"name":"Match","description":"Processamento e relatorios de match candidato x vaga x lider x cultura."},{"name":"Chat","description":"Assistente de RH contextual e streaming SSE."},{"name":"Compliance","description":"LGPD, consentimento, anonimizar/deletar e acesso do titular."},{"name":"Observability","description":"Feature flags, captura de erros sanitizada e eventos operacionais."}],"security":[{"sessionCookie":[]}],"components":{"securitySchemes":{"sessionCookie":{"type":"apiKey","in":"cookie","name":"better-auth.session_token","description":"Cookie de sessao criado pelos endpoints `/api/auth/*`."}},"schemas":{"ErrorResponse":{"type":"object","properties":{"error":{"type":"string","examples":["Erro de validacao"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}},"required":["error"]},"HealthResponse":{"type":"object","properties":{"status":{"type":"string","examples":["ok"]},"service":{"type":"string","examples":["contratei-backend"]}},"required":["status","service"]},"ApiInfoResponse":{"type":"object","properties":{"name":{"type":"string","examples":["contratei api"]},"version":{"type":"string","examples":["v1"]}},"required":["name","version"]},"FeatureFlags":{"type":"object","description":"Flags de produto aplicadas pelo backend para desligar capacidades criticas sem deploy.","properties":{"ai":{"type":"boolean","description":"Geração de textos/JDs com IA."},"match":{"type":"boolean","description":"Fila e processamento de match."},"chat":{"type":"boolean","description":"Chat contextual e streaming."},"uploads":{"type":"boolean","description":"Criação de URLs pre-assinadas para upload."},"publicApplication":{"type":"boolean","description":"Candidatura publica de candidatos."}},"required":["ai","match","chat","uploads","publicApplication"]},"FrontendErrorInput":{"type":"object","description":"Erro capturado no browser. O backend sanitiza dados pessoais antes de persistir.","properties":{"message":{"type":"string","maxLength":1200},"name":{"type":"string","maxLength":120},"stack":{"type":"string","maxLength":4000},"path":{"type":"string","maxLength":500},"source":{"type":"string","maxLength":300},"component":{"type":"string","maxLength":120},"context":{"type":"object","additionalProperties":true}},"required":["message"]},"AuthUser":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","format":"email"},"name":{"type":"string","nullable":true},"role":{"type":"string","enum":["admin","recruiter","viewer"],"nullable":true}},"required":["id","email"]},"Company":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"cnpj":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"website":{"type":"string","nullable":true},"logoUrl":{"type":"string","nullable":true},"logoViewUrl":{"type":"string","nullable":true},"profileType":{"type":"string","nullable":true},"context":{"type":"string","nullable":true},"values":{"type":"array","items":{"type":"string"}},"challenges":{"type":"string","nullable":true},"leadershipStyle":{"type":"string","nullable":true},"onboardingCompleted":{"type":"boolean"},"testLinkExpiresInHours":{"type":"integer","examples":[72]},"candidateRetentionMonths":{"type":"integer","minimum":1,"maximum":60,"examples":[6]}},"required":["id","name","onboardingCompleted"]},"MeResponse":{"type":"object","properties":{"authUser":{"$ref":"#/components/schemas/AuthUser"},"user":{"$ref":"#/components/schemas/User"},"company":{"$ref":"#/components/schemas/Company","nullable":true},"activeCompany":{"$ref":"#/components/schemas/Company","nullable":true},"companies":{"type":"array","items":{"type":"object","properties":{"company":{"$ref":"#/components/schemas/Company"},"membership":{"$ref":"#/components/schemas/CompanyMembership"}}}},"membershipRole":{"type":"string","enum":["admin","recruiter","viewer"],"nullable":true},"pendingInvites":{"type":"array","items":{"$ref":"#/components/schemas/CompanyInviteSummary"}},"createdDefault":{"type":"boolean"},"defaultsCreated":{"type":"boolean"}},"required":["authUser","user","createdDefault"]},"CompanyMembership":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"companyId":{"type":"string","format":"uuid"},"userId":{"type":"string","format":"uuid"},"role":{"type":"string","enum":["admin","recruiter","viewer"]},"status":{"type":"string","enum":["active","revoked"]},"joinedAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","companyId","userId","role","status"]},"CompanyInviteSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"companyId":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["admin","recruiter","viewer"]},"expiresAt":{"type":"string","format":"date-time","nullable":true}},"required":["id","companyId","email","role"]},"CreateCompanyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":180}},"required":["name"]},"SwitchCompanyInput":{"type":"object","properties":{"companyId":{"type":"string","format":"uuid"}},"required":["companyId"]},"InviteMemberInput":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["admin","recruiter","viewer"]}},"required":["email","role"]},"PatchMemberInput":{"type":"object","properties":{"role":{"type":"string","enum":["admin","recruiter","viewer"]},"revoke":{"type":"boolean"}}},"User":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"companyId":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email"},"name":{"type":"string"},"role":{"type":"string","enum":["admin","recruiter","viewer"]}},"required":["id","companyId","email","name","role"]},"UpdateCompanyInput":{"type":"object","properties":{"name":{"type":"string"},"cnpj":{"type":"string"},"address":{"type":"string"},"website":{"type":"string"},"logoUrl":{"type":"string"},"profileType":{"type":"string"},"context":{"type":"string","description":"Minimo de 100 palavras ao concluir onboarding."},"values":{"type":"array","items":{"type":"string"}},"challenges":{"type":"string"},"leadershipStyle":{"type":"string"},"onboardingCompleted":{"type":"boolean"},"testLinkExpiresInHours":{"type":"integer","minimum":24,"maximum":336},"candidateRetentionMonths":{"type":"integer","minimum":1,"maximum":60}}},"OrganogramNode":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"companyId":{"type":"string","format":"uuid"},"name":{"type":"string"},"role":{"type":"string"},"department":{"type":"string","nullable":true},"email":{"type":"string","format":"email","nullable":true},"parentId":{"type":"string","format":"uuid","nullable":true}},"required":["id","companyId","name","role"]},"OrganogramNodeInput":{"type":"object","properties":{"name":{"type":"string"},"role":{"type":"string"},"department":{"type":"string"},"email":{"type":"string","format":"email"},"parentId":{"type":"string","format":"uuid","nullable":true}},"required":["name","role"]},"DiscResult":{"type":"object","properties":{"scores":{"type":"object","properties":{"D":{"type":"number"},"I":{"type":"number"},"S":{"type":"number"},"C":{"type":"number"}}},"primary":{"type":"string","enum":["D","I","S","C"]},"summary":{"type":"string"}}},"EnneagramResult":{"type":"object","properties":{"type":{"type":"integer","minimum":1,"maximum":9},"wing":{"type":"string","nullable":true},"scores":{"type":"object","additionalProperties":{"type":"number"}},"summary":{"type":"string"}}},"MbtiResult":{"type":"object","properties":{"type":{"type":"string","examples":["ENTJ"]},"typeName":{"type":"string","examples":["Comandante"]},"typeLabel":{"type":"string","examples":["ENTJ - Comandante"]},"dimensions":{"type":"object","additionalProperties":true},"summary":{"type":"string"}}},"PersonalityResult":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"subjectType":{"type":"string","enum":["candidate","employee"]},"subjectId":{"type":"string","format":"uuid"},"disc":{"$ref":"#/components/schemas/DiscResult"},"enneagram":{"$ref":"#/components/schemas/EnneagramResult"},"mbti":{"$ref":"#/components/schemas/MbtiResult"}}},"PersonalityInput":{"type":"object","properties":{"disc":{"type":"object","additionalProperties":true},"enneagram":{"type":"object","additionalProperties":true},"mbti":{"type":"object","additionalProperties":true}},"required":["disc","enneagram","mbti"]},"Job":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"companyId":{"type":"string","format":"uuid"},"title":{"type":"string"},"leaderId":{"type":"string","format":"uuid","nullable":true},"reason":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"responsibilities":{"type":"string","nullable":true},"goals":{"type":"string","nullable":true},"jdGenerated":{"type":"string","nullable":true},"salaryMin":{"type":"integer","nullable":true},"salaryMax":{"type":"integer","nullable":true},"salaryBreakdown":{"type":"object","additionalProperties":true,"nullable":true},"idealProfile":{"type":"object","additionalProperties":true,"nullable":true},"status":{"type":"string","enum":["draft","published","closed"]},"publicUrl":{"type":"string","nullable":true}},"required":["id","companyId","title","status"]},"JobInput":{"type":"object","properties":{"title":{"type":"string"},"leaderId":{"type":"string","format":"uuid"},"reason":{"type":"string"},"description":{"type":"string"},"responsibilities":{"type":"string"},"goals":{"type":"string"},"jdGenerated":{"type":"string"},"salaryMin":{"type":"integer","minimum":1},"salaryMax":{"type":"integer","minimum":1},"salaryBreakdownJson":{"type":"string","description":"JSON serializado com encargos e beneficios."},"idealProfileJson":{"type":"string","description":"JSON serializado com perfil DISC/Eneagrama/16P ideal."},"status":{"type":"string","enum":["draft","published","closed"]}},"required":["title"]},"PublicJob":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"description":{"type":"string","nullable":true},"company":{"$ref":"#/components/schemas/Company"},"screeningQuestions":{"type":"array","items":{"type":"string"}}}},"Candidate":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"companyId":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"linkedinUrl":{"type":"string","nullable":true},"cvUrl":{"type":"string","nullable":true},"answersJson":{"type":"string","nullable":true},"interviewText":{"type":"string","nullable":true},"convertedToEmployeeNodeId":{"type":"string","format":"uuid","nullable":true}},"required":["id","companyId","name","email"]},"CandidateInput":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"linkedinUrl":{"type":"string"},"cvUrl":{"type":"string"},"answersJson":{"type":"string"},"interviewText":{"type":"string"}},"required":["name","email"]},"PublicApplicationInput":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"linkedinUrl":{"type":"string"},"cvUrl":{"type":"string"},"answers":{"type":"object","additionalProperties":true},"lgpdConsent":{"type":"boolean","const":true}},"required":["name","email","lgpdConsent"]},"Application":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"jobId":{"type":"string","format":"uuid"},"candidateId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["new","screening","interview","challenge","offer","hired","rejected"]}},"required":["id","jobId","candidateId","status"]},"ApplicationInput":{"type":"object","properties":{"jobId":{"type":"string","format":"uuid"},"candidateId":{"type":"string","format":"uuid"},"status":{"type":"string"}},"required":["jobId","candidateId"]},"MoveApplicationInput":{"type":"object","properties":{"status":{"type":"string","enum":["new","screening","interview","challenge","offer","hired","rejected"]}},"required":["status"]},"UploadIntentInput":{"type":"object","properties":{"fileName":{"type":"string","examples":["curriculo.pdf"]},"contentType":{"type":"string","examples":["application/pdf"]},"size":{"type":"integer","examples":[482930]},"kind":{"type":"string","examples":["cv"]}},"required":["fileName","contentType","size"]},"UploadIntentResponse":{"type":"object","properties":{"uploadUrl":{"type":"string","nullable":true},"publicUrl":{"type":"string","nullable":true},"method":{"type":"string","examples":["PUT"]},"headers":{"type":"object","additionalProperties":{"type":"string"}},"expiresInSeconds":{"type":"integer"},"storageConfigured":{"type":"boolean"}}},"TestLink":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"token":{"type":"string"},"type":{"type":"string","enum":["candidate","employee"]},"candidateId":{"type":"string","format":"uuid","nullable":true},"employeeNodeId":{"type":"string","format":"uuid","nullable":true},"expiresAt":{"type":"string","format":"date-time","nullable":true},"completedAt":{"type":"string","format":"date-time","nullable":true},"testUrl":{"type":"string"}}},"CreateTestLinkInput":{"type":"object","properties":{"type":{"type":"string","enum":["candidate","employee"]},"candidateId":{"type":"string","format":"uuid"},"employeeNodeId":{"type":"string","format":"uuid"},"candidateName":{"type":"string"},"candidateEmail":{"type":"string","format":"email"},"expiresInHours":{"type":"integer","minimum":1,"examples":[72]}},"required":["type"]},"SaveProgressInput":{"type":"object","properties":{"currentStep":{"type":"string","examples":["disc"]},"answers":{"type":"object","additionalProperties":true}},"required":["answers"]},"SubmitTestInput":{"type":"object","properties":{"candidateName":{"type":"string"},"candidateEmail":{"type":"string","format":"email"},"discAnswers":{"type":"object","additionalProperties":true},"enneagramAnswers":{"type":"object","additionalProperties":true},"mbtiAnswers":{"type":"object","additionalProperties":true},"lgpdConsent":{"type":"boolean","const":true}},"required":["discAnswers","enneagramAnswers","mbtiAnswers","lgpdConsent"]},"MatchReport":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"jobId":{"type":"string","format":"uuid"},"candidateId":{"type":"string","format":"uuid"},"rankingPosition":{"type":"integer"},"matchScore":{"type":"number"},"report":{"type":"object","properties":{"summary":{"type":"string"},"strengths":{"type":"array","items":{"type":"string"}},"concerns":{"type":"array","items":{"type":"string"}},"leaderGuidance":{"type":"string"},"interviewQuestions":{"type":"array","items":{"type":"string"}},"challenge":{"type":"string"},"developmentPlan":{"type":"object","additionalProperties":true}},"additionalProperties":true}}},"RunMatchInput":{"type":"object","properties":{"candidateIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Opcional. Quando ausente, processa os candidatos da vaga."}}},"AiJobDescriptionInput":{"type":"object","properties":{"title":{"type":"string"},"context":{"type":"string"}},"required":["title"]},"StructuredJobInput":{"type":"object","properties":{"title":{"type":"string"},"leaderName":{"type":"string"},"reason":{"type":"string"},"responsibilities":{"type":"string"},"goals":{"type":"string"},"seniority":{"type":"string"},"location":{"type":"string"},"salaryHint":{"type":"string"}},"required":["title","responsibilities"]},"AiRunResponse":{"type":"object","properties":{"runId":{"type":"string","format":"uuid"},"provider":{"type":"string","examples":["anthropic"]},"suggestion":{"type":"string"},"blueprint":{"type":"object","additionalProperties":true}}},"ThreadInput":{"type":"object","properties":{"candidateId":{"type":"string","format":"uuid"}}},"ChatMessageInput":{"type":"object","properties":{"message":{"type":"string"},"candidateId":{"type":"string","format":"uuid"}},"required":["message"]},"ChatResponse":{"type":"object","properties":{"threadId":{"type":"string","format":"uuid"},"provider":{"type":"string"},"response":{"type":"string"}}},"PrivacyActionInput":{"type":"object","properties":{"action":{"type":"string","enum":["anonymize","delete"]},"reason":{"type":"string"}},"required":["action"]},"ConvertCandidateInput":{"type":"object","properties":{"role":{"type":"string"},"department":{"type":"string"},"parentId":{"type":"string","format":"uuid","nullable":true}},"required":["role"]}},"responses":{"BadRequest":{"description":"Erro de validacao ou parametros invalidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unauthorized":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotFound":{"description":"Recurso nao encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Conflict":{"description":"Conflito com dados existentes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Gone":{"description":"Token expirado, invalido ou ja utilizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UpstreamFailure":{"description":"Falha em servico externo","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"TooManyRequests":{"description":"Limite de requisicoes excedido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"InternalError":{"description":"Erro interno do servidor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/health":{"get":{"tags":["Health"],"security":[],"summary":"Verificar saude do backend","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/v1":{"get":{"tags":["Health"],"security":[],"summary":"Obter metadados basicos da API","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiInfoResponse"}}}}}}},"/api/v1/features":{"get":{"tags":["Observability"],"security":[],"summary":"Listar feature flags ativas","description":"Retorna o estado atual das flags de IA, match, chat, uploads e candidatura publica.","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlags"}}}}}}},"/api/v1/observability/error":{"post":{"tags":["Observability"],"security":[],"summary":"Registrar erro de frontend","description":"Recebe erros capturados no browser. O payload e filtrado para remover dados pessoais e gravado como evento de observabilidade.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrontendErrorInput"}}}},"responses":{"202":{"description":"Solicitacao aceita para processamento","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]}}}},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/auth/sign-up/email":{"post":{"tags":["Auth"],"security":[],"summary":"Criar conta com email e senha","description":"Endpoint provido pelo Better Auth. Retorna sessao/cookies conforme configuracao da biblioteca.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8},"name":{"type":"string"}},"required":["email","password","name"]}}}},"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/auth/sign-in/email":{"post":{"tags":["Auth"],"security":[],"summary":"Entrar com email e senha","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]}}}},"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/api/auth/sign-out":{"post":{"tags":["Auth"],"summary":"Encerrar sessao","responses":{"200":{"description":"Operacao concluida com sucesso"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/auth/request-password-reset":{"post":{"tags":["Auth"],"security":[],"summary":"Solicitar redefinicao de senha","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}},"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/auth/reset-password":{"post":{"tags":["Auth"],"security":[],"summary":"Redefinir senha usando token","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"newPassword":{"type":"string","minLength":8}},"required":["newPassword"]}}}},"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/api/v1/me":{"get":{"tags":["Auth"],"summary":"Obter usuario, empresa e contexto do tenant autenticado","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/company":{"get":{"tags":["Company"],"summary":"Buscar empresa do usuario autenticado","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"patch":{"tags":["Company"],"summary":"Atualizar empresa, onboarding e contexto cultural","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCompanyInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Company"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/companies":{"post":{"tags":["Workspace"],"summary":"Criar nova empresa e vincular o usuario como administrador","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCompanyInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"company":{"$ref":"#/components/schemas/Company"},"membership":{"$ref":"#/components/schemas/CompanyMembership"},"activeCompanyId":{"type":"string","format":"uuid"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/session/company":{"post":{"tags":["Workspace"],"summary":"Definir empresa ativa na sessao do usuario","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchCompanyInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"activeCompanyId":{"type":"string","format":"uuid","nullable":true},"company":{"$ref":"#/components/schemas/Company","nullable":true},"membership":{"$ref":"#/components/schemas/CompanyMembership","nullable":true},"role":{"type":"string","enum":["admin","recruiter","viewer"],"nullable":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/company/members":{"get":{"tags":["Workspace"],"summary":"Listar membros ativos e convites pendentes (admin)","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","additionalProperties":true}},"invites":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/company/members/{id}":{"patch":{"tags":["Workspace"],"summary":"Alterar papel ou revogar membro (admin)","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchMemberInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"membership":{"$ref":"#/components/schemas/CompanyMembership"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"description":"Ultimo administrador da empresa","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/company/invites":{"get":{"tags":["Workspace"],"summary":"Listar convites pendentes da empresa (admin)","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"invites":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Workspace"],"summary":"Convidar membro por e-mail (admin)","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteMemberInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"object","additionalProperties":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"E-mail ja e membro ou ja possui convite pendente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/company/invites/{id}":{"delete":{"tags":["Workspace"],"summary":"Revogar convite pendente (admin)","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/company/invites/{id}/accept":{"post":{"tags":["Workspace"],"summary":"Aceitar convite e ativar membership","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"membership":{"$ref":"#/components/schemas/CompanyMembership"},"activeCompanyId":{"type":"string","format":"uuid"}}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/lookups/cep/{cep}":{"get":{"tags":["Lookups"],"summary":"Consultar endereco por CEP via ViaCEP","parameters":[{"name":"cep","in":"path","required":true,"schema":{"type":"string","examples":["01311000"]}}],"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"502":{"$ref":"#/components/responses/UpstreamFailure"}}}},"/api/v1/lookups/cnpj/{cnpj}":{"get":{"tags":["Lookups"],"summary":"Consultar empresa por CNPJ via BrasilAPI","parameters":[{"name":"cnpj","in":"path","required":true,"schema":{"type":"string","examples":["11222333000181"]}}],"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"502":{"$ref":"#/components/responses/UpstreamFailure"}}}},"/api/v1/organogram":{"get":{"tags":["Organogram"],"summary":"Listar colaboradores do organograma","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrganogramNode"}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Organogram"],"summary":"Criar colaborador no organograma","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganogramNodeInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganogramNode"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/organogram/{id}":{"patch":{"tags":["Organogram"],"summary":"Atualizar colaborador do organograma","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganogramNodeInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganogramNode"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Organogram"],"summary":"Remover colaborador do organograma","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Recurso removido com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/organogram/{id}/personality":{"get":{"tags":["Organogram"],"summary":"Buscar resultado psicometrico de colaborador","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityResult"}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"put":{"tags":["Organogram"],"summary":"Cadastrar ou atualizar resultado psicometrico de colaborador","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs":{"get":{"tags":["Jobs"],"summary":"Listar vagas da empresa","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Jobs"],"summary":"Criar vaga","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/jobs/{id}":{"get":{"tags":["Jobs"],"summary":"Detalhar vaga","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"patch":{"tags":["Jobs"],"summary":"Atualizar vaga","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Jobs"],"summary":"Remover vaga","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"id":{"type":"string","format":"uuid"}}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs/{id}/publish":{"post":{"tags":["Jobs"],"summary":"Publicar vaga e disponibilizar link publico","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs/{jobId}/candidates":{"get":{"tags":["Jobs","Candidates"],"summary":"Listar candidatos vinculados a uma vaga","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Candidate"}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/public/jobs/{id}":{"get":{"tags":["Public","Jobs"],"security":[],"summary":"Obter vaga publica para candidatura","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicJob"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/public/jobs/{id}/uploads/presign":{"post":{"tags":["Public","Uploads"],"security":[],"summary":"Criar URL pre-assinada para upload publico","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadIntentInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadIntentResponse"}}}},"202":{"description":"Solicitacao aceita para processamento","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadIntentResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/public/jobs/{id}/applications":{"post":{"tags":["Public","Applications"],"security":[],"summary":"Enviar candidatura publica","description":"Cria ou reaproveita candidato, registra consentimento LGPD, cria application e gera link de teste quando aplicavel.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApplicationInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/api/v1/uploads/presign":{"post":{"tags":["Uploads"],"summary":"Criar URL pre-assinada para upload interno","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadIntentInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadIntentResponse"}}}},"202":{"description":"Solicitacao aceita para processamento","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadIntentResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/candidates":{"get":{"tags":["Candidates"],"summary":"Listar candidatos nao convertidos em colaboradores","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Candidate"}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Candidates"],"summary":"Criar candidato manual","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Candidate"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"$ref":"#/components/responses/Conflict"}}}},"/api/v1/candidates/{id}":{"patch":{"tags":["Candidates"],"summary":"Atualizar candidato","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Candidate"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}},"delete":{"tags":["Candidates"],"summary":"Excluir candidato","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Recurso removido com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/candidates/{id}/privacy":{"post":{"tags":["Compliance","Candidates"],"summary":"Anonimizar ou deletar candidato por acao administrativa","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyActionInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/candidates/{id}/convert-to-employee":{"post":{"tags":["Candidates","Organogram"],"summary":"Converter candidato contratado em colaborador","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertCandidateInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/api/v1/candidates/{id}/personality":{"get":{"tags":["Candidates"],"summary":"Buscar resultado psicometrico de candidato","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityResult"}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"put":{"tags":["Candidates"],"summary":"Cadastrar ou atualizar resultado psicometrico de candidato","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/applications":{"post":{"tags":["Applications"],"summary":"Criar candidatura interna","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/api/v1/jobs/{jobId}/applications":{"get":{"tags":["Applications"],"summary":"Listar candidaturas da vaga","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Application"}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/applications/{id}/status":{"patch":{"tags":["Applications"],"summary":"Mover candidatura no pipeline","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveApplicationInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/test-links":{"get":{"tags":["Test Links"],"summary":"Listar links de teste da empresa","responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TestLink"}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Test Links"],"summary":"Criar link unico de teste para candidato ou colaborador","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTestLinkInput"}}}},"responses":{"201":{"description":"Recurso criado com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLink"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/test-links/{id}/reminder":{"post":{"tags":["Test Links"],"summary":"Enviar lembrete manual para um link de teste pendente","description":"Reenvia o email de teste para o candidato ou colaborador vinculado e atualiza reminderSentAt. Links expirados ou concluidos nao recebem lembrete.","parameters":[{"name":"id","in":"path","required":true,"description":"Identificador UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestLink"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"410":{"$ref":"#/components/responses/Gone"}}}},"/api/public/test/{token}":{"get":{"tags":["Public","Test Links"],"security":[],"summary":"Abrir link publico de teste","parameters":[{"name":"token","in":"path","required":true,"description":"Token publico unico","schema":{"type":"string","minLength":16}}],"responses":{"200":{"description":"Operacao concluida com sucesso"},"404":{"$ref":"#/components/responses/NotFound"},"410":{"$ref":"#/components/responses/Gone"}}}},"/api/public/test/{token}/progress":{"post":{"tags":["Public","Test Links"],"security":[],"summary":"Salvar progresso parcial do teste","parameters":[{"name":"token","in":"path","required":true,"description":"Token publico unico","schema":{"type":"string","minLength":16}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveProgressInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"410":{"$ref":"#/components/responses/Gone"}}}},"/api/public/test/{token}/submit":{"post":{"tags":["Public","Test Links"],"security":[],"summary":"Concluir teste e gerar resultados","description":"Calcula DISC, Eneagrama e 16P, salva personalidade, marca link como concluido e dispara PDF/e-mails quando configurado.","parameters":[{"name":"token","in":"path","required":true,"description":"Token publico unico","schema":{"type":"string","minLength":16}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitTestInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"410":{"$ref":"#/components/responses/Gone"}}}},"/api/public/test-questions":{"get":{"tags":["Public","Test Links"],"security":[],"summary":"Listar perguntas dos testes DISC, Eneagrama e 16P","responses":{"200":{"description":"Operacao concluida com sucesso"}}}},"/api/public/me/{token}":{"get":{"tags":["Public","Compliance"],"security":[],"summary":"Consultar dados pessoais pelo token publico","parameters":[{"name":"token","in":"path","required":true,"description":"Token publico unico","schema":{"type":"string","minLength":16}}],"responses":{"200":{"description":"Operacao concluida com sucesso"},"404":{"$ref":"#/components/responses/NotFound"}}},"patch":{"tags":["Public","Compliance"],"security":[],"summary":"Atualizar dados pessoais pelo token publico","parameters":[{"name":"token","in":"path","required":true,"description":"Token publico unico","schema":{"type":"string","minLength":16}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandidateInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso"},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}},"delete":{"tags":["Public","Compliance"],"security":[],"summary":"Anonimizar dados pessoais pelo token publico","parameters":[{"name":"token","in":"path","required":true,"description":"Token publico unico","schema":{"type":"string","minLength":16}}],"responses":{"200":{"description":"Operacao concluida com sucesso"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/ai/job-description":{"post":{"tags":["AI"],"summary":"Gerar sugestao simples de descricao de vaga","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiJobDescriptionInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiRunResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/jobs/{jobId}/ai/description":{"post":{"tags":["AI","Jobs"],"summary":"Gerar descricao de uma vaga existente","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiRunResponse"}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/ai/jobs/structured":{"post":{"tags":["AI","Jobs"],"summary":"Gerar vaga estruturada com JD, salario, perguntas e perfil ideal","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructuredJobInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiRunResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/jobs/{jobId}/match":{"post":{"tags":["Match"],"summary":"Enfileirar analise de match com IA","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunMatchInput"}}}},"responses":{"202":{"description":"Solicitacao aceita para processamento","content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string","format":"uuid"},"status":{"type":"string","examples":["queued"]}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"get":{"tags":["Match"],"summary":"Listar relatorios de match da vaga","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MatchReport"}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs/{jobId}/matches/{candidateId}":{"get":{"tags":["Match"],"summary":"Detalhar match de um candidato","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}},{"name":"candidateId","in":"path","required":true,"description":"ID do candidato","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatchReport"}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs/{jobId}/matches/{candidateId}/pdf":{"get":{"tags":["Match"],"summary":"Gerar PDF do relatorio de match","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}},{"name":"candidateId","in":"path","required":true,"description":"ID do candidato","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"PDF gerado","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs/{jobId}/matches/{candidateId}/send-email":{"post":{"tags":["Match"],"summary":"Enviar relatorio de match por email","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}},{"name":"candidateId","in":"path","required":true,"description":"ID do candidato","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs/{jobId}/ai/thread":{"post":{"tags":["Chat","AI"],"summary":"Criar ou obter thread de chat contextual da vaga","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreadInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso"},"201":{"description":"Recurso criado com sucesso"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs/{jobId}/ai/thread/{threadId}/messages":{"get":{"tags":["Chat","AI"],"summary":"Listar mensagens da thread","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}},{"name":"threadId","in":"path","required":true,"description":"ID da thread de chat","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true}}}}},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"post":{"tags":["Chat","AI"],"summary":"Enviar mensagem para o assistente de RH","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}},{"name":"threadId","in":"path","required":true,"description":"ID da thread de chat","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/jobs/{jobId}/ai/thread/{threadId}/messages/stream":{"post":{"tags":["Chat","AI"],"summary":"Enviar mensagem e receber resposta via SSE","description":"Retorna eventos `meta`, `token`, `done` e `error` no formato `text/event-stream`.","parameters":[{"name":"jobId","in":"path","required":true,"description":"ID da vaga","schema":{"type":"string","format":"uuid"}},{"name":"threadId","in":"path","required":true,"description":"ID da thread de chat","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageInput"}}}},"responses":{"200":{"description":"Stream SSE","content":{"text/event-stream":{"schema":{"type":"string"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/ai/chat":{"post":{"tags":["Chat","AI"],"summary":"Chat geral com IA contextual","description":"Endpoint legado/geral. Usa rate limit de 10 mensagens por minuto por usuario.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageInput"}}}},"responses":{"200":{"description":"Operacao concluida com sucesso","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"description":"Sessao ausente ou invalida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Usuario autenticado sem permissao para esta acao","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"}}}}}}