{"openapi":"3.1.0","info":{"title":"Sindri - REST API","description":"REST API para o Sindri. Expoe todas as capacidades do SDK (pipelines, analytics, validation, scheduling, storage, AI agents) via endpoints HTTP com autenticacao JWT ou API Key.\n\n**Quick Start:** `POST /api/v1/auth/login` para obter token, depois use `Authorization: Bearer <token>` em todas as requests.\n\n**Docs interativas:** Acesse `/docs` para explorar endpoints com Try-It integrado.","version":"1.0.0","contact":{"name":"Sindri Engineering"},"license_info":{"name":"Proprietary"}},"paths":{"/api/v1/auth/login":{"post":{"tags":["auth"],"summary":"Login via credenciais (gateway/local + MFA)","description":"Aceita credenciais via **HTTP Basic** (Authorization header) ou **JSON body** `{username, password}`.\n\nRetorna access JWT + refresh opaco prefixado por tenant.","operationId":"login_api_v1_auth_login_post","requestBody":{"description":"Alternativa ao HTTP Basic: envie username e password no body.","content":{"application/json":{"schema":{"properties":{"username":{"type":"string"},"password":{"type":"string"}},"type":"object","required":["username","password"]}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LoginSuccessResponse"},{"$ref":"#/components/schemas/LoginMfaPendingResponse"},{"$ref":"#/components/schemas/LoginPasswordChangeResponse"}],"title":"Response Login Api V1 Auth Login Post"}}}}},"security":[{"HTTPBasic":[]},{"HTTPBasic":[]},{}]}},"/api/v1/auth/whoami":{"get":{"tags":["auth"],"summary":"Info do usuario autenticado","description":"Retorna informacoes do usuario autenticado a partir do JWT.","operationId":"whoami_api_v1_auth_whoami_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhoAmIResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/refresh":{"post":{"tags":["auth"],"summary":"Renovar sessao (rotacao server-side do refresh opaco)","description":"Rotaciona o refresh opaco prefixado e re-minta o access JWT (com sid).","operationId":"refresh_api_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionRefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/sessions":{"get":{"tags":["auth"],"summary":"Listar sessoes ativas do usuario autenticado","description":"Lista as sessoes ativas (uma por session_id vivo) do usuario corrente.","operationId":"list_sessions_api_v1_auth_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionListResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Logout: revoga a sessao do token corrente (sid do JWT)","description":"Revoga a sessao corrente identificada pelo claim sid do access JWT.","operationId":"logout_api_v1_auth_logout_post","responses":{"204":{"description":"Successful Response"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/sessions/revoke-all":{"post":{"tags":["auth"],"summary":"Revogar todas as sessoes do usuario autenticado","description":"Revoga em cascade todas as sessoes vivas do usuario corrente.","operationId":"revoke_all_api_v1_auth_sessions_revoke_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeAllResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/password":{"post":{"tags":["auth"],"summary":"Trocar a propria senha (self-service)","description":"Troca a senha do usuario autenticado via ChangeOwnPasswordUseCase.","operationId":"change_password_api_v1_auth_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/mfa/totp/enroll":{"post":{"tags":["auth"],"summary":"Iniciar enrollment TOTP (self-service)","description":"Cria fator TOTP pendente e devolve a URI de provisionamento (mostrada 1x).","operationId":"totp_enroll_api_v1_auth_mfa_totp_enroll_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFATOTPEnrollRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFATOTPEnrollResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/mfa/totp/{factor_id}/activate":{"post":{"tags":["auth"],"summary":"Ativar fator TOTP pendente (self-service)","description":"Valida o primeiro codigo e ativa o fator TOTP.","operationId":"totp_activate_api_v1_auth_mfa_totp__factor_id__activate_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"factor_id","in":"path","required":true,"schema":{"type":"string","title":"Factor Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFATOTPActivateRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/webauthn/enroll":{"post":{"tags":["auth"],"summary":"Iniciar registro WebAuthn (self-service)","description":"Gera o challenge de registro WebAuthn (options + estado opaco).\n\nConversao na borda inbound: o VO de dominio carrega `state: str` (opaco);\no modelo de resposta REST o reapresenta como `SecretStr` (mascarado em repr,\nexposto 1x no dump JSON). Traducao dominio -> DTO na borda do adapter.","operationId":"webauthn_enroll_api_v1_auth_mfa_webauthn_enroll_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAWebAuthnEnrollRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAWebAuthnEnrollResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/mfa/webauthn/enroll/complete":{"post":{"tags":["auth"],"summary":"Concluir registro WebAuthn (self-service)","description":"Valida a attestation e grava o fator WebAuthn ativo.","operationId":"webauthn_complete_api_v1_auth_mfa_webauthn_enroll_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAWebAuthnCompleteRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/mfa/recovery-codes":{"post":{"tags":["auth"],"summary":"Gerar recovery codes (self-service)","description":"Revoga codes antigos, gera 10 novos e devolve o plaintext 1x.","operationId":"recovery_codes_api_v1_auth_mfa_recovery_codes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFARecoveryCodesResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/mfa/{factor_id}/disable":{"post":{"tags":["auth"],"summary":"Desativar fator de MFA (self-service, re-auth por senha)","description":"Re-autentica por senha e desativa o fator informado.","operationId":"disable_mfa_api_v1_auth_mfa__factor_id__disable_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"factor_id","in":"path","required":true,"schema":{"type":"string","title":"Factor Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFADisableRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/profile":{"patch":{"tags":["auth"],"summary":"Atualizar o proprio perfil (self-service)","description":"Atualiza os campos editaveis do perfil do usuario autenticado.","operationId":"update_profile_api_v1_auth_profile_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/profile/email/request":{"post":{"tags":["auth"],"summary":"Solicitar troca de e-mail (envia token ao novo e-mail)","description":"Inicia a troca de e-mail; resposta uniforme (anti-enumeration).","operationId":"request_email_change_api_v1_auth_profile_email_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestEmailChangeRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailChangeAcceptedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/profile/email/confirm":{"post":{"tags":["auth"],"summary":"Confirmar troca de e-mail com o token recebido","description":"Confirma a troca de e-mail validando o token single-use.","operationId":"confirm_email_change_api_v1_auth_profile_email_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmEmailChangeRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/step-up":{"post":{"tags":["auth"],"summary":"Step-up de identidade (revalida MFA e libera high-risk tools).","description":"Revalida um fator MFA ativo (TOTP, WebAuthn ou recovery code) e emite um novo access JWT com o claim `step_up_verified_at` setado. O claim habilita operacoes high-risk do `BaseAgent` ate `AuthSettings.step_up_ttl_seconds` (default 5 min).\n\nMTR-03 §3.3.1: este endpoint e o caminho canonico para obter o claim sem passar por novo login. O claim tambem e emitido pela conclusao de MFA em `POST /auth/login/mfa/verify`.","operationId":"step_up_api_v1_auth_step_up_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepUpRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepUpResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/mfa/challenge":{"post":{"tags":["auth"],"summary":"(Re)listar fatores do login com MFA pendente","description":"Valida o interino e devolve os fatores ativos a desafiar.","operationId":"mfa_challenge_api_v1_auth_mfa_challenge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAChallengeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAChallengeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/verify/totp":{"post":{"tags":["auth"],"summary":"Concluir login com codigo TOTP (2o passo)","description":"Valida interino + TOTP e emite a sessao server-side.","operationId":"mfa_verify_totp_api_v1_auth_mfa_verify_totp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAVerifyTOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginSuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/verify/webauthn":{"post":{"tags":["auth"],"summary":"Concluir login com assertion WebAuthn (2o passo)","description":"Valida interino + assertion WebAuthn e emite a sessao server-side.","operationId":"mfa_verify_webauthn_api_v1_auth_mfa_verify_webauthn_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAVerifyWebAuthnRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginSuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/verify/recovery":{"post":{"tags":["auth"],"summary":"Concluir login com recovery code (2o passo)","description":"Valida interino + recovery code (single-use) e emite a sessao server-side.","operationId":"mfa_verify_recovery_api_v1_auth_mfa_verify_recovery_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAVerifyRecoveryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginSuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/password/first-access":{"post":{"tags":["auth"],"summary":"Trocar senha no 1o acesso (interino) e emitir sessao","description":"Valida o interino, troca a senha forcada e emite a sessao server-side.","operationId":"first_access_password_api_v1_auth_password_first_access_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirstAccessPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginSuccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/permissions":{"get":{"tags":["auth","auth"],"summary":"Catalogo de permissions (agrupado por categoria)","description":"Retorna o catalogo agrupado por categoria com label/descricao/risco.","operationId":"list_permissions_api_v1_auth_permissions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Permissions Api V1 Auth Permissions Get"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/invite/accept":{"post":{"tags":["auth"],"summary":"Aceitar convite (anonimo)","description":"Aceita o convite e provisiona a conta via AcceptInviteUseCase.","operationId":"accept_invite_api_v1_auth_invite_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/password-reset/request":{"post":{"tags":["auth"],"summary":"Solicitar reset de senha (anonimo)","description":"Inicia o fluxo de reset; 202 sempre (nunca revela se a conta existe).","operationId":"request_password_reset_api_v1_auth_password_reset_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequestRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/password-reset/complete":{"post":{"tags":["auth"],"summary":"Concluir reset de senha (anonimo)","description":"Valida o token do link e troca a senha do dono (org do link).","operationId":"complete_password_reset_api_v1_auth_password_reset_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetCompleteRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/api-keys":{"get":{"tags":["auth"],"summary":"Listar API Keys do tenant","operationId":"list_keys_api_v1_auth_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ListKeysItemResponse"},"type":"array","title":"Response List Keys Api V1 Auth Api Keys Get"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["auth"],"summary":"Criar nova API Key","operationId":"create_key_api_v1_auth_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_CreateKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/auth/api-keys/{key_id}":{"delete":{"tags":["auth"],"summary":"Revogar API Key","operationId":"revoke_key_api_v1_auth_api_keys__key_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/system/health":{"get":{"tags":["system"],"summary":"Health check","description":"Readiness agregado da instancia (mesmos indicators de /health/ready).","operationId":"health_api_v1_system_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"503":{"description":"Alguma dependencia esta DOWN","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/v1/system/registry":{"get":{"tags":["system"],"summary":"Lista endpoints registrados","description":"Lista os endpoints registrados na instancia (mapa de topologia).","operationId":"list_endpoints_api_v1_system_registry_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/system/metrics":{"get":{"tags":["system"],"summary":"Metricas operacionais da API","description":"Retorna metricas de request count, duracao e error rate por endpoint.","operationId":"get_metrics_api_v1_system_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemMetricsResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/system/info":{"get":{"tags":["system"],"summary":"Informacoes da instancia","description":"Retorna informacoes da instancia: versao, BCs ativos, endpoints.","operationId":"get_system_info_api_v1_system_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemInfoResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/system/governor/status":{"get":{"tags":["system"],"summary":"Status do ExecutionGovernor","description":"Retorna status do ExecutionGovernor (slots, fila, metricas).","operationId":"governor_status_api_v1_system_governor_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GovernorStatusResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/system/governor/slots":{"get":{"tags":["system"],"summary":"Slots ativos do Governor","description":"Lista slots de execucao ativos (escopo do tenant; completo com admin:system).","operationId":"governor_slots_api_v1_system_governor_slots_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GovernorSlotsResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/system/logs/stream":{"get":{"tags":["system"],"summary":"Stream de logs em tempo real (SSE)","description":"Conecta ao stream de logs do SDK via Server-Sent Events.","operationId":"log_stream_api_v1_system_logs_stream_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"level","in":"query","required":false,"schema":{"type":"string","description":"Level minimo: DEBUG, INFO, WARNING, ERROR, CRITICAL","default":"INFO","title":"Level"},"description":"Level minimo: DEBUG, INFO, WARNING, ERROR, CRITICAL"}],"responses":{"200":{"description":"SSE de LogRecord (text/event-stream)","content":{"text/event-stream":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/system/logs/recent":{"get":{"tags":["system"],"summary":"Ultimas linhas de log","description":"Retorna ultimas N linhas do buffer de logs (poll fallback).","operationId":"recent_logs_api_v1_system_logs_recent_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Quantidade de linhas","default":50,"title":"Count"},"description":"Quantidade de linhas"},{"name":"level","in":"query","required":false,"schema":{"type":"string","description":"Level minimo","default":"INFO","title":"Level"},"description":"Level minimo"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LogRecordResponse"},"title":"Response Recent Logs Api V1 System Logs Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/system/errors":{"get":{"tags":["System"],"summary":"List Errors","description":"Retorna catalogo completo de error codes em JSON ou HTML conforme Accept.\n\nArgs:\n    request: Request FastAPI.\n    category: Filtrar por categoria (ex: query, storage, pipeline).\n\nReturns:\n    Catalogo filtrado ou completo (JSON ou HTML).","operationId":"list_errors_api_v1_system_errors_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response List Errors Api V1 System Errors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/system/errors/{code}":{"get":{"tags":["System"],"summary":"Get Error","description":"Retorna detalhe de um error code especifico em JSON ou HTML conforme Accept.\n\nArgs:\n    request: Request FastAPI.\n    code: Error code (ex: SQL_EXECUTION_FAILED).\n\nReturns:\n    Entry do catalogo (JSON ou HTML).\n\nRaises:\n    NotFoundError: Se code nao existe no catalogo (traduzido para 404 pelo\n        handler de erro do SDK).","operationId":"get_error_api_v1_system_errors__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Error Api V1 System Errors  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/docs/cli-mapping":{"get":{"tags":["Documentation"],"summary":"Get Cli Mapping","description":"Retorna mapeamento CLI commands para REST endpoints em JSON ou HTML conforme Accept.\n\nArgs:\n    request: Request FastAPI.\n    bc: Filtrar por bounded context (ex: pipelines, scheduling).\n\nReturns:\n    CLIMappingResponse ou HTML formatado.","operationId":"get_cli_mapping_api_v1_docs_cli_mapping_get","parameters":[{"name":"bc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bc"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Cli Mapping Api V1 Docs Cli Mapping Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/docs/quick-start":{"get":{"tags":["Documentation"],"summary":"Get Quick Start","description":"Retorna guia de onboarding em markdown ou HTML conforme Accept.\n\nReturns:\n    JSON com content quando Accept inclui application/json.\n    HTML formatado quando navegador (text/html ou ausente).","operationId":"get_quick_start_api_v1_docs_quick_start_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Quick Start Api V1 Docs Quick Start Get"}}}}}}},"/health/live":{"get":{"tags":["health"],"summary":"Liveness probe","description":"Retorna 200 se o processo esta respondendo. Sem verificacao de dependencias.","operationId":"liveness_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LivenessResponse"}}}}},"security":[]}},"/health/ready":{"get":{"tags":["health"],"summary":"Readiness probe","description":"Retorna 200 se todas dependencias estao prontas, 503 se alguma DOWN.","operationId":"readiness_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadinessResponse"}}}}},"security":[]}},"/health/status":{"get":{"tags":["health"],"summary":"Status detalhado","description":"Retorna status detalhado de cada componente. Requer autenticacao.","operationId":"status_detailed_health_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/observability/metrics":{"get":{"tags":["observability"],"summary":"Prometheus Metrics","description":"Expoe no registry global do prometheus_client as metricas OTel->Prometheus.\n\nCriadas por MetricsCollector.record_custom (alerting/scheduling/watchdog),\nvia PrometheusMetricReader registrado pelo TelemetryBuilder (observability_module.py).\n\nSempre 200: desabilitado/extra ausente sao estados de configuracao normais\n(nao erro de servidor) — o corpo comentado (`#`) e um documento de exposicao\nPrometheus valido, vazio, exatamente como um scrape sem metricas ainda coletadas.","operationId":"prometheus_metrics_api_v1_observability_metrics_get","responses":{"200":{"description":"Prometheus text exposition (vazio comentado se desabilitado)","content":{"text/plain; version=0.0.4; charset=utf-8":{}}}}}},"/api/v1/observability/dashboard":{"get":{"tags":["observability"],"summary":"Get Dashboard","description":"Retorna snapshot unificado de alerting/scheduling/watchdog do tenant.","operationId":"get_dashboard_api_v1_observability_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObservabilityDashboardResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/connectivity/network/validate":{"get":{"tags":["connectivity"],"summary":"Validate Network","operationId":"validate_network_api_v1_connectivity_network_validate_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Validate Network Api V1 Connectivity Network Validate Get"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/notifications/channels":{"post":{"tags":["notifications-channels"],"summary":"Cadastrar canal de notificacao","description":"Cadastra novo canal de notificacao.","operationId":"create_channel_api_v1_notifications_channels_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChannelRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Channel Api V1 Notifications Channels Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["notifications-channels"],"summary":"Listar canais do tenant","description":"Lista canais cadastrados do tenant.","operationId":"list_channels_api_v1_notifications_channels_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Channels Api V1 Notifications Channels Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/channels/{channel_id}":{"get":{"tags":["notifications-channels"],"summary":"Obter canal por ID","description":"Obtem canal por ID ou nome.","operationId":"get_channel_api_v1_notifications_channels__channel_id__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Channel Api V1 Notifications Channels  Channel Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["notifications-channels"],"summary":"Atualizar canal","description":"Atualiza campos do canal.","operationId":"update_channel_api_v1_notifications_channels__channel_id__patch","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChannelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Channel Api V1 Notifications Channels  Channel Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["notifications-channels"],"summary":"Remover canal","description":"Remove canal e suas subscriptions (cascade).","operationId":"delete_channel_api_v1_notifications_channels__channel_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/channels/{channel_id}/test":{"post":{"tags":["notifications-channels"],"summary":"Testar canal salvo","description":"Testa canal cadastrado enviando mensagem-piloto.","operationId":"test_channel_api_v1_notifications_channels__channel_id__test_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestChannelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Channel Api V1 Notifications Channels  Channel Id  Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/channels/test":{"post":{"tags":["notifications-channels"],"summary":"Testar canal inline (antes de salvar)","description":"Testa canal sem salvar — estilo Dokploy test-before-save.","operationId":"test_channel_inline_api_v1_notifications_channels_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestChannelInlineRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Test Channel Inline Api V1 Notifications Channels Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/notifications/subscriptions":{"post":{"tags":["notifications-channels"],"summary":"Criar subscription canal->target","description":"Cria subscription vinculando canal a pipeline/schedule/watchdog.","operationId":"create_subscription_api_v1_notifications_subscriptions_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubscriptionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Subscription Api V1 Notifications Subscriptions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["notifications-channels"],"summary":"Listar subscriptions do tenant","description":"Lista todas as subscriptions do tenant.","operationId":"list_subscriptions_api_v1_notifications_subscriptions_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Subscriptions Api V1 Notifications Subscriptions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/subscriptions/{subscription_id}":{"delete":{"tags":["notifications-channels"],"summary":"Remover subscription","description":"Remove subscription por ID.","operationId":"delete_subscription_api_v1_notifications_subscriptions__subscription_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/logs":{"get":{"tags":["notifications-channels"],"summary":"Listar delivery log (auditoria)","description":"Lista registros do delivery log para auditoria.","operationId":"list_delivery_logs_api_v1_notifications_logs_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"channel_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"}},{"name":"target_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"failed_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Failed Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Delivery Logs Api V1 Notifications Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schedules":{"post":{"tags":["scheduling"],"summary":"Criar schedule para pipeline","operationId":"create_schedule_api_v1_schedules_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScheduleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["scheduling"],"summary":"Listar schedules do tenant","operationId":"list_schedules_api_v1_schedules_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip N items","default":0,"title":"Offset"},"description":"Skip N items"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for next page (keyset-based)","title":"Cursor"},"description":"Cursor for next page (keyset-based)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field:direction","default":"created_at:desc","title":"Sort"},"description":"Sort field:direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ScheduleResponse_"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schedules/status":{"get":{"tags":["scheduling"],"summary":"Status do scheduler","operationId":"scheduler_status_api_v1_schedules_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchedulerStatusResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/schedules/{schedule_id}":{"get":{"tags":["scheduling"],"summary":"Obter schedule por ID","operationId":"get_schedule_api_v1_schedules__schedule_id__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["scheduling"],"summary":"Atualizar schedule","operationId":"update_schedule_api_v1_schedules__schedule_id__patch","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["scheduling"],"summary":"Excluir schedule","operationId":"delete_schedule_api_v1_schedules__schedule_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schedules/{schedule_id}/pause":{"post":{"tags":["scheduling"],"summary":"Pausar schedule","operationId":"pause_schedule_api_v1_schedules__schedule_id__pause_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schedules/{schedule_id}/resume":{"post":{"tags":["scheduling"],"summary":"Retomar schedule pausado","operationId":"resume_schedule_api_v1_schedules__schedule_id__resume_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schedules/{schedule_id}/executions":{"get":{"tags":["scheduling"],"summary":"Historico de execucoes de um schedule","operationId":"list_executions_api_v1_schedules__schedule_id__executions_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximo de execucoes retornadas.","default":50,"title":"Limit"},"description":"Maximo de execucoes retornadas."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleExecutionResponse"},"title":"Response List Executions Api V1 Schedules  Schedule Id  Executions Get"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schedules/{schedule_id}/executions/latest":{"get":{"tags":["scheduling"],"summary":"Ultima execucao de um schedule","operationId":"latest_execution_api_v1_schedules__schedule_id__executions_latest_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ScheduleExecutionResponse"},{"type":"null"}],"title":"Response Latest Execution Api V1 Schedules  Schedule Id  Executions Latest Get"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/storage/upload":{"post":{"tags":["Storage"],"summary":"Upload de arquivo para storage","operationId":"upload_file_api_v1_storage_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_v1_storage_upload_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageOperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/list":{"post":{"tags":["Storage"],"summary":"Listar arquivos em bucket","operationId":"list_files_api_v1_storage_list_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListFilesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListFilesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/files":{"delete":{"tags":["Storage"],"summary":"Deletar arquivo do storage","operationId":"delete_file_api_v1_storage_files_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteFileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageOperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/download":{"get":{"tags":["Storage"],"summary":"Download de arquivo do storage","operationId":"download_file_api_v1_storage_download_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"source_path","in":"query","required":true,"schema":{"type":"string","title":"Source Path"}}],"responses":{"200":{"description":"Conteudo binario do arquivo (streaming chunked)","content":{"application/octet-stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/storage/copy":{"post":{"tags":["Storage"],"summary":"Copiar arquivo entre paths no storage","operationId":"copy_file_api_v1_storage_copy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyFileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileOperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/move":{"post":{"tags":["Storage"],"summary":"Mover arquivo entre paths no storage","operationId":"move_file_api_v1_storage_move_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveFileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileOperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/cache/status":{"get":{"tags":["Storage"],"summary":"Status do cache de storage","operationId":"cache_status_api_v1_storage_cache_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CacheStatusResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/metrics":{"get":{"tags":["Storage"],"summary":"Metricas de storage","operationId":"storage_metrics_api_v1_storage_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageInsightsResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/connections":{"get":{"tags":["Storage Connections"],"summary":"Listar conexoes de storage registradas","operationId":"list_connections_api_v1_storage_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageConnectionListResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["Storage Connections"],"summary":"Registrar nova conexao de storage","operationId":"create_connection_api_v1_storage_connections_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStorageConnectionRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/connections/{connection_name}":{"put":{"tags":["Storage Connections"],"summary":"Atualizar conexao de storage existente","operationId":"update_connection_api_v1_storage_connections__connection_name__put","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"connection_name","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9_-]+$","description":"Nome da conexao: letras, digitos, hifen e underscore","title":"Connection Name"},"description":"Nome da conexao: letras, digitos, hifen e underscore"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStorageConnectionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Storage Connections"],"summary":"Remover conexao de storage","operationId":"delete_connection_api_v1_storage_connections__connection_name__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"connection_name","in":"path","required":true,"schema":{"type":"string","title":"Connection Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/storage/connections/{connection_name}/test":{"post":{"tags":["Storage Connections"],"summary":"Testar conectividade de uma conexao","operationId":"test_connection_api_v1_storage_connections__connection_name__test_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"connection_name","in":"path","required":true,"schema":{"type":"string","title":"Connection Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/storage/providers":{"get":{"tags":["Storage Connections"],"summary":"Listar tipos de storage disponiveis","operationId":"list_provider_types_api_v1_storage_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageProviderTypesResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/browse":{"post":{"tags":["Storage Explorer"],"summary":"Navegar hierarquia de storage","operationId":"browse_storage_api_v1_storage_browse_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowseStorageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowseStorageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/explore":{"post":{"tags":["Storage Explorer"],"summary":"Autodiscovery de datasets em storage","operationId":"explore_storage_api_v1_storage_explore_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreStorageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreStorageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/describe":{"post":{"tags":["Storage Explorer"],"summary":"Obter schema de dataset em storage","operationId":"describe_dataset_api_v1_storage_describe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DescribeDatasetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DescribeDatasetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/preview":{"post":{"tags":["Storage Explorer"],"summary":"Preview de linhas de dataset em storage","operationId":"preview_dataset_api_v1_storage_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewDatasetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewDatasetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/storage/file-info":{"get":{"tags":["Storage Explorer"],"summary":"Metadata de arquivo individual em storage","operationId":"get_file_info_api_v1_storage_file_info_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","description":"Path completo do arquivo no storage","title":"Path"},"description":"Path completo do arquivo no storage"},{"name":"connection_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nome da conexao (None = default)","title":"Connection Name"},"description":"Nome da conexao (None = default)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileEntryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lake/read":{"post":{"tags":["Lake"],"summary":"Le dados do Data Lake via SQL","operationId":"read_api_v1_lake_read_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeReadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeReadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/lake/watermark":{"get":{"tags":["Lake"],"summary":"Consulta watermark de tabela no Data Lake","operationId":"watermark_api_v1_lake_watermark_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"table","in":"query","required":true,"schema":{"type":"string","description":"Nome da tabela","title":"Table"},"description":"Nome da tabela"},{"name":"field","in":"query","required":true,"schema":{"type":"string","description":"Campo timestamp para watermark","title":"Field"},"description":"Campo timestamp para watermark"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Formato lake","default":"ducklake","title":"Format"},"description":"Formato lake"},{"name":"data_path","in":"query","required":false,"schema":{"type":"string","description":"Path dos dados lake","default":"/app/.tdv_data/lake","title":"Data Path"},"description":"Path dos dados lake"},{"name":"backend","in":"query","required":false,"schema":{"type":"string","description":"Backend (file, postgres)","default":"file","title":"Backend"},"description":"Backend (file, postgres)"},{"name":"metadata_bucket","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bucket do catalogo DuckLake (backend file)","title":"Metadata Bucket"},"description":"Bucket do catalogo DuckLake (backend file)"},{"name":"metadata_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Key do catalogo DuckLake (backend file)","title":"Metadata Key"},"description":"Key do catalogo DuckLake (backend file)"},{"name":"connection","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nome da connection do registry (backend postgresql)","title":"Connection"},"description":"Nome da connection do registry (backend postgresql)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeWatermarkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lake/history":{"get":{"tags":["Lake"],"summary":"Historico de operacoes de tabela Delta","operationId":"history_api_v1_lake_history_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"table_uri","in":"query","required":true,"schema":{"type":"string","description":"URI da tabela Delta","title":"Table Uri"},"description":"URI da tabela Delta"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Numero de entradas","default":10,"title":"Limit"},"description":"Numero de entradas"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lake/optimize":{"post":{"tags":["Lake"],"summary":"Compacta small files em tabela Lake","operationId":"optimize_api_v1_lake_optimize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeOptimizeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeOptimizeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/lake/vacuum":{"post":{"tags":["Lake"],"summary":"Remove arquivos orfaos de tabela Lake","operationId":"vacuum_api_v1_lake_vacuum_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeVacuumRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeVacuumResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/lake/catalog/migrate":{"post":{"tags":["Lake"],"summary":"Upgrade de catalogo DuckLake 0.x para 1.0","operationId":"migrate_api_v1_lake_catalog_migrate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeMigrateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeMigrateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/lake/maintain":{"post":{"tags":["Lake"],"summary":"Manutencao unificada de tabela lake (compact/optimize/vacuum)","operationId":"maintain_api_v1_lake_maintain_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeMaintainRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeMaintainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/lineage/trace":{"post":{"tags":["lineage"],"summary":"Rastrear lineage upstream de um dataset","operationId":"trace_lineage_api_v1_lineage_trace_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/lineage/impact":{"post":{"tags":["lineage"],"summary":"Analisar impacto downstream de um dataset","operationId":"impact_analysis_api_v1_lineage_impact_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpactRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/lineage/history":{"get":{"tags":["lineage"],"summary":"Consultar historico de eventos de lineage","operationId":"get_history_api_v1_lineage_history_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lineage/graph":{"post":{"tags":["lineage"],"summary":"Gerar grafo de lineage para visualizacao","operationId":"get_graph_api_v1_lineage_graph_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/lineage/failures":{"get":{"tags":["lineage"],"summary":"Consultar eventos de falha de lineage","operationId":"get_failures_api_v1_lineage_failures_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}},{"name":"job_name_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FailuresResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/execute":{"post":{"tags":["query-studio"],"summary":"Executar query SQL","operationId":"execute_query_api_v1_queries_execute_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryExecuteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryExecuteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/queries/execute.csv":{"post":{"tags":["query-studio"],"summary":"Executar query SQL e retornar resultado em CSV","operationId":"execute_query_csv_api_v1_queries_execute_csv_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryExecuteRequest"}}},"required":true},"responses":{"200":{"description":"Resultado da query em formato CSV","content":{"text/csv":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/queries/analyze":{"post":{"tags":["query-studio"],"summary":"Analisar plano de execucao","operationId":"analyze_query_api_v1_queries_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryAnalyzeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/queries/suggest":{"get":{"tags":["query-studio"],"summary":"Autocomplete de tabelas/colunas por prefixo","operationId":"suggest_completions_api_v1_queries_suggest_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"prefix","in":"query","required":false,"schema":{"type":"string","description":"Prefixo digitado no editor","default":"","title":"Prefix"},"description":"Prefixo digitado no editor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximo de sugestoes","default":20,"title":"Limit"},"description":"Maximo de sugestoes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SchemaSuggestionModel"},"title":"Response Suggest Completions Api V1 Queries Suggest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/history":{"get":{"tags":["query-studio"],"summary":"Listar historico de queries","operationId":"list_history_api_v1_queries_history_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"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"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["success","error"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListQueryHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/saved":{"get":{"tags":["query-studio"],"summary":"Listar queries salvas","operationId":"list_saved_queries_api_v1_queries_saved_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SavedQuery"},"type":"array","title":"Response List Saved Queries Api V1 Queries Saved Get"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["query-studio"],"summary":"Salvar query como favorita","operationId":"save_query_api_v1_queries_saved_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveQueryRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/queries/saved/{query_id}":{"get":{"tags":["query-studio"],"summary":"Obter query salva por ID","operationId":"get_saved_query_api_v1_queries_saved__query_id__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"query_id","in":"path","required":true,"schema":{"type":"string","title":"Query Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedQuery"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["query-studio"],"summary":"Atualizar query salva existente","operationId":"update_saved_query_api_v1_queries_saved__query_id__put","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"query_id","in":"path","required":true,"schema":{"type":"string","title":"Query Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveQueryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["query-studio"],"summary":"Remover query salva","operationId":"delete_saved_query_api_v1_queries_saved__query_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"query_id","in":"path","required":true,"schema":{"type":"string","title":"Query Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteSavedQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/dashboards":{"get":{"tags":["query-studio"],"summary":"Listar dashboards custom do tenant","operationId":"list_dashboards_api_v1_queries_dashboards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardListResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["query-studio"],"summary":"Criar dashboard custom","operationId":"create_dashboard_api_v1_queries_dashboards_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDashboardRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/queries/dashboards/templates":{"get":{"tags":["query-studio"],"summary":"Listar templates de dashboard","operationId":"list_dashboard_templates_api_v1_queries_dashboards_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardListResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/queries/dashboards/{dashboard_id}":{"get":{"tags":["query-studio"],"summary":"Recuperar dashboard por ID","operationId":"get_dashboard_api_v1_queries_dashboards__dashboard_id__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","title":"Dashboard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["query-studio"],"summary":"Atualizar dashboard","operationId":"update_dashboard_api_v1_queries_dashboards__dashboard_id__put","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","title":"Dashboard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDashboardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["query-studio"],"summary":"Remover dashboard","operationId":"delete_dashboard_api_v1_queries_dashboards__dashboard_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","title":"Dashboard Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/dashboards/{dashboard_id}/execute":{"post":{"tags":["query-studio"],"summary":"Executar (renderizar) os widgets de um dashboard","operationId":"execute_dashboard_api_v1_queries_dashboards__dashboard_id__execute_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","title":"Dashboard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteDashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/dashboards/{dashboard_id}/export":{"get":{"tags":["query-studio"],"summary":"Exportar a definicao portavel de um dashboard","operationId":"export_dashboard_api_v1_queries_dashboards__dashboard_id__export_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","title":"Dashboard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/macros/graph":{"get":{"tags":["macro"],"summary":"Visualizar MacroDAG em mermaid ou json","description":"Renderiza o MacroDAG do `yaml_path` no formato solicitado.\n\nArgs:\n    yaml_path: Caminho para o YAML do MacroDAG.\n    fmt: Formato de saida (mermaid|json). Default mermaid.\n    tenant_context: TenantContext resolvido via dependency de auth.\n\nReturns:\n    Corpo mermaid como texto plano ou JSON com nodes/deps.","operationId":"get_macro_graph_api_v1_macros_graph_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"yaml_path","in":"query","required":true,"schema":{"type":"string","title":"Yaml Path"}},{"name":"fmt","in":"query","required":false,"schema":{"enum":["mermaid","json"],"type":"string","default":"mermaid","title":"Fmt"}}],"responses":{"200":{"description":"Mermaid (text/plain) ou nodes/deps (application/json), conforme o parametro fmt.","content":{"application/json":{"schema":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"string"}},"edges":{"type":"array","items":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2}}}}},"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/monitor/freshness":{"get":{"tags":["ReportServing"],"summary":"Freshness","operationId":"freshness_api_v1_report_serving_monitor_freshness_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorFreshnessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/monitor/status":{"get":{"tags":["ReportServing"],"summary":"Refresh Status","operationId":"refresh_status_api_v1_report_serving_monitor_status_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"query","required":true,"schema":{"type":"string","title":"Page"}},{"name":"pipeline","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pipeline"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/descriptor":{"get":{"tags":["ReportServing"],"summary":"Descriptor","operationId":"descriptor_api_v1_report_serving__page__descriptor_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DescriptorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/kpis":{"post":{"tags":["ReportServing"],"summary":"Get Kpis","operationId":"get_kpis_api_v1_report_serving__page__kpis_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KpisRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KpisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/aggregate":{"post":{"tags":["ReportServing"],"summary":"Aggregate","operationId":"aggregate_api_v1_report_serving__page__aggregate_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AggregateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AggregateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/funnel":{"post":{"tags":["ReportServing"],"summary":"Funnel","operationId":"funnel_api_v1_report_serving__page__funnel_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/table":{"post":{"tags":["ReportServing"],"summary":"Detail Table","operationId":"detail_table_api_v1_report_serving__page__table_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailTableRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailTableResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/slicer/{dim}":{"post":{"tags":["ReportServing"],"summary":"Slicer","operationId":"slicer_api_v1_report_serving__page__slicer__dim__post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}},{"name":"dim","in":"path","required":true,"schema":{"type":"string","title":"Dim"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistinctRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DistinctResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/page-data":{"post":{"tags":["ReportServing"],"summary":"Page Data","operationId":"page_data_api_v1_report_serving__page__page_data_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageDataRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageDataResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/export":{"post":{"tags":["ReportServing"],"summary":"Export Csv","operationId":"export_csv_api_v1_report_serving__page__export_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportCsvRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/report-serving/{page}/mapa-pdf":{"post":{"tags":["ReportServing"],"summary":"Mapa Pdf","operationId":"mapa_pdf_api_v1_report_serving__page__mapa_pdf_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapaPdfRequest"}}}},"responses":{"200":{"description":"PDF do Mapa de Carregamento (export auditado)","content":{"application/pdf":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reports/generate":{"post":{"tags":["Reporting"],"summary":"Gerar report a partir de componentes","operationId":"generate_report_api_v1_reports_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/reports/templates":{"get":{"tags":["Reporting"],"summary":"Listar templates de report","operationId":"list_templates_api_v1_reports_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateListResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/reports/templates/validate":{"post":{"tags":["Reporting"],"summary":"Validar seguranca de template sem upload","operationId":"reports_validate_template","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateValidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateValidateResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/reports/templates/{template_id}/content":{"get":{"tags":["Reporting"],"summary":"Conteúdo YAML de um template (Studio)","operationId":"reports_get_template_content","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateContentResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reports/templates/{template_id}/submit":{"post":{"tags":["Reporting"],"summary":"Submeter form de template (dispatch de action)","operationId":"reports_submit_form","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmitRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmitResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reports/templates/upload":{"post":{"tags":["Reporting"],"summary":"Upload de template","operationId":"upload_template_api_v1_reports_templates_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_template_api_v1_reports_templates_upload_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/reports/marketplace/search":{"post":{"tags":["Reporting"],"summary":"Buscar templates no marketplace","operationId":"search_marketplace_api_v1_reports_marketplace_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/reports/marketplace/publish":{"post":{"tags":["Reporting"],"summary":"Publicar template no marketplace","operationId":"publish_template_api_v1_reports_marketplace_publish_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishTemplateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/reports/marketplace/pull":{"post":{"tags":["Reporting"],"summary":"Baixar template do marketplace","operationId":"pull_template_api_v1_reports_marketplace_pull_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PullTemplateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PullTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/reports/snapshots":{"post":{"tags":["Reporting"],"summary":"Congelar report em snapshot","operationId":"reports_create_snapshot","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSnapshotRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportSnapshotResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Reporting"],"summary":"Listar snapshots do tenant","operationId":"reports_list_snapshots","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"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":{"$ref":"#/components/schemas/SnapshotListResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reports/snapshots/{snapshot_id}":{"get":{"tags":["Reporting"],"summary":"Metadados de um snapshot","operationId":"reports_get_snapshot","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportSnapshotResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Reporting"],"summary":"Remover um snapshot","operationId":"reports_delete_snapshot","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reports/snapshots/{snapshot_id}/download":{"get":{"tags":["Reporting"],"summary":"Download do binário de um snapshot","operationId":"reports_download_snapshot","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"200":{"description":"Conteudo binario do snapshot (attachment)","content":{"application/octet-stream":{}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/settings":{"get":{"tags":["settings"],"summary":"Preferencias de workspace do tenant","operationId":"settings_get_workspace","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceSettingsResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"patch":{"tags":["settings"],"summary":"Atualizar preferencias de workspace","operationId":"settings_patch_workspace","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkspaceSettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceSettingsResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/settings/effective":{"get":{"tags":["settings"],"summary":"Settings efetivas apos merge workspace <- user <- pipeline","operationId":"settings_get_effective","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"pipeline_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pipeline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EffectiveSettingsResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/settings/export":{"get":{"tags":["settings"],"summary":"Exporta preferencias de workspace (payload portavel, sem tenant_id)","operationId":"settings_export_workspace","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceSettingsExportResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/settings/import":{"post":{"tags":["settings"],"summary":"Importa preferencias de workspace a partir de um export previo","operationId":"settings_import_workspace","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportWorkspaceSettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceSettingsResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/schemas":{"post":{"tags":["schemas"],"summary":"Registrar novo schema ou versao","operationId":"register_schema_api_v1_schemas_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterSchemaRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterSchemaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["schemas"],"summary":"Listar schemas registrados","operationId":"list_schemas_api_v1_schemas_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip N items","default":0,"title":"Offset"},"description":"Skip N items"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for next page (keyset-based)","title":"Cursor"},"description":"Cursor for next page (keyset-based)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field:direction","default":"created_at:desc","title":"Sort"},"description":"Sort field:direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schemas/diff":{"post":{"tags":["schemas"],"summary":"Comparar dois schemas registrados","operationId":"diff_schemas_api_v1_schemas_diff_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaDiffRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaDiffResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/schemas/match":{"post":{"tags":["schemas"],"summary":"Encontrar mapeamentos entre tabelas","operationId":"match_schemas_api_v1_schemas_match_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaMatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaMatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/schemas/validate":{"post":{"tags":["schemas"],"summary":"Validar tabela contra schema registrado","operationId":"validate_schema_api_v1_schemas_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaValidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaValidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/schemas/{name}/versions":{"get":{"tags":["schemas"],"summary":"Listar versoes de um schema","operationId":"schemas_list_versions","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaVersionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schemas/{name}":{"get":{"tags":["schemas"],"summary":"Detalhar schema por nome","operationId":"get_schema_api_v1_schemas__name__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["schemas"],"summary":"Remover schema do registry","operationId":"delete_schema_api_v1_schemas__name__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteSchemaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/data/compare":{"post":{"tags":["Data Intelligence"],"summary":"Compara dois datasets (schema e dados)","operationId":"compare_datasets_api_v1_data_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/data/benchmark/compare":{"post":{"tags":["Data Intelligence"],"summary":"Compara dois benchmarks a partir de JSONs","operationId":"compare_benchmarks_api_v1_data_benchmark_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCompareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCompareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/data/explore":{"post":{"tags":["Data Intelligence"],"summary":"Explora estrutura e estatisticas de arquivo de dados","operationId":"explore_data_api_v1_data_explore_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/data/profile/track":{"post":{"tags":["Data Intelligence"],"summary":"Executa profiling com persistencia e comparacao historica","operationId":"track_profile_api_v1_data_profile_track_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/data/expectations":{"post":{"tags":["Data Intelligence"],"summary":"Executa suite de data expectations","operationId":"run_expectations_api_v1_data_expectations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpectationsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpectationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/data/freshness":{"post":{"tags":["Data Intelligence"],"summary":"Verifica freshness de dataset contra SLA","operationId":"check_freshness_api_v1_data_freshness_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetFreshnessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/data/classify":{"post":{"tags":["Data Intelligence"],"summary":"Classifica colunas de dataset como dimensoes ou medidas BI","operationId":"classify_columns_api_v1_data_classify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/geo/h3-enrich":{"post":{"tags":["geospatial"],"summary":"Adiciona coluna H3 index a tabela com lat/lng","description":"Enriquece a tabela com indices H3 na resolucao solicitada.","operationId":"h3_enrich_api_v1_geo_h3_enrich_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichWithH3Command"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichWithH3Result"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/geo/geofence-check":{"post":{"tags":["geospatial"],"summary":"Marca linhas dentro de geofences definidas","description":"Cruza os dados com as geofences e escreve a coluna de resultado.","operationId":"geofence_check_api_v1_geo_geofence_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeofenceCheckCommand"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeofenceCheckResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/geo/spatial-aggregate":{"post":{"tags":["geospatial"],"summary":"Agrega metricas por celula H3","description":"Agrega as metricas por celula H3 em uma tabela de saida.","operationId":"spatial_aggregate_api_v1_geo_spatial_aggregate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpatialAggregateCommand"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpatialAggregateResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/geo/spatial-report":{"post":{"tags":["geospatial"],"summary":"Gera report HTML com mapa interativo de celulas H3","description":"Renderiza o report espacial em HTML no output_path informado.","operationId":"spatial_report_api_v1_geo_spatial_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSpatialReportCommand"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSpatialReportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/geo/geofences":{"get":{"tags":["geospatial"],"summary":"Lista geofences do tenant","description":"Lista as geofences do tenant, opcionalmente filtradas por tipo.","operationId":"list_geofences_api_v1_geo_geofences_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"fence_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/GeofenceType"},{"type":"null"}],"description":"Filtra por tipo de geofence","title":"Fence Type"},"description":"Filtra por tipo de geofence"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GeofenceSummary"},"title":"Response List Geofences Api V1 Geo Geofences Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["geospatial"],"summary":"Cria (ou atualiza) geofence com celulas H3 pre-calculadas","description":"Persiste a geofence e retorna o ID gerado/atualizado.","operationId":"create_geofence_api_v1_geo_geofences_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGeofenceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGeofenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/geo/geofences/{name}":{"get":{"tags":["geospatial"],"summary":"Busca geofence por nome","description":"Retorna a geofence por nome ou 404 se inexistente.","operationId":"get_geofence_api_v1_geo_geofences__name__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeofenceDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["geospatial"],"summary":"Remove geofence por nome","description":"Remove a geofence; deleted=False quando inexistente.","operationId":"delete_geofence_api_v1_geo_geofences__name__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteGeofenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/validation/dbt-test":{"post":{"tags":["Validation"],"summary":"Executa validacao dbt-style","operationId":"run_dbt_test_api_v1_validation_dbt_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbtValidationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbtValidationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/contracts/":{"get":{"tags":["Contracts"],"summary":"Lista contratos ativos do tenant","operationId":"list_contracts_api_v1_contracts__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtro por nome","title":"Name"},"description":"Filtro por nome"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DataContract"},"title":"Response List Contracts Api V1 Contracts  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Contracts"],"summary":"Registra novo DataContract","operationId":"register_contract_api_v1_contracts__post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataContract"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataContract"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/{name}/versions/{version}":{"get":{"tags":["Contracts"],"summary":"Obtem um contrato por nome e versao","operationId":"get_contract_api_v1_contracts__name__versions__version__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataContract"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Contracts"],"summary":"Remove um contrato por nome e versao","operationId":"delete_contract_api_v1_contracts__name__versions__version__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/{name}/versions/{version}/validate":{"post":{"tags":["Contracts"],"summary":"Valida uma tabela contra um contrato registrado","operationId":"validate_against_contract_api_v1_contracts__name__versions__version__validate_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateContractRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractValidationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/{name}/diff":{"get":{"tags":["Contracts"],"summary":"Compara duas versoes de um contrato","operationId":"diff_contracts_api_v1_contracts__name__diff_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"prior","in":"query","required":true,"schema":{"type":"string","description":"Versao anterior (X.Y.Z)","title":"Prior"},"description":"Versao anterior (X.Y.Z)"},{"name":"next","in":"query","required":true,"schema":{"type":"string","description":"Versao nova (X.Y.Z)","title":"Next"},"description":"Versao nova (X.Y.Z)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractDiff"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/{name}/check":{"post":{"tags":["Contracts"],"summary":"Gate de CI: falha se ha breaking change sem bump de major","operationId":"check_breaking_api_v1_contracts__name__check_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"prior","in":"query","required":true,"schema":{"type":"string","description":"Versao anterior (X.Y.Z)","title":"Prior"},"description":"Versao anterior (X.Y.Z)"},{"name":"next","in":"query","required":true,"schema":{"type":"string","description":"Versao nova (X.Y.Z)","title":"Next"},"description":"Versao nova (X.Y.Z)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckBreakingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/linkage/dedupe":{"post":{"tags":["Linkage"],"summary":"Deduplica registros","operationId":"dedupe_api_v1_linkage_dedupe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DedupeRequestDTO"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DedupeResponseDTO"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/linkage/link":{"post":{"tags":["Linkage"],"summary":"Vincula registros entre datasets","operationId":"link_api_v1_linkage_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkRequestDTO"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkResponseDTO"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/linkage/profile":{"post":{"tags":["Linkage"],"summary":"Perfila colunas para linkage","operationId":"profile_api_v1_linkage_profile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileRequestDTO"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponseDTO"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/linkage/analyze-blocking":{"post":{"tags":["Linkage"],"summary":"Mede pares gerados por blocking rules","operationId":"analyze_blocking_api_v1_linkage_analyze_blocking_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeBlockingRequestDTO"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeBlockingResponseDTO"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/linkage/report":{"post":{"tags":["Linkage"],"summary":"Gera reports HTML do Splink","operationId":"report_api_v1_linkage_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRequestDTO"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportResponseDTO"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/calendar/holidays":{"get":{"tags":["localization"],"summary":"Lista feriados de um ano por regiao","description":"Retorna os feriados do ano/regiao informados.","operationId":"list_holidays_api_v1_calendar_holidays_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","description":"Ano calendario (YYYY)","title":"Year"},"description":"Ano calendario (YYYY)"},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"Codigo da regiao","default":"BR","title":"Region"},"description":"Codigo da regiao"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HolidayItemResponse"},"title":"Response List Holidays Api V1 Calendar Holidays Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calendar/holidays/check":{"get":{"tags":["localization"],"summary":"Verifica se uma data e feriado","description":"Retorna se a data informada e feriado na regiao.","operationId":"check_holiday_api_v1_calendar_holidays_check_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Data a verificar (ISO 8601)","title":"Date"},"description":"Data a verificar (ISO 8601)"},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"Codigo da regiao","default":"BR","title":"Region"},"description":"Codigo da regiao"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckHolidayResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calendar/business-day/next":{"get":{"tags":["localization"],"summary":"Calcula o proximo dia util apos uma data","description":"Retorna o proximo dia util apos a data de referencia.","operationId":"next_business_day_api_v1_calendar_business_day_next_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Data de referencia (ISO 8601)","title":"Date"},"description":"Data de referencia (ISO 8601)"},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"Codigo da regiao","default":"BR","title":"Region"},"description":"Codigo da regiao"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NextBusinessDayResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calendar/locales":{"get":{"tags":["localization"],"summary":"Lista locales suportados (SSOT via ILocaleRegistry)","description":"Retorna os locales suportados pelo BC, formato BCP-47.","operationId":"list_locales_api_v1_calendar_locales_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocalesResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/code/analyze":{"post":{"tags":["code_intelligence"],"summary":"Analise estrutural de codigo Python","description":"Analisa estrutura do codigo enviado no body (imports/funcoes/classes).","operationId":"analyze_code_api_v1_code_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeCodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/code/scan":{"post":{"tags":["code_intelligence"],"summary":"Scan de seguranca de codigo Python","description":"Scanneia o codigo enviado no body conforme os checks solicitados.","operationId":"scan_security_api_v1_code_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanSecurityRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanSecurityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/code/diff":{"post":{"tags":["code_intelligence"],"summary":"Comparacao estrutural entre versoes de codigo","description":"Compara estruturalmente as duas versoes enviadas no body.","operationId":"compare_versions_api_v1_code_diff_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareVersionsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareVersionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/code/docstrings":{"post":{"tags":["code_intelligence"],"summary":"Geracao de docstrings para codigo Python","description":"Gera stubs de docstrings Google-style para o codigo enviado no body.","operationId":"generate_docstrings_api_v1_code_docstrings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateDocstringsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateDocstringsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/code/refactor":{"post":{"tags":["code_intelligence"],"summary":"Sugestao de refatoracao para codigo Python","description":"Sugere refactors deterministicos para o codigo enviado no body.","operationId":"suggest_refactor_api_v1_code_refactor_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestRefactorRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestRefactorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/jobs":{"get":{"tags":["jobs"],"summary":"Listar jobs do tenant","operationId":"list_jobs_api_v1_jobs_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/JobStatus"},{"type":"null"}],"description":"Filtra por estado do job antes da paginacao","title":"Status"},"description":"Filtra por estado do job antes da paginacao"},{"name":"pipeline_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"Filtra por pipeline do job antes da paginacao","title":"Pipeline Name"},"description":"Filtra por pipeline do job antes da paginacao"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip N items","default":0,"title":"Offset"},"description":"Skip N items"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for next page (keyset-based)","title":"Cursor"},"description":"Cursor for next page (keyset-based)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field:direction","default":"created_at:desc","title":"Sort"},"description":"Sort field:direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_JobListItemResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/pipelines/run":{"post":{"tags":["jobs"],"summary":"Submeter pipeline para execucao async","operationId":"submit_pipeline_api_v1_jobs_pipelines_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitPipelineRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/jobs/{job_id}/retry":{"post":{"tags":["jobs"],"summary":"Reenviar job terminal como novo job","operationId":"retry_job_api_v1_jobs__job_id__retry_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRetryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Consultar status de job","operationId":"get_job_status_api_v1_jobs__job_id__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jobs"],"summary":"Cancelar job em execucao","operationId":"cancel_job_api_v1_jobs__job_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","maxLength":256,"description":"Motivo do cancelamento, registrado com o run.","default":"","title":"Reason"},"description":"Motivo do cancelamento, registrado com o run."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCancelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/logs":{"get":{"tags":["jobs"],"summary":"Historico de log de um job","operationId":"get_job_logs_api_v1_jobs__job_id__logs_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip N items","default":0,"title":"Offset"},"description":"Skip N items"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for next page (keyset-based)","title":"Cursor"},"description":"Cursor for next page (keyset-based)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field:direction","default":"created_at:desc","title":"Sort"},"description":"Sort field:direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_JobLogEntryResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/events":{"get":{"tags":["jobs"],"summary":"Stream de eventos SSE","description":"Acompanha o ciclo de vida do job via Server-Sent Events.","operationId":"stream_job_events_api_v1_jobs__job_id__events_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"SSE de JobEvent (text/event-stream)","content":{"text/event-stream":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/artifacts/upload":{"post":{"tags":["artifacts"],"summary":"Upload de artefato (pipeline YAML, UDF, data, config)","operationId":"upload_artifact_api_v1_artifacts_upload_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"artifact_type","in":"query","required":true,"schema":{"type":"string","description":"Tipo: pipeline, udf, data, config","title":"Artifact Type"},"description":"Tipo: pipeline, udf, data, config"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_artifact_api_v1_artifacts_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArtifactUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/artifacts":{"get":{"tags":["artifacts"],"summary":"Listar artefatos do tenant","operationId":"list_artifacts_api_v1_artifacts_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"artifact_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por tipo: pipeline, udf, data, config","title":"Artifact Type"},"description":"Filtrar por tipo: pipeline, udf, data, config"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArtifactListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/artifacts/{artifact_path}":{"get":{"tags":["artifacts"],"summary":"Download de artefato","operationId":"download_artifact_api_v1_artifacts__artifact_path__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"artifact_path","in":"path","required":true,"schema":{"type":"string","title":"Artifact Path"}}],"responses":{"200":{"description":"Conteudo binario do artefato","content":{"application/octet-stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["artifacts"],"summary":"Remover artefato","operationId":"delete_artifact_api_v1_artifacts__artifact_path__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"artifact_path","in":"path","required":true,"schema":{"type":"string","title":"Artifact Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArtifactDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/overview":{"get":{"tags":["Dashboard"],"summary":"Get Overview","operationId":"get_overview_api_v1_dashboard_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardOverview"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/dashboard/activity":{"get":{"tags":["Dashboard"],"summary":"Get Activity","operationId":"get_activity_api_v1_dashboard_activity_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/preview":{"post":{"tags":["Dashboard"],"summary":"Preview de dashboard a partir de YAML","operationId":"preview_dashboard_api_v1_dashboard_preview_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_preview_dashboard_api_v1_dashboard_preview_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/notifications/stream":{"get":{"tags":["Notifications"],"summary":"Stream de notificacoes em tempo real (SSE)","description":"Conecta ao stream de eventos operacionais via Server-Sent Events.","operationId":"notification_stream_api_v1_notifications_stream_get","responses":{"200":{"description":"SSE de NotificationEvent (text/event-stream)","content":{"application/json":{"schema":{"title":"Response Notification Stream Api V1 Notifications Stream Get"}},"text/event-stream":{"schema":{"type":"string"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/notifications/feed":{"get":{"tags":["notifications-feed"],"summary":"Feed de notificacoes do usuario","operationId":"notifications_list_feed","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"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":{"$ref":"#/components/schemas/PaginatedResponse_FeedItemResponse_"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/feed/unread-count":{"get":{"tags":["notifications-feed"],"summary":"Contagem de notificacoes nao lidas","operationId":"notifications_feed_unread_count","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnreadCountResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/notifications/feed/read-all":{"post":{"tags":["notifications-feed"],"summary":"Marcar todas as notificacoes como lidas","operationId":"notifications_feed_read_all","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedReadAllResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/notifications/feed/{notification_id}/read":{"post":{"tags":["notifications-feed"],"summary":"Marcar notificacao como lida","operationId":"notifications_feed_mark_read","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit":{"get":{"tags":["audit"],"summary":"Consultar audit trail","description":"Lista registros de auditoria com filtros.","operationId":"list_audit_entries_api_v1_audit_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","description":"Periodo relativo (1h, 24h, 7d, 30d)","default":"24h","title":"Since"},"description":"Periodo relativo (1h, 24h, 7d, 30d)"},{"name":"actor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por ator","title":"Actor"},"description":"Filtrar por ator"},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por modo (cli, yaml, programmatic, scheduler, agent)","title":"Mode"},"description":"Filtrar por modo (cli, yaml, programmatic, scheduler, agent)"},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por acao","title":"Action"},"description":"Filtrar por acao"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximo de resultados","default":50,"title":"Limit"},"description":"Maximo de resultados"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/count":{"get":{"tags":["audit"],"summary":"Contar registros de auditoria","operationId":"count_audit_entries_api_v1_audit_count_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","description":"Periodo relativo (1h, 24h, 7d, 30d)","default":"24h","title":"Since"},"description":"Periodo relativo (1h, 24h, 7d, 30d)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditCountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/export":{"get":{"tags":["audit"],"summary":"Exportar audit trail","description":"Exporta registros em JSON ou CSV.","operationId":"export_audit_entries_api_v1_audit_export_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/AuditExportFormat","description":"Formato (json, csv)","default":"json"},"description":"Formato (json, csv)"},{"name":"since","in":"query","required":false,"schema":{"type":"string","description":"Periodo relativo (1h, 24h, 7d, 30d)","default":"24h","title":"Since"},"description":"Periodo relativo (1h, 24h, 7d, 30d)"},{"name":"actor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por ator","title":"Actor"},"description":"Filtrar por ator"},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por modo","title":"Mode"},"description":"Filtrar por modo"},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrar por acao","title":"Action"},"description":"Filtrar por acao"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximo de resultados","default":500,"title":"Limit"},"description":"Maximo de resultados"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditEntryResponse"},"title":"Response Export Audit Entries Api V1 Audit Export Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/audit-log":{"get":{"tags":["Admin Audit"],"summary":"Listar eventos de audit","operationId":"list_audit_events_api_v1_admin_audit_log_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximo de eventos","default":50,"title":"Limit"},"description":"Maximo de eventos"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Deslocamento de paginacao","default":0,"title":"Offset"},"description":"Deslocamento de paginacao"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Audit Events Api V1 Admin Audit Log Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/audit-log/export":{"get":{"tags":["Admin Audit"],"summary":"Exportar audit log (CSV)","operationId":"export_audit_events_api_v1_admin_audit_log_export_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximo de eventos","default":500,"title":"Limit"},"description":"Maximo de eventos"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Deslocamento de paginacao","default":0,"title":"Offset"},"description":"Deslocamento de paginacao"}],"responses":{"200":{"description":"Audit log em formato CSV","content":{"text/csv":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/audit-log/usage":{"get":{"tags":["Admin Audit"],"summary":"Read-model de uso de paginas (por usuario/pagina/dia)","operationId":"usage_summary_api_v1_admin_audit_log_usage_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"feed_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Tamanho do feed recente","default":50,"title":"Feed Size"},"description":"Tamanho do feed recente"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Usage Summary Api V1 Admin Audit Log Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/roles":{"post":{"tags":["Admin RBAC"],"summary":"Atribuir role a usuario","operationId":"assign_role_api_v1_admin_users__user_id__roles_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignRoleBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Assign Role Api V1 Admin Users  User Id  Roles Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Admin RBAC"],"summary":"Listar roles diretas de um usuario","operationId":"list_user_roles_api_v1_admin_users__user_id__roles_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List User Roles Api V1 Admin Users  User Id  Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/roles/{role_name}":{"delete":{"tags":["Admin RBAC"],"summary":"Revogar role de usuario","operationId":"revoke_role_api_v1_admin_users__user_id__roles__role_name__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"role_name","in":"path","required":true,"schema":{"type":"string","title":"Role Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/roles":{"get":{"tags":["Admin RBAC"],"summary":"Listar roles customizadas da org","operationId":"list_roles_api_v1_admin_roles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Roles Api V1 Admin Roles Get"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["Admin RBAC"],"summary":"Criar role customizada","operationId":"create_role_api_v1_admin_roles_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoleBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Role Api V1 Admin Roles Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/admin/roles/{role_name}":{"put":{"tags":["Admin RBAC"],"summary":"Atualizar role customizada","operationId":"update_role_api_v1_admin_roles__role_name__put","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"role_name","in":"path","required":true,"schema":{"type":"string","title":"Role Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoleBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Role Api V1 Admin Roles  Role Name  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin RBAC"],"summary":"Remover role customizada","operationId":"delete_role_api_v1_admin_roles__role_name__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"role_name","in":"path","required":true,"schema":{"type":"string","title":"Role Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/signing-keys/rotate":{"post":{"tags":["Admin RBAC"],"summary":"Rotacionar signing-key JWT","description":"Gera uma nova signing-key (novo kid) com grace; retorna o kid a promover.\n\n``grace_hours`` e limitado a [0, 720] (Query ge/le) — negativo ou gigante\ndeixaria a kid antiga valida por janela invalida/excessiva, quebrando o\ncontrato de revogacao oportuna da signing-key.","operationId":"rotate_signing_key_api_v1_admin_signing_keys_rotate_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"grace_hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":0,"default":168,"title":"Grace Hours"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rotate Signing Key Api V1 Admin Signing Keys Rotate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/grants":{"post":{"tags":["Admin RBAC"],"summary":"Criar grant per-recurso","operationId":"create_grant_api_v1_admin_grants_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGrantBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Create Grant Api V1 Admin Grants Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/admin/grants/{grant_id}":{"delete":{"tags":["Admin RBAC"],"summary":"Revogar grant per-recurso","operationId":"revoke_grant_api_v1_admin_grants__grant_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","title":"Grant Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/resources/{resource_type}/{resource_id}/grants":{"get":{"tags":["Admin RBAC"],"summary":"Listar grants de um recurso","operationId":"list_resource_grants_api_v1_admin_resources__resource_type___resource_id__grants_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","title":"Resource Type"}},{"name":"resource_id","in":"path","required":true,"schema":{"type":"string","title":"Resource Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Resource Grants Api V1 Admin Resources  Resource Type   Resource Id  Grants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/capability-denies":{"post":{"tags":["Admin RBAC"],"summary":"Criar negacao de capability","operationId":"create_capability_deny_api_v1_admin_capability_denies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCapabilityDenyBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Create Capability Deny Api V1 Admin Capability Denies Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/admin/capability-denies/{deny_id}":{"delete":{"tags":["Admin RBAC"],"summary":"Revogar negacao de capability","operationId":"revoke_capability_deny_api_v1_admin_capability_denies__deny_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"deny_id","in":"path","required":true,"schema":{"type":"string","title":"Deny Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/subjects/{subject_type}/{subject_id}/capability-denies":{"get":{"tags":["Admin RBAC"],"summary":"Listar negacoes de um subject","operationId":"list_capability_denies_api_v1_admin_subjects__subject_type___subject_id__capability_denies_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"subject_type","in":"path","required":true,"schema":{"type":"string","title":"Subject Type"}},{"name":"subject_id","in":"path","required":true,"schema":{"type":"string","title":"Subject Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Capability Denies Api V1 Admin Subjects  Subject Type   Subject Id  Capability Denies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users":{"get":{"tags":["Admin Users"],"summary":"Listar usuarios da org","operationId":"list_users_api_v1_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Users Api V1 Admin Users Get"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/admin/users/{user_id}/suspend":{"post":{"tags":["Admin Users"],"summary":"Suspender usuario","operationId":"suspend_user_api_v1_admin_users__user_id__suspend_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Suspend User Api V1 Admin Users  User Id  Suspend Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/reactivate":{"post":{"tags":["Admin Users"],"summary":"Reativar usuario","operationId":"reactivate_user_api_v1_admin_users__user_id__reactivate_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Reactivate User Api V1 Admin Users  User Id  Reactivate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/deactivate":{"post":{"tags":["Admin Users"],"summary":"Desativar usuario","operationId":"deactivate_user_api_v1_admin_users__user_id__deactivate_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Deactivate User Api V1 Admin Users  User Id  Deactivate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/reset-password":{"post":{"tags":["Admin Users"],"summary":"Admin reset de senha","operationId":"admin_reset_password_api_v1_admin_users__user_id__reset_password_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminResetPasswordBody"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/unlock":{"post":{"tags":["Admin Users"],"summary":"Admin unlock de usuario","operationId":"admin_unlock_api_v1_admin_users__user_id__unlock_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Unlock Api V1 Admin Users  User Id  Unlock Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/effective-permissions":{"get":{"tags":["Admin RBAC"],"summary":"Preview de permissoes efetivas (com origem)","description":"Resolve as permissoes efetivas do usuario e a origem de cada uma.","operationId":"effective_permissions_api_v1_admin_users__user_id__effective_permissions_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Effective Permissions Api V1 Admin Users  User Id  Effective Permissions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/settings/global-defaults":{"patch":{"tags":["Admin Settings"],"summary":"Atualizar defaults globais de plataforma","operationId":"update_global_defaults_api_v1_admin_settings_global_defaults_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGlobalWorkspaceDefaultsBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Global Defaults Api V1 Admin Settings Global Defaults Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/catalog/sources":{"get":{"tags":["catalog"],"summary":"List Sources","operationId":"list_sources_api_v1_catalog_sources_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip N items","default":0,"title":"Offset"},"description":"Skip N items"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for next page (keyset-based)","title":"Cursor"},"description":"Cursor for next page (keyset-based)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field:direction","default":"created_at:desc","title":"Sort"},"description":"Sort field:direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_SourceResponse_"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["catalog"],"summary":"Register Source","operationId":"register_source_api_v1_catalog_sources_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterSourceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/sources/{source_id}":{"delete":{"tags":["catalog"],"summary":"Unregister Source","operationId":"unregister_source_api_v1_catalog_sources__source_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnregisterSourceResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/refresh":{"post":{"tags":["catalog"],"summary":"Refresh","operationId":"refresh_api_v1_catalog_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshResultResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/catalog/search":{"get":{"tags":["catalog"],"summary":"Search","operationId":"search_api_v1_catalog_search_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Full-text search query","title":"Q"},"description":"Full-text search query"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source ID","title":"Source"},"description":"Filter by source ID"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by object type","title":"Type"},"description":"Filter by object type"},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tag","title":"Tag"},"description":"Filter by tag"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResultResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/objects":{"get":{"tags":["catalog"],"summary":"List Objects","operationId":"list_objects_api_v1_catalog_objects_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"source","in":"query","required":true,"schema":{"type":"string","description":"Source ID","title":"Source"},"description":"Source ID"},{"name":"schema","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by schema","title":"Schema"},"description":"Filter by schema"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by object type","title":"Type"},"description":"Filter by object type"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResultResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/objects/{source_id}/{schema}/{name}/columns":{"get":{"tags":["catalog"],"summary":"Get Columns","operationId":"get_columns_api_v1_catalog_objects__source_id___schema___name__columns_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}},{"name":"schema","in":"path","required":true,"schema":{"type":"string","title":"Schema"}},{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColumnsResultResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/diff":{"get":{"tags":["catalog"],"summary":"Diff","operationId":"diff_api_v1_catalog_diff_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"source","in":"query","required":true,"schema":{"type":"string","description":"Source ID (obrigatorio)","title":"Source"},"description":"Source ID (obrigatorio)"},{"name":"snapshot-old","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot-Old"}},{"name":"snapshot-new","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot-New"}},{"name":"breaking-only","in":"query","required":false,"schema":{"type":"boolean","description":"Somente breaking","default":false,"title":"Breaking-Only"},"description":"Somente breaking"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiffResultResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/tags":{"post":{"tags":["catalog"],"summary":"Add Tags","operationId":"add_tags_api_v1_catalog_tags_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddTagsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagResultResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"delete":{"tags":["catalog"],"summary":"Remove Tag","operationId":"remove_tag_api_v1_catalog_tags_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveTagRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagResultResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/catalog/status":{"get":{"tags":["catalog"],"summary":"Get Status","operationId":"get_status_api_v1_catalog_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogStatusResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/catalog/export":{"get":{"tags":["catalog"],"summary":"Export Catalog","operationId":"export_catalog_api_v1_catalog_export_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Maximo de objects/columns por pagina","default":10000,"title":"Limit"},"description":"Maximo de objects/columns por pagina"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Deslocamento de paginacao","default":0,"title":"Offset"},"description":"Deslocamento de paginacao"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogExportResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/push":{"post":{"tags":["catalog"],"summary":"Push Catalog","operationId":"push_catalog_api_v1_catalog_push_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogPushResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/pipelines":{"get":{"tags":["Pipelines"],"summary":"Listar pipelines disponiveis (paginado)","operationId":"list_pipelines_api_v1_pipelines_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"config_path","in":"query","required":true,"schema":{"type":"string","title":"Config Path"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip N items","default":0,"title":"Offset"},"description":"Skip N items"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for next page (keyset-based)","title":"Cursor"},"description":"Cursor for next page (keyset-based)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field:direction","default":"created_at:desc","title":"Sort"},"description":"Sort field:direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_PipelineInfoResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/detail":{"get":{"tags":["Pipelines"],"summary":"Detalhes de pipeline com steps para DAG","operationId":"pipeline_detail_api_v1_pipelines_detail_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"config_path","in":"query","required":true,"schema":{"type":"string","title":"Config Path"}},{"name":"pipeline_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pipeline Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/run":{"post":{"tags":["Pipelines"],"summary":"Submeter execucao assincrona de pipeline","operationId":"run_pipeline_api_v1_pipelines_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunPipelineRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunPipelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/pipelines/history":{"get":{"tags":["Pipelines"],"summary":"Historico de execucoes de pipelines","operationId":"pipeline_history_api_v1_pipelines_history_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"pipeline_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"Filtra o historico pelo pipeline; vazio e rejeitado com 422","title":"Pipeline Name"},"description":"Filtra o historico pelo pipeline; vazio e rejeitado com 422"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/validate":{"post":{"tags":["Pipelines"],"summary":"Validar YAML de pipeline","operationId":"validate_config_api_v1_pipelines_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateConfigRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/pipelines/dry-run":{"post":{"tags":["Pipelines"],"summary":"Simulacao de execucao de pipeline","operationId":"dry_run_api_v1_pipelines_dry_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DryRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DryRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/pipelines/definitions":{"post":{"tags":["Pipelines"],"summary":"Publica definicao de pipeline no registro do tenant","operationId":"publish_definition_api_v1_pipelines_definitions_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishDefinitionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Pipelines"],"summary":"Lista definicoes de pipeline registradas do tenant","operationId":"list_definitions_api_v1_pipelines_definitions_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Rotulos exigidos; ausente lista tudo","title":"Tag"},"description":"Rotulos exigidos; ausente lista tudo"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListDefinitionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/templates":{"get":{"tags":["Pipelines"],"summary":"Lista templates de pipeline (builtin + contrib + user)","operationId":"list_pipeline_templates_api_v1_pipelines_templates_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"source","in":"query","required":false,"schema":{"type":"string","pattern":"^(builtin|contrib|user|all)$","default":"all","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PipelineTemplateDescriptorResponse"},"title":"Response List Pipeline Templates Api V1 Pipelines Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/backfill":{"post":{"tags":["Pipelines"],"summary":"Submeter backfill por janela temporal (assincrono)","operationId":"submit_backfill_api_v1_pipelines_backfill_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitBackfillRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Pipelines"],"summary":"Listar backfills do tenant","operationId":"list_backfills_api_v1_pipelines_backfill_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"pipeline_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Pipeline Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip N items","default":0,"title":"Offset"},"description":"Skip N items"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for next page (keyset-based)","title":"Cursor"},"description":"Cursor for next page (keyset-based)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field:direction","default":"created_at:desc","title":"Sort"},"description":"Sort field:direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/backfill/{backfill_id}":{"delete":{"tags":["Pipelines"],"summary":"Cancelar backfill em andamento","operationId":"cancel_backfill_api_v1_pipelines_backfill__backfill_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"backfill_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"title":"Backfill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillCancelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Pipelines"],"summary":"Detalhe de backfill com particoes","operationId":"get_backfill_api_v1_pipelines_backfill__backfill_id__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"backfill_id","in":"path","required":true,"schema":{"type":"string","minLength":1,"title":"Backfill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/templates/validate":{"post":{"tags":["Pipelines"],"summary":"Valida pipeline YAML para o marketplace","operationId":"validate_pipeline_template_api_v1_pipelines_templates_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineTemplateValidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineTemplateValidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/pipelines/templates/upload":{"post":{"tags":["Pipelines"],"summary":"Upload de pipeline template ao storage local","operationId":"upload_pipeline_template_api_v1_pipelines_templates_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineTemplateUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineTemplateUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/pipelines/marketplace/pull":{"post":{"tags":["Pipelines"],"summary":"Pull de pipeline template do marketplace","operationId":"pull_pipeline_template_api_v1_pipelines_marketplace_pull_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineTemplatePullRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineTemplatePullResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/pipelines/marketplace/search":{"post":{"tags":["Pipelines"],"summary":"Busca pipeline templates no marketplace","operationId":"search_marketplace_api_v1_pipelines_marketplace_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineMarketplaceSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineMarketplaceSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/pipelines/marketplace/publish":{"post":{"tags":["Pipelines"],"summary":"Publica pipeline template no marketplace","operationId":"publish_pipeline_template_api_v1_pipelines_marketplace_publish_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineTemplatePublishRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineTemplatePublishResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/powerbi/parse":{"post":{"tags":["powerbi"],"summary":"Extrai modelo semantico Power BI de PBIX/TMDL/Service","description":"Extrai o modelo semantico e retorna o resumo (tabelas/measures/rels).","operationId":"parse_model_api_v1_powerbi_parse_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/powerbi/transpile":{"post":{"tags":["powerbi"],"summary":"Transpila expressoes DAX do modelo para SQL DuckDB","description":"Transpila as expressoes DAX e retorna as metricas de cobertura.","operationId":"transpile_dax_api_v1_powerbi_transpile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranspileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranspileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/powerbi/pipeline":{"post":{"tags":["powerbi"],"summary":"Gera pipeline YAML executavel a partir de modelo Power BI","description":"Gera o pipeline YAML e retorna o resumo (steps/tabelas/materializadas).\n\nRaises:\n    ConfigurationError: Se o destino for recusado pela politica de escrita.","operationId":"generate_pipeline_api_v1_powerbi_pipeline_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/powerbi/snapshot":{"post":{"tags":["powerbi"],"summary":"Cria snapshot versionado de modelo Power BI","description":"Cria o snapshot e retorna hash e status de mudanca desde o anterior.","operationId":"snapshot_model_api_v1_powerbi_snapshot_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSnapshotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/watchdog/status":{"get":{"tags":["watchdog"],"summary":"Get Watchdog Status","description":"Retorna status consolidado do watchdog.","operationId":"get_watchdog_status_api_v1_watchdog_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchdogStatusResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/watchdog/scan":{"post":{"tags":["watchdog"],"summary":"Scan Executions","description":"Executa scan manual de execucoes ativas.","operationId":"scan_executions_api_v1_watchdog_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/watchdog/dlq":{"get":{"tags":["watchdog"],"summary":"Get Dlq Status","description":"Retorna status da Dead Letter Queue.","operationId":"get_dlq_status_api_v1_watchdog_dlq_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DLQStatusResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/watchdog/dlq/{entry_id}/retry":{"post":{"tags":["watchdog"],"summary":"Retry Dlq Entry","description":"Re-enfileira entrada do DLQ para retry.","operationId":"retry_dlq_entry_api_v1_watchdog_dlq__entry_id__retry_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DLQMutationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watchdog/dlq/{entry_id}/archive":{"post":{"tags":["watchdog"],"summary":"Archive Dlq Entry","description":"Arquiva entrada do DLQ (desiste de retries).","operationId":"archive_dlq_entry_api_v1_watchdog_dlq__entry_id__archive_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DLQMutationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watchdog/alerts/{alert_key}/acknowledge":{"post":{"tags":["watchdog"],"summary":"Acknowledge Alert","description":"Suprime o alerta informado pela janela em minutos do request.","operationId":"acknowledge_alert_api_v1_watchdog_alerts__alert_key__acknowledge_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"alert_key","in":"path","required":true,"schema":{"type":"string","title":"Alert Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeAlertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeAlertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/subscriptions":{"get":{"tags":["webhooks"],"summary":"Lista subscriptions outbound do tenant","operationId":"list_subscriptions_api_v1_webhooks_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"},"type":"array","title":"Response List Subscriptions Api V1 Webhooks Subscriptions Get"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["webhooks"],"summary":"Registra subscription outbound","operationId":"register_subscription_api_v1_webhooks_subscriptions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterWebhookSubscriptionRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/webhooks/subscriptions/{subscription_id}":{"get":{"tags":["webhooks"],"summary":"Obtem subscription outbound por ID","operationId":"get_subscription_api_v1_webhooks_subscriptions__subscription_id__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["webhooks"],"summary":"Atualiza subscription outbound","operationId":"update_subscription_api_v1_webhooks_subscriptions__subscription_id__patch","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookSubscriptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["webhooks"],"summary":"Remove subscription outbound","operationId":"delete_subscription_api_v1_webhooks_subscriptions__subscription_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/events/sources":{"get":{"tags":["events"],"summary":"Lista event sources do tenant","description":"Lista os EventSources do tenant.","operationId":"list_sources_api_v1_events_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSourceResponse"},"type":"array","title":"Response List Sources Api V1 Events Sources Get"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["events"],"summary":"Registra novo event source","description":"Registra um novo EventSource para o tenant.","operationId":"register_source_api_v1_events_sources_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterEventSourceRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/events/sources/{source_id}":{"delete":{"tags":["events"],"summary":"Remove event source por ID","description":"Remove o EventSource; 404 (EventSourceNotFoundError) se inexistente no tenant.","operationId":"delete_source_api_v1_events_sources__source_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"404":{"description":"Recurso nao encontrado.","content":{"application/json":{"example":{"type":"sdk_error/NotFoundError","title":"Not Found Error","detail":"Resource not found","status":404,"error_code":"RESOURCE_NOT_FOUND"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/events/subscriptions":{"get":{"tags":["events"],"summary":"Lista subscriptions do tenant","description":"Lista as EventSubscriptions do tenant.","operationId":"list_subscriptions_api_v1_events_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSubscriptionResponse"},"type":"array","title":"Response List Subscriptions Api V1 Events Subscriptions Get"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["events"],"summary":"Registra subscription ligando source a pipeline","description":"Cria uma EventSubscription para o tenant.","operationId":"register_subscription_api_v1_events_subscriptions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterEventSubscriptionRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSubscriptionResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/events/subscriptions/{subscription_id}":{"delete":{"tags":["events"],"summary":"Remove subscription por ID","description":"Remove a EventSubscription do tenant (idempotente — sem erro se inexistente).","operationId":"remove_subscription_api_v1_events_subscriptions__subscription_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/events/dlq":{"get":{"tags":["events"],"summary":"Mostra entradas da DLQ do tenant","description":"Lista as entradas da Dead Letter Queue do tenant.","operationId":"show_dlq_api_v1_events_dlq_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtra entradas apos esta data (ISO 8601)","title":"Since"},"description":"Filtra entradas apos esta data (ISO 8601)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventDLQEntryResponse"},"title":"Response Show Dlq Api V1 Events Dlq Get"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/events/dlq/retry":{"post":{"tags":["events"],"summary":"Retenta entradas da DLQ do tenant","description":"Retenta ate `limit` entradas da DLQ do tenant.","operationId":"retry_dlq_api_v1_events_dlq_retry_post","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Maximo de entradas a retentar","default":10,"title":"Limit"},"description":"Maximo de entradas a retentar"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryDLQResponse"}}}},"401":{"description":"Token JWT ausente, invalido ou expirado.","content":{"application/json":{"example":{"type":"sdk_error/AuthenticationError","title":"Authentication Error","detail":"Token expired","status":401,"error_code":"AUTH_TOKEN_EXPIRED"}}}},"403":{"description":"Permissao insuficiente para esta operacao.","content":{"application/json":{"example":{"type":"sdk_error/AuthorizationError","title":"Authorization Error","detail":"Permission 'pipelines:run' required","status":403,"error_code":"INSUFFICIENT_PERMISSIONS"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerting/alerts":{"get":{"tags":["alerting"],"summary":"Query Alerts","description":"Consulta historico de alertas do tenant com filtros e paginacao.\n\nstart_date/end_date default para uma janela ampla (epoch ate agora)\nquando nao fornecidos — QueryAlertsCommand exige datas nao-opcionais.","operationId":"query_alerts_api_v1_alerting_alerts_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"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":{"$ref":"#/components/schemas/QueryAlertsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerting/maintenance":{"get":{"tags":["alerting"],"summary":"List Active Maintenance Windows","description":"Lista janelas de manutencao ativas do tenant.","operationId":"list_active_maintenance_windows_api_v1_alerting_maintenance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MaintenanceWindowResponse"},"type":"array","title":"Response List Active Maintenance Windows Api V1 Alerting Maintenance Get"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]},"post":{"tags":["alerting"],"summary":"Create Maintenance Window","description":"Cria nova janela de manutencao.","operationId":"create_maintenance_window_api_v1_alerting_maintenance_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMaintenanceWindowRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/alerting/maintenance/{window_id}":{"delete":{"tags":["alerting"],"summary":"Delete Maintenance Window","description":"Remove janela de manutencao pelo id.","operationId":"delete_maintenance_window_api_v1_alerting_maintenance__window_id__delete","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"window_id","in":"path","required":true,"schema":{"type":"string","title":"Window Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerting/health":{"get":{"tags":["alerting"],"summary":"Get Alerting Health","description":"Retorna saude do subsistema de delivery de alertas.","operationId":"get_alerting_health_api_v1_alerting_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertingHealthResponse"}}}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}]}},"/api/v1/cost/aggregate":{"get":{"tags":["cost"],"summary":"Get Cost Aggregate","description":"Consulta custo agregado do tenant autenticado na janela informada.\n\nSem window_start/window_end, usa o mes corrente (TimeWindow.current_month()).","operationId":"get_cost_aggregate_api_v1_cost_aggregate_get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"window_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Window Start"}},{"name":"window_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Window End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostAggregateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost/budget/{tenant_id}":{"get":{"tags":["cost"],"summary":"Get Budget","description":"Consulta BudgetConfig de um tenant especifico (FinOps admin).","operationId":"get_budget_api_v1_cost_budget__tenant_id__get","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BudgetConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["cost"],"summary":"Set Budget","description":"Configura (cria ou atualiza) BudgetConfig de um tenant (FinOps admin).","operationId":"set_budget_api_v1_cost_budget__tenant_id__put","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"HTTPBasic":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetBudgetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BudgetConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AcceptInviteRequest":{"properties":{"org":{"type":"string","minLength":1,"title":"Org","description":"tenant_id/dominio da org, do link de convite","examples":["corp-financeiro"]},"token":{"type":"string","minLength":1,"format":"password","title":"Token","description":"Token do convite (plaintext do link de aceite)","writeOnly":true},"password":{"type":"string","maxLength":1024,"minLength":1,"format":"password","title":"Password","description":"Senha escolhida (validada por policy NIST 800-63B no use case)","writeOnly":true},"display_name":{"type":"string","title":"Display Name","description":"Nome de exibicao da conta","default":""}},"type":"object","required":["org","token","password"],"title":"AcceptInviteRequest","description":"Request anonimo para aceitar um convite via link.\n\nO convidado nao possui JWT: o tenant vem do `org` explicito do link de\nconvite. A senha escolhida e validada por policy NIST no use case."},"AcceptInviteResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"ID do usuario provisionado","examples":["joao.silva"]},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID do tenant (org do convite)","examples":["corp-financeiro"]},"email":{"type":"string","title":"Email","description":"Email primario da conta","examples":["joao.silva@corp.com"]}},"type":"object","required":["user_id","tenant_id","email"],"title":"AcceptInviteResponse","description":"Resposta com dados da conta provisionada pelo aceite."},"AcknowledgeAlertRequest":{"properties":{"minutes":{"type":"integer","maximum":1440.0,"minimum":1.0,"title":"Minutes","default":60}},"type":"object","title":"AcknowledgeAlertRequest","description":"Request para POST /watchdog/alerts/{alert_key}/acknowledge."},"AcknowledgeAlertResponse":{"properties":{"alert_key":{"type":"string","title":"Alert Key"},"suppress_seconds":{"type":"integer","title":"Suppress Seconds"}},"type":"object","required":["alert_key","suppress_seconds"],"title":"AcknowledgeAlertResponse","description":"Response para POST /watchdog/alerts/{alert_key}/acknowledge."},"ActivityEntry":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"action":{"type":"string","title":"Action"},"resource_type":{"type":"string","title":"Resource Type"},"resource_id":{"type":"string","title":"Resource Id"},"details":{"additionalProperties":true,"type":"object","title":"Details"}},"type":"object","required":["timestamp","action","resource_type","resource_id"],"title":"ActivityEntry","description":"Entrada de atividade recente.\n\nArgs:\n    timestamp: Quando ocorreu.\n    action: Tipo de acao (job_started, job_completed, schedule_triggered, alert_fired).\n    resource_type: Tipo de recurso (pipeline, schedule, alert, storage).\n    resource_id: ID do recurso.\n    details: Detalhes adicionais."},"ActivityResponse":{"properties":{"total":{"type":"integer","title":"Total"},"entries":{"items":{"$ref":"#/components/schemas/ActivityEntry"},"type":"array","title":"Entries"}},"type":"object","required":["total","entries"],"title":"ActivityResponse","description":"Resposta do endpoint de atividade recente.\n\nArgs:\n    total: Total de entries.\n    entries: Lista de atividades."},"AddTagsRequest":{"properties":{"source_id":{"type":"string","title":"Source Id"},"object_path":{"type":"string","title":"Object Path"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["source_id","object_path","tags"],"title":"AddTagsRequest","description":"Request para POST /catalog/tags."},"AdminResetPasswordBody":{"properties":{"temporary_password":{"type":"string","minLength":1,"format":"password","title":"Temporary Password","description":"Senha temporaria","writeOnly":true}},"type":"object","required":["temporary_password"],"title":"AdminResetPasswordBody","description":"Body para o admin definir senha temporaria (forca troca no proximo acesso)."},"AggregateRequest":{"properties":{"measure":{"type":"string","minLength":1,"title":"Measure"},"dimension":{"type":"string","minLength":1,"title":"Dimension"},"filters":{"items":{"$ref":"#/components/schemas/FilterModel"},"type":"array","title":"Filters"},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","default":20}},"type":"object","required":["measure","dimension"],"title":"AggregateRequest","description":"Corpo do POST /report-serving/{page}/aggregate."},"AggregateResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"measure":{"type":"string","title":"Measure"},"dimension":{"type":"string","title":"Dimension"},"rows":{"items":{"$ref":"#/components/schemas/AggregateRowModel"},"type":"array","title":"Rows"}},"type":"object","required":["page_id","measure","dimension"],"title":"AggregateResponse","description":"Resposta do endpoint de agregacao."},"AggregateRowModel":{"properties":{"key":{"type":"string","title":"Key"},"value":{"type":"number","title":"Value"}},"type":"object","required":["key","value"],"title":"AggregateRowModel","description":"Linha agregada (chave da dimensao + valor da medida)."},"AlertSummary":{"properties":{"total_configured":{"type":"integer","title":"Total Configured","default":0},"triggered_today":{"type":"integer","title":"Triggered Today","default":0},"acknowledged":{"type":"integer","title":"Acknowledged","default":0},"available":{"type":"boolean","title":"Available","default":false}},"type":"object","title":"AlertSummary","description":"Sumario de alertas.\n\nArgs:\n    total_configured: Total de alertas configurados.\n    triggered_today: Disparados hoje.\n    acknowledged: Reconhecidos.\n    available: True quando os contadores refletem agregacao real; False quando\n        ainda nao computados (distingue \"0 real\" de \"indisponivel\")."},"AlertSummaryDTO":{"properties":{"id":{"type":"string","title":"Id"},"severity":{"type":"string","title":"Severity"},"source":{"type":"string","title":"Source"},"message":{"type":"string","title":"Message"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["id","severity","source","message","timestamp"],"title":"AlertSummaryDTO","description":"Item de alerta recente no dashboard (view tenant-scoped)."},"AlertSummaryResponse":{"properties":{"id":{"type":"string","title":"Id"},"severity":{"type":"string","title":"Severity"},"source":{"type":"string","title":"Source"},"message":{"type":"string","title":"Message"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["id","severity","source","message","timestamp","tenant_id"],"title":"AlertSummaryResponse","description":"Response individual de alerta (item de QueryAlertsResponse)."},"AlertingHealthResponse":{"properties":{"delivery_ready":{"type":"boolean","title":"Delivery Ready"},"providers_available":{"items":{"type":"string"},"type":"array","title":"Providers Available"},"reason":{"title":"Reason","type":"string","nullable":true}},"type":"object","required":["delivery_ready","providers_available","reason"],"title":"AlertingHealthResponse","description":"Response para GET /alerting/health."},"AnalyzeBlockingRequestDTO":{"properties":{"tables":{"items":{"type":"string"},"type":"array","title":"Tables"},"blocking_rules":{"items":{"$ref":"#/components/schemas/BlockingRuleSpecRequest"},"type":"array","title":"Blocking Rules"},"link_type":{"type":"string","title":"Link Type","default":"dedupe_only"},"unique_id_column":{"type":"string","title":"Unique Id Column","default":"unique_id"},"output_dir":{"type":"string","title":"Output Dir","default":"linkage_diagnostics"},"fail_above":{"title":"Fail Above","type":"integer","nullable":true}},"type":"object","required":["tables","blocking_rules"],"title":"AnalyzeBlockingRequestDTO","description":"Request canonico para medicao de pares gerados por blocking rules."},"AnalyzeBlockingResponseDTO":{"properties":{"counts_per_rule":{"items":{"type":"integer"},"type":"array","title":"Counts Per Rule","default":[]},"cumulative_chart":{"type":"string","title":"Cumulative Chart","default":""}},"type":"object","title":"AnalyzeBlockingResponseDTO","description":"Response canonica da medicao de pares gerados por blocking rules."},"AnalyzeCodeRequest":{"properties":{"code":{"type":"string","minLength":1,"title":"Code","description":"Codigo Python a analisar"},"file_path":{"type":"string","title":"File Path","description":"Rotulo do arquivo (telemetria)","default":"inline.py"}},"type":"object","required":["code"],"title":"AnalyzeCodeRequest","description":"Body de POST /code/analyze."},"AnalyzeCodeResponse":{"properties":{"file_path":{"type":"string","title":"File Path"},"total_lines":{"type":"integer","title":"Total Lines"},"code_lines":{"type":"integer","title":"Code Lines"},"comment_lines":{"type":"integer","title":"Comment Lines"},"imports":{"items":{"type":"string"},"type":"array","title":"Imports"},"functions":{"items":{"type":"string"},"type":"array","title":"Functions"},"classes":{"items":{"type":"string"},"type":"array","title":"Classes"},"complexity_score":{"type":"integer","title":"Complexity Score"}},"type":"object","required":["file_path","total_lines","code_lines","comment_lines","imports","functions","classes","complexity_score"],"title":"AnalyzeCodeResponse","description":"Response de POST /code/analyze."},"ArtifactDeleteResponse":{"properties":{"deleted":{"type":"boolean","title":"Deleted"},"path":{"type":"string","title":"Path"}},"type":"object","required":["deleted","path"],"title":"ArtifactDeleteResponse","description":"Resposta de remocao de artefato."},"ArtifactListItemResponse":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"size_bytes":{"title":"Size Bytes","type":"integer","nullable":true}},"type":"object","required":["path","name"],"title":"ArtifactListItemResponse","description":"Item da listagem de artefatos."},"ArtifactListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ArtifactListItemResponse"},"type":"array","title":"Items"},"prefix":{"type":"string","title":"Prefix"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","prefix","total"],"title":"ArtifactListResponse","description":"Resposta de listagem de artefatos."},"ArtifactUploadResponse":{"properties":{"storage_path":{"type":"string","title":"Storage Path"},"filename":{"type":"string","title":"Filename"},"size_bytes":{"type":"integer","title":"Size Bytes"},"sha256":{"type":"string","title":"Sha256"},"artifact_type":{"type":"string","title":"Artifact Type"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["storage_path","filename","size_bytes","sha256","artifact_type","tenant_id"],"title":"ArtifactUploadResponse","description":"Resposta de upload (UploadResult.model_dump)."},"AssetKey":{"properties":{"tenant_id":{"type":"string","minLength":1,"title":"Tenant Id","description":"Tenant owner do asset."},"namespace":{"type":"string","minLength":1,"title":"Namespace","description":"Escopo logico do asset (ex: pipeline.etl_diario, bronze, silver)."},"name":{"type":"string","minLength":1,"title":"Name","description":"Nome do asset - pode ter hierarquia via '.' ex: bronze.orders."},"zone":{"description":"Camada medallion (bronze/silver/gold). None = não-rotulado (opt-in).","$ref":"#/components/schemas/Zone","nullable":true},"source_authority":{"description":"Proveniência do asset: INTERNAL_RAW (cru extraído pelo Sindri) ou EXTERNAL_CURATED (curado por system-of-record externo, ex: SAP Datasphere). None = não-rotulado (opt-in). Habilita a regra D4 no validate_zones.","$ref":"#/components/schemas/SourceAuthority","nullable":true}},"additionalProperties":false,"type":"object","required":["tenant_id","namespace","name"],"title":"AssetKey","description":"Identificador canonico de asset materializado por um step de pipeline.\n\nImutavel (frozen=True). Formato canonico: tenant_id:namespace:name.\nNamespace e name validados por regex DNS-like.\nCross-tenant reference rejeitado por validator em BasePipelineStep.\n\nArgs:\n    tenant_id: Identificador do tenant owner do asset.\n    namespace: Escopo logico (ex: pipeline.etl_diario, bronze, silver).\n    name: Nome do asset dentro do namespace (ex: orders, bronze.orders)."},"AssignRoleBody":{"properties":{"subject_type":{"type":"string","title":"Subject Type","description":"'user' | 'group' | 'service_account'","default":"user"},"subject_id":{"type":"string","minLength":1,"title":"Subject Id","description":"Identificador do subject"},"role_name":{"type":"string","minLength":1,"title":"Role Name","description":"Nome da role (built-in ou custom)"}},"type":"object","required":["subject_id","role_name"],"title":"AssignRoleBody","description":"Body para atribuir uma role a um subject."},"AuditCountResponse":{"properties":{"count":{"type":"integer","title":"Count"},"since":{"type":"string","title":"Since"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["count","since","tenant_id"],"title":"AuditCountResponse","description":"Response da contagem de registros de auditoria."},"AuditEntryResponse":{"properties":{"entry_id":{"type":"string","title":"Entry Id"},"timestamp":{"type":"string","title":"Timestamp"},"tenant_id":{"type":"string","title":"Tenant Id"},"actor":{"type":"string","title":"Actor"},"access_mode":{"type":"string","title":"Access Mode"},"action":{"type":"string","title":"Action"},"resource":{"type":"string","title":"Resource"},"status":{"type":"string","title":"Status"},"details":{"additionalProperties":true,"type":"object","title":"Details"},"correlation_id":{"title":"Correlation Id","type":"string","nullable":true},"ip_address":{"title":"Ip Address","type":"string","nullable":true},"duration_ms":{"title":"Duration Ms","type":"number","nullable":true}},"type":"object","required":["entry_id","timestamp","tenant_id","actor","access_mode","action","resource","status"],"title":"AuditEntryResponse","description":"Representacao REST de um registro de auditoria."},"AuditExportFormat":{"type":"string","enum":["json","csv"],"title":"AuditExportFormat","description":"Formatos de exportacao do audit trail.\n\nAttributes:\n    JSON: Exportacao como array JSON.\n    CSV: Exportacao como CSV com headers."},"AuditListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AuditEntryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":50},"offset":{"type":"integer","title":"Offset","default":0},"has_next":{"type":"boolean","title":"Has Next","default":false},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true}},"type":"object","title":"AuditListResponse","description":"Response paginada da listagem de audit trail (GET /audit)."},"BackfillCancelResponse":{"properties":{"backfill_id":{"type":"string","title":"Backfill Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["backfill_id","status"],"title":"BackfillCancelResponse","description":"Resultado do cancelamento de um backfill.\n\nAttributes:\n    backfill_id: Backfill cancelado.\n    status: Estado gravado (cancelled)."},"BackfillDetailResponse":{"properties":{"backfill":{"$ref":"#/components/schemas/BackfillRecord"},"runs":{"items":{"$ref":"#/components/schemas/BackfillRunRecord"},"type":"array","title":"Runs"}},"type":"object","required":["backfill","runs"],"title":"BackfillDetailResponse","description":"Detalhe de um backfill com as execucoes por particao.\n\nAttributes:\n    backfill: Registro do backfill.\n    runs: Execucoes por particao, na ordem devolvida pelo store."},"BackfillGranularity":{"type":"string","enum":["hour","day","week","month"],"title":"BackfillGranularity","description":"Granularidade de particao temporal para backfill."},"BackfillListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BackfillRecord"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_next":{"type":"boolean","title":"Has Next"}},"type":"object","required":["items","limit","offset","has_next"],"title":"BackfillListResponse","description":"Pagina de backfills do tenant.\n\nSem total: o store nao publica contagem e uma agregacao exigiria motor real no\nguard de forma de SQL. `has_next` e derivado buscando um registro alem da pagina.\n\nAttributes:\n    items: Registros da pagina.\n    limit: Limite aplicado.\n    offset: Deslocamento aplicado.\n    has_next: Se existe pagina seguinte."},"BackfillRecord":{"properties":{"backfill_id":{"type":"string","title":"Backfill Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"pipeline_name":{"type":"string","title":"Pipeline Name"},"window_start":{"type":"string","format":"date-time","title":"Window Start"},"window_end":{"type":"string","format":"date-time","title":"Window End"},"granularity":{"type":"string","title":"Granularity"},"partition_var":{"type":"string","title":"Partition Var"},"status":{"type":"string","title":"Status"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"title":"Completed At","type":"string","format":"date-time","nullable":true},"total_partitions":{"type":"integer","title":"Total Partitions","default":0},"completed_partitions":{"type":"integer","title":"Completed Partitions","default":0},"failed_partitions":{"type":"integer","title":"Failed Partitions","default":0},"triggered_by":{"type":"string","title":"Triggered By","default":"cli"}},"additionalProperties":false,"type":"object","required":["backfill_id","tenant_id","pipeline_name","window_start","window_end","granularity","partition_var","status","started_at"],"title":"BackfillRecord","description":"Registro de estado de um backfill (persistido em _tdv_backfills).\n\nAttributes:\n    backfill_id: Identificador unico do backfill.\n    tenant_id: Tenant que disparou o backfill.\n    pipeline_name: Nome do pipeline.\n    window_start: Inicio da janela temporal.\n    window_end: Fim da janela temporal.\n    granularity: Granularidade da particao.\n    partition_var: Variavel de particao.\n    status: Estado atual do backfill.\n    started_at: Timestamp de inicio.\n    completed_at: Timestamp de termino (None se ainda rodando).\n    total_partitions: Total de particoes planejadas.\n    completed_partitions: Particoes com sucesso.\n    failed_partitions: Particoes com falha.\n    triggered_by: Origem do disparo (cli, scheduler, etc.)."},"BackfillRunRecord":{"properties":{"backfill_id":{"type":"string","title":"Backfill Id"},"partition_index":{"type":"integer","title":"Partition Index"},"tenant_id":{"type":"string","title":"Tenant Id"},"partition_value":{"type":"string","title":"Partition Value"},"pipeline_correlation_id":{"title":"Pipeline Correlation Id","type":"string","nullable":true},"status":{"type":"string","title":"Status"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"title":"Completed At","type":"string","format":"date-time","nullable":true},"error_class":{"title":"Error Class","type":"string","nullable":true},"error_message_redacted":{"title":"Error Message Redacted","type":"string","nullable":true}},"additionalProperties":false,"type":"object","required":["backfill_id","partition_index","tenant_id","partition_value","status","started_at"],"title":"BackfillRunRecord","description":"Registro de execucao de uma particao de backfill (persistido em _tdv_backfill_runs).\n\nAttributes:\n    backfill_id: FK logica para _tdv_backfills.\n    partition_index: Indice zero-based da particao.\n    tenant_id: Tenant que disparou.\n    partition_value: Valor da particao (ex: \"2025-05-14\").\n    pipeline_correlation_id: FK logica para _tdv_pipeline_runs.\n    status: Estado da particao.\n    started_at: Timestamp de inicio da particao.\n    completed_at: Timestamp de termino da particao.\n    error_class: Nome da excecao (None se sucesso).\n    error_message_redacted: Mensagem sanitizada (None se sucesso)."},"BackfillSubmitResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"backfill_id":{"type":"string","title":"Backfill Id"},"status":{"type":"string","title":"Status"},"pipeline_name":{"type":"string","title":"Pipeline Name"},"message":{"type":"string","title":"Message"}},"type":"object","required":["job_id","backfill_id","status","pipeline_name","message"],"title":"BackfillSubmitResponse","description":"Resposta de submissao de backfill.\n\nAttributes:\n    job_id: Job assincrono para acompanhamento em GET /jobs/{job_id}.\n    backfill_id: Backfill criado ou retomado.\n    status: Status inicial do job.\n    pipeline_name: Pipeline submetido.\n    message: Mensagem de status."},"BackfillWindow":{"properties":{"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"granularity":{"$ref":"#/components/schemas/BackfillGranularity"},"partition_var":{"type":"string","pattern":"^[a-zA-Z_][a-zA-Z0-9_]*$","title":"Partition Var"},"partition_format":{"type":"string","title":"Partition Format","default":"%Y-%m-%d"}},"additionalProperties":false,"type":"object","required":["start","end","granularity","partition_var"],"title":"BackfillWindow","description":"Janela temporal para backfill com particoes deterministicas.\n\nGera particoes com iter_partitions() de forma deterministica:\nmesma janela sempre produz mesmas particoes na mesma ordem.\n\nAttributes:\n    start: Inicio inclusivo da janela (UTC, timezone-aware).\n    end: Fim exclusivo da janela (UTC, timezone-aware).\n    granularity: Tamanho de cada particao temporal.\n    partition_var: Nome da variavel de environment para a particao.\n    partition_format: Formato strftime para o valor da particao."},"BenchmarkCompareRequest":{"properties":{"baseline_path":{"type":"string","title":"Baseline Path","description":"Referencia do JSON de benchmark baseline dentro do root de dados"},"target_path":{"type":"string","title":"Target Path","description":"Referencia do JSON de benchmark target dentro do root de dados"}},"type":"object","required":["baseline_path","target_path"],"title":"BenchmarkCompareRequest","description":"Request para comparacao de benchmarks via REST.\n\nOs dois campos sao referencias de LEITURA dentro do root de dados governado\npelo servidor; o handler as resolve antes de qualquer I/O e substitui os\ncampos do comando. O valor que chega aqui e cru de proposito.\n\nAttributes:\n    baseline_path: Referencia do JSON de baseline dentro do root de dados.\n    target_path: Referencia do JSON de target dentro do root de dados."},"BenchmarkCompareResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"additionalProperties":true,"type":"object","title":"Data"},"error":{"title":"Error","type":"string","nullable":true}},"type":"object","required":["success"],"title":"BenchmarkCompareResponse","description":"Response da comparacao de benchmarks.\n\nAttributes:\n    success: Se comparacao concluiu com sucesso.\n    data: Dados da comparacao (baseline, target, deltas).\n    error: Mensagem de erro se falhou."},"BlockingRuleSpecRequest":{"properties":{"columns":{"items":{"type":"string"},"type":"array","title":"Columns","default":[]},"expression":{"type":"string","title":"Expression","default":""},"salting_partitions":{"title":"Salting Partitions","type":"integer","nullable":true},"arrays_to_explode":{"items":{"type":"string"},"type":"array","title":"Arrays To Explode","default":[]}},"type":"object","title":"BlockingRuleSpecRequest","description":"Espelho REST de BlockingRuleSpec (fronteira do gateway)."},"Body_preview_dashboard_api_v1_dashboard_preview_post":{"properties":{"yaml":{"type":"string","title":"Yaml"}},"type":"object","required":["yaml"],"title":"Body_preview_dashboard_api_v1_dashboard_preview_post"},"Body_upload_artifact_api_v1_artifacts_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_artifact_api_v1_artifacts_upload_post"},"Body_upload_file_api_v1_storage_upload_post":{"properties":{"destination":{"type":"string","title":"Destination","description":"Path de destino no storage"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"overwrite":{"type":"boolean","title":"Overwrite","description":"Sobrescrever se existente","default":false}},"type":"object","required":["destination","file"],"title":"Body_upload_file_api_v1_storage_upload_post"},"Body_upload_template_api_v1_reports_templates_upload_post":{"properties":{"template_name":{"type":"string","title":"Template Name","description":"Nome do template"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"validate_before_upload":{"type":"boolean","title":"Validate Before Upload","default":true},"overwrite":{"type":"boolean","title":"Overwrite","default":false},"version":{"title":"Version","type":"string","nullable":true}},"type":"object","required":["template_name","file"],"title":"Body_upload_template_api_v1_reports_templates_upload_post"},"BrowseStorageRequest":{"properties":{"prefix":{"type":"string","title":"Prefix","description":"Prefixo do nivel a explorar","default":""},"connection_name":{"title":"Connection Name","description":"Nome da conexao (None = default)","type":"string","nullable":true},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","description":"Maximo de entradas de arquivo","default":1000},"continuation_token":{"title":"Continuation Token","description":"Token de paginacao da pagina anterior","type":"string","nullable":true},"name_filter":{"title":"Name Filter","description":"Glob pattern; omitir ou null = sem filtro","type":"string","nullable":true}},"type":"object","title":"BrowseStorageRequest","description":"Request para navegacao hierarquica em storage."},"BrowseStorageResponse":{"properties":{"prefixes":{"items":{"$ref":"#/components/schemas/PrefixInfoResponse"},"type":"array","title":"Prefixes"},"files":{"items":{"$ref":"#/components/schemas/FileEntryResponse"},"type":"array","title":"Files"},"current_prefix":{"type":"string","title":"Current Prefix","default":""},"connection_name":{"type":"string","title":"Connection Name","default":""},"next_token":{"title":"Next Token","type":"string","nullable":true}},"type":"object","title":"BrowseStorageResponse","description":"Response de navegacao hierarquica em storage."},"BudgetConfigResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"monthly_limit_cents":{"type":"integer","title":"Monthly Limit Cents"},"soft_alert_pct":{"type":"integer","title":"Soft Alert Pct"},"hard_stop_pct":{"title":"Hard Stop Pct","type":"integer","nullable":true},"alert_webhook_ref":{"title":"Alert Webhook Ref","type":"string","nullable":true}},"type":"object","required":["tenant_id","monthly_limit_cents","soft_alert_pct","hard_stop_pct","alert_webhook_ref"],"title":"BudgetConfigResponse","description":"Response para GET/PUT /cost/budget/{tenant_id}."},"CacheStatusResponse":{"properties":{"is_available":{"type":"boolean","title":"Is Available"},"reason":{"type":"string","title":"Reason"},"checks":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Checks"},"details":{"additionalProperties":true,"type":"object","title":"Details"}},"type":"object","required":["is_available","reason"],"title":"CacheStatusResponse","description":"Response de status de cache.\n\nAttributes:\n    is_available: True se cache operacional.\n    reason: Descricao do estado.\n    checks: Resultados das verificacoes.\n    details: Detalhes adicionais."},"CatalogChangeResponse":{"properties":{"change_type":{"type":"string","title":"Change Type"},"scope":{"type":"string","title":"Scope"},"source_id":{"type":"string","title":"Source Id"},"schema_name":{"type":"string","title":"Schema Name"},"object_name":{"type":"string","title":"Object Name"},"column_name":{"type":"string","title":"Column Name"},"old_value":{"type":"string","title":"Old Value"},"new_value":{"type":"string","title":"New Value"},"is_breaking":{"type":"boolean","title":"Is Breaking"},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["change_type","scope","source_id","schema_name","object_name","column_name","old_value","new_value","is_breaking","detail"],"title":"CatalogChangeResponse","description":"Response para mudanca individual do catalogo."},"CatalogColumnResponse":{"properties":{"column_name":{"type":"string","title":"Column Name"},"data_type":{"type":"string","title":"Data Type"},"ordinal_position":{"type":"integer","title":"Ordinal Position"},"is_nullable":{"type":"boolean","title":"Is Nullable"},"is_primary_key":{"type":"boolean","title":"Is Primary Key"},"null_percent":{"title":"Null Percent","type":"number","nullable":true},"distinct_count":{"title":"Distinct Count","type":"integer","nullable":true}},"type":"object","required":["column_name","data_type","ordinal_position","is_nullable","is_primary_key","null_percent","distinct_count"],"title":"CatalogColumnResponse","description":"Response para coluna individual."},"CatalogExportResponse":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/SourceResponse"},"type":"array","title":"Sources"},"objects":{"items":{"$ref":"#/components/schemas/CatalogObjectResponse"},"type":"array","title":"Objects"},"columns":{"items":{"$ref":"#/components/schemas/CatalogColumnResponse"},"type":"array","title":"Columns"},"tags":{"items":{"$ref":"#/components/schemas/CatalogTagResponse"},"type":"array","title":"Tags"},"snapshots":{"items":{"$ref":"#/components/schemas/CatalogSnapshotResponse"},"type":"array","title":"Snapshots"},"exported_at":{"type":"string","format":"date-time","title":"Exported At"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["sources","objects","columns","tags","snapshots","exported_at","tenant_id"],"title":"CatalogExportResponse","description":"Documento completo do catalogo (corpo do GET de export)."},"CatalogObjectResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"schema_name":{"type":"string","title":"Schema Name"},"object_name":{"type":"string","title":"Object Name"},"object_type":{"type":"string","title":"Object Type"},"column_count":{"type":"integer","title":"Column Count"},"row_count":{"title":"Row Count","type":"integer","nullable":true},"total_size_bytes":{"title":"Total Size Bytes","type":"integer","nullable":true},"classification":{"type":"string","title":"Classification"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"is_active":{"type":"boolean","title":"Is Active"},"first_seen_at":{"type":"string","format":"date-time","title":"First Seen At"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At"},"data_contract":{"items":{"$ref":"#/components/schemas/DataContractRefDTO"},"type":"array","title":"Data Contract"}},"type":"object","required":["source_id","schema_name","object_name","object_type","column_count","row_count","total_size_bytes","classification","tags","is_active","first_seen_at","last_seen_at"],"title":"CatalogObjectResponse","description":"Response para objeto do catalogo."},"CatalogPushResponse":{"properties":{"objects_pushed":{"type":"integer","title":"Objects Pushed"}},"type":"object","required":["objects_pushed"],"title":"CatalogPushResponse","description":"Resultado do envio do catalogo ao sink externo configurado."},"CatalogSnapshotResponse":{"properties":{"snapshot_id":{"type":"string","title":"Snapshot Id"},"source_id":{"type":"string","title":"Source Id"},"taken_at":{"type":"string","format":"date-time","title":"Taken At"},"schemas_found":{"items":{"type":"string"},"type":"array","title":"Schemas Found"},"objects_count":{"type":"integer","title":"Objects Count"},"columns_count":{"type":"integer","title":"Columns Count"},"duration_seconds":{"type":"number","title":"Duration Seconds"},"status":{"type":"string","title":"Status"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["snapshot_id","source_id","taken_at","schemas_found","objects_count","columns_count","duration_seconds","status","errors","tenant_id"],"title":"CatalogSnapshotResponse","description":"Snapshot de descoberta de uma source."},"CatalogStatusResponse":{"properties":{"total_sources":{"type":"integer","title":"Total Sources"},"total_objects":{"type":"integer","title":"Total Objects"},"total_columns":{"type":"integer","title":"Total Columns"},"last_refresh_at":{"title":"Last Refresh At","type":"string","format":"date-time","nullable":true},"sources_summary":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sources Summary"}},"type":"object","required":["total_sources","total_objects","total_columns","last_refresh_at","sources_summary"],"title":"CatalogStatusResponse","description":"Response para GET /catalog/status (alinha a CatalogStatusResult do dominio)."},"CatalogTagResponse":{"properties":{"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category"},"color":{"type":"string","title":"Color"}},"type":"object","required":["name","category","color"],"title":"CatalogTagResponse","description":"Tag registrada no catalogo."},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","minLength":1,"format":"password","title":"Current Password","description":"Senha atual do usuario (validada contra o hash armazenado)","writeOnly":true,"examples":["s3nh@antiga"]},"new_password":{"type":"string","maxLength":1024,"minLength":1,"format":"password","title":"New Password","description":"Nova senha (validada por policy NIST 800-63B no use case)","writeOnly":true,"examples":["n0v@s3nh@segura"]}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest","description":"Request para troca de senha self-service do usuario autenticado.\n\nO usuario informa a senha atual (validada contra o hash) e a nova senha\n(validada por policy NIST no use case). Sem corpo de resposta: 204."},"CheckBreakingResponse":{"properties":{"passed":{"type":"boolean","title":"Passed","default":true}},"type":"object","title":"CheckBreakingResponse","description":"Response canonica do gate de CI de breaking change (sucesso implica ausencia)."},"CheckHolidayResponse":{"properties":{"is_holiday":{"type":"boolean","title":"Is Holiday"}},"type":"object","required":["is_holiday"],"title":"CheckHolidayResponse","description":"Resultado da verificacao de feriado (GET /calendar/holidays/check)."},"ClassifyRequest":{"properties":{"dataset":{"type":"string","title":"Dataset","description":"Nome do dataset a classificar"}},"type":"object","required":["dataset"],"title":"ClassifyRequest","description":"Request para classificacao BI de colunas via REST.\n\nAttributes:\n    dataset: Nome do dataset (tabela) a classificar."},"ClassifyResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"total_columns":{"type":"integer","title":"Total Columns"},"dimensions":{"type":"integer","title":"Dimensions"},"measures":{"type":"integer","title":"Measures"},"classifications":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Classifications"}},"type":"object","required":["dataset","total_columns","dimensions","measures"],"title":"ClassifyResponse","description":"Response da classificacao BI de colunas.\n\nAttributes:\n    dataset: Nome do dataset classificado.\n    total_columns: Total de colunas analisadas.\n    dimensions: Quantidade de dimensoes.\n    measures: Quantidade de medidas.\n    classifications: Lista de classificacoes por coluna."},"ColumnDiffResponse":{"properties":{"column":{"type":"string","title":"Column"},"change_type":{"type":"string","title":"Change Type"},"old_value":{"title":"Old Value","type":"string","nullable":true},"new_value":{"title":"New Value","type":"string","nullable":true}},"type":"object","required":["column","change_type"],"title":"ColumnDiffResponse","description":"Mudanca em coluna detectada no diff.\n\nAttributes:\n    column: Nome da coluna.\n    change_type: Tipo da mudanca (type_changed).\n    old_value: Valor anterior (tipo antigo).\n    new_value: Valor novo (tipo novo)."},"ColumnInfoResponse":{"properties":{"name":{"type":"string","title":"Name"},"data_type":{"type":"string","title":"Data Type"},"nullable":{"type":"boolean","title":"Nullable","default":true}},"type":"object","required":["name","data_type"],"title":"ColumnInfoResponse","description":"Informacao de coluna de dataset."},"ColumnsResultResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"schema_name":{"type":"string","title":"Schema Name"},"object_name":{"type":"string","title":"Object Name"},"columns":{"items":{"$ref":"#/components/schemas/CatalogColumnResponse"},"type":"array","title":"Columns"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["source_id","schema_name","object_name","columns","total"],"title":"ColumnsResultResponse","description":"Response para GET /catalog/objects/{source_id}/{schema}/{name}/columns."},"CompareRequest":{"properties":{"source":{"type":"string","title":"Source","description":"Dataset de origem (tabela ou view)"},"target":{"type":"string","title":"Target","description":"Dataset de destino (tabela ou view)"},"key_columns":{"title":"Key Columns","description":"Colunas-chave para comparacao","items":{"type":"string"},"type":"array","nullable":true},"compare_schema":{"type":"boolean","title":"Compare Schema","description":"Se deve comparar schemas","default":true}},"type":"object","required":["source","target"],"title":"CompareRequest","description":"Request para comparacao de datasets via REST.\n\nAttributes:\n    source: Dataset de origem (tabela ou view).\n    target: Dataset de destino (tabela ou view).\n    key_columns: Colunas-chave para comparacao. None = todas.\n    compare_schema: Se deve comparar schemas alem dos dados."},"CompareResponse":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"schema_match":{"type":"boolean","title":"Schema Match"},"data_match":{"type":"boolean","title":"Data Match"},"differences":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Differences"}},"type":"object","required":["source","target","schema_match","data_match"],"title":"CompareResponse","description":"Response da comparacao de datasets.\n\nAttributes:\n    source: Dataset de origem comparado.\n    target: Dataset de destino comparado.\n    schema_match: Se schemas sao identicos.\n    data_match: Se dados sao identicos.\n    differences: Lista de diferencas encontradas."},"CompareVersionsRequest":{"properties":{"old_code":{"type":"string","minLength":1,"title":"Old Code","description":"Codigo da versao antiga"},"new_code":{"type":"string","minLength":1,"title":"New Code","description":"Codigo da versao nova"},"old_path":{"type":"string","title":"Old Path","description":"Rotulo da versao antiga","default":"old.py"},"new_path":{"type":"string","title":"New Path","description":"Rotulo da versao nova","default":"new.py"}},"type":"object","required":["old_code","new_code"],"title":"CompareVersionsRequest","description":"Body de POST /code/diff."},"CompareVersionsResponse":{"properties":{"left_path":{"type":"string","title":"Left Path"},"right_path":{"type":"string","title":"Right Path"},"imports_added":{"items":{"type":"string"},"type":"array","title":"Imports Added"},"imports_removed":{"items":{"type":"string"},"type":"array","title":"Imports Removed"},"functions_added":{"items":{"type":"string"},"type":"array","title":"Functions Added"},"functions_removed":{"items":{"type":"string"},"type":"array","title":"Functions Removed"},"classes_added":{"items":{"type":"string"},"type":"array","title":"Classes Added"},"classes_removed":{"items":{"type":"string"},"type":"array","title":"Classes Removed"},"security_issues_introduced":{"items":{"$ref":"#/components/schemas/SecurityIssueModel"},"type":"array","title":"Security Issues Introduced"},"summary":{"type":"string","title":"Summary"}},"type":"object","required":["left_path","right_path","imports_added","imports_removed","functions_added","functions_removed","classes_added","classes_removed","security_issues_introduced","summary"],"title":"CompareVersionsResponse","description":"Response de POST /code/diff."},"ComparisonSpecRequest":{"properties":{"column":{"type":"string","title":"Column","default":""},"column_left":{"type":"string","title":"Column Left","default":""},"column_right":{"type":"string","title":"Column Right","default":""},"comparison_type":{"type":"string","title":"Comparison Type","default":"exact_match"},"thresholds":{"items":{"type":"number"},"type":"array","title":"Thresholds","default":[]},"term_frequency":{"type":"boolean","title":"Term Frequency","default":false}},"type":"object","title":"ComparisonSpecRequest","description":"Espelho REST de ComparisonSpecDTO (fronteira do gateway)."},"ComponentSpec":{"properties":{"component_type":{"type":"string","minLength":1,"title":"Component Type","description":"Tipo do componente"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Config do componente"}},"type":"object","required":["component_type"],"title":"ComponentSpec","description":"Especificacao de componente para composicao de report.\n\nAttributes:\n    component_type: Tipo do componente (table, chart, summary, etc.).\n    config: Configuracao especifica do componente."},"ConfirmEmailChangeRequest":{"properties":{"token":{"type":"string","minLength":1,"title":"Token","description":"Token de confirmacao recebido por e-mail"}},"type":"object","required":["token"],"title":"ConfirmEmailChangeRequest","description":"Request para confirmar a troca de e-mail com o token recebido."},"ConnectionTestResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"latency_ms":{"type":"number","title":"Latency Ms","default":0.0},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["success"],"title":"ConnectionTestResponse","description":"Response de teste de conectividade.\n\nAttributes:\n    success: True se conexao bem-sucedida.\n    latency_ms: Latencia medida em milissegundos.\n    message: Detalhe do resultado."},"ContractChange":{"properties":{"type":{"$ref":"#/components/schemas/ContractChangeType"},"column_name":{"title":"Column Name","type":"string","nullable":true},"is_breaking":{"type":"boolean","title":"Is Breaking"},"description":{"type":"string","title":"Description"}},"additionalProperties":false,"type":"object","required":["type","is_breaking","description"],"title":"ContractChange","description":"Mudanca individual entre versoes de contrato.\n\nArgs:\n    type: Tipo da mudanca.\n    column_name: Nome da coluna afetada (None para mudancas de nao-coluna).\n    is_breaking: True se a mudanca quebra compatibilidade.\n    description: Descricao legivel da mudanca."},"ContractChangeType":{"type":"string","enum":["column_added","column_removed","column_type_changed","column_nullability_tightened","column_nullability_relaxed","column_classification_changed","expectation_added","expectation_removed","expectation_tightened","evolution_policy_changed"],"title":"ContractChangeType","description":"Tipo de mudanca entre versoes de contrato."},"ContractColumn":{"properties":{"name":{"type":"string","minLength":1,"title":"Name","description":"Nome da coluna."},"type":{"type":"string","minLength":1,"title":"Type","description":"Tipo SQL da coluna."},"nullable":{"type":"boolean","title":"Nullable","description":"Se a coluna aceita NULL."},"unique":{"type":"boolean","title":"Unique","description":"Se a coluna tem restricao UNIQUE.","default":false},"classification":{"$ref":"#/components/schemas/FieldClass","description":"Classificacao de privacy da coluna (FieldClass)."},"constraints":{"additionalProperties":true,"type":"object","title":"Constraints","description":"Constraints adicionais (ex: default, check_expr)."},"description":{"title":"Description","description":"Descricao opcional da coluna.","type":"string","nullable":true}},"additionalProperties":false,"type":"object","required":["name","type","nullable","classification"],"title":"ContractColumn","description":"Descreve uma coluna de um DataContract.\n\nArgs:\n    name: Nome da coluna.\n    type: Tipo SQL da coluna (ex: VARCHAR, INTEGER, TIMESTAMPTZ).\n    nullable: True se a coluna aceita NULL.\n    unique: True se a coluna tem restricao UNIQUE.\n    classification: Classificacao de privacy (FieldClass).\n    constraints: Constraints adicionais (ex: default, check).\n    description: Descricao opcional da coluna."},"ContractDiff":{"properties":{"prior_version":{"$ref":"#/components/schemas/SemVer"},"next_version":{"$ref":"#/components/schemas/SemVer"},"changes":{"items":{"$ref":"#/components/schemas/ContractChange"},"type":"array","title":"Changes"}},"additionalProperties":false,"type":"object","required":["prior_version","next_version","changes"],"title":"ContractDiff","description":"Resultado de diff deterministico entre duas versoes de DataContract.\n\nArgs:\n    prior_version: Versao anterior (SemVer).\n    next_version: Versao nova (SemVer).\n    changes: Tuple imutavel de mudancas individuais."},"ContractExpectation":{"properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","title":"Id","description":"Identificador unico da expectation (snake_case)."},"type":{"type":"string","enum":["row_count","freshness","uniqueness","completeness","custom_sql"],"title":"Type","description":"Tipo da expectation."},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"Parametros especificos do tipo (ex: min, max, max_age_hours, min_pct, column)."}},"additionalProperties":false,"type":"object","required":["id","type"],"title":"ContractExpectation","description":"Regra de qualidade associada a um DataContract.\n\nArgs:\n    id: Identificador unico da expectation (snake_case).\n    type: Tipo da expectation.\n    params: Parametros especificos do tipo."},"ContractValidationResponse":{"properties":{"contract_name":{"type":"string","title":"Contract Name"},"contract_version":{"type":"string","title":"Contract Version"},"target_table":{"type":"string","title":"Target Table"},"valid":{"type":"boolean","title":"Valid"},"schema_errors":{"items":{"$ref":"#/components/schemas/SchemaErrorResponse"},"type":"array","title":"Schema Errors","default":[]},"expectation_results":{"items":{"$ref":"#/components/schemas/ExpectationResultResponse"},"type":"array","title":"Expectation Results","default":[]}},"type":"object","required":["contract_name","contract_version","target_table","valid"],"title":"ContractValidationResponse","description":"Response canonica de validacao de tabela contra contrato registrado."},"CopyFileRequest":{"properties":{"src_path":{"type":"string","minLength":1,"title":"Src Path","description":"Caminho de origem"},"dst_path":{"type":"string","minLength":1,"title":"Dst Path","description":"Caminho de destino"}},"type":"object","required":["src_path","dst_path"],"title":"CopyFileRequest","description":"Request para copiar arquivo entre paths no provider default.\n\nAttributes:\n    src_path: Caminho de origem no storage.\n    dst_path: Caminho de destino no storage."},"CostAggregateResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"window_start":{"type":"string","format":"date-time","title":"Window Start"},"window_end":{"type":"string","format":"date-time","title":"Window End"},"total_cpu_seconds":{"type":"number","title":"Total Cpu Seconds"},"total_wall_clock_seconds":{"type":"number","title":"Total Wall Clock Seconds"},"total_llm_tokens_in":{"type":"integer","title":"Total Llm Tokens In"},"total_llm_tokens_out":{"type":"integer","title":"Total Llm Tokens Out"},"total_bytes_read":{"type":"integer","title":"Total Bytes Read"},"total_bytes_written":{"type":"integer","title":"Total Bytes Written"},"total_money_cents_est":{"title":"Total Money Cents Est","type":"integer","nullable":true},"by_pipeline":{"additionalProperties":{"$ref":"#/components/schemas/CostAggregateResponse"},"type":"object","title":"By Pipeline"}},"type":"object","required":["tenant_id","window_start","window_end","total_cpu_seconds","total_wall_clock_seconds","total_llm_tokens_in","total_llm_tokens_out","total_bytes_read","total_bytes_written","total_money_cents_est","by_pipeline"],"title":"CostAggregateResponse","description":"Response para GET /cost/aggregate."},"CreateCapabilityDenyBody":{"properties":{"subject_type":{"type":"string","enum":["user","group"],"title":"Subject Type","description":"Tipo do subject negado: pessoa ou grupo"},"subject_id":{"type":"string","minLength":1,"title":"Subject Id","description":"Identificador do subject negado"},"permission":{"type":"string","minLength":1,"title":"Permission","description":"Permission plural negada (ex: analytics:read)"},"reason":{"title":"Reason","description":"Justificativa (audit context)","type":"string","nullable":true},"expires_at":{"title":"Expires At","description":"Expiracao (UTC) ou None para permanente","type":"string","format":"date-time","nullable":true}},"type":"object","required":["subject_type","subject_id","permission"],"title":"CreateCapabilityDenyBody","description":"Body para criar uma negacao por capability."},"CreateChannelRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Nome unico do canal por tenant"},"kind":{"type":"string","title":"Kind","description":"smtp, webhook, teams_webhook"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Config nao-sensivel"},"secrets_ref":{"title":"Secrets Ref","description":"Referencia a secret (env:VAR_NAME)","type":"string","nullable":true},"active":{"type":"boolean","title":"Active","description":"Canal ativo ao criar","default":true}},"type":"object","required":["name","kind"],"title":"CreateChannelRequest","description":"Request para cadastrar canal de notificacao."},"CreateDashboardRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"type":"string","title":"Description","default":""},"layout":{"$ref":"#/components/schemas/DashboardLayoutSpec"}},"type":"object","required":["name"],"title":"CreateDashboardRequest","description":"Request para criar dashboard.\n\nArgs:\n    name: Nome do dashboard.\n    description: Descricao.\n    layout: Layout com widgets."},"CreateGeofenceRequest":{"properties":{"name":{"type":"string","title":"Name"},"geometry_wkt":{"type":"string","title":"Geometry Wkt"},"fence_type":{"$ref":"#/components/schemas/GeofenceType"},"resolution":{"type":"integer","title":"Resolution"},"metadata":{"title":"Metadata","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["name","geometry_wkt","fence_type","resolution"],"title":"CreateGeofenceRequest","description":"Request para POST /geo/geofences (cria/atualiza geofence com celulas H3)."},"CreateGeofenceResponse":{"properties":{"id":{"type":"string","title":"Id"}},"type":"object","required":["id"],"title":"CreateGeofenceResponse","description":"Response para POST /geo/geofences (ID gerado/atualizado)."},"CreateGrantBody":{"properties":{"resource_type":{"type":"string","minLength":1,"title":"Resource Type","description":"Tipo do recurso"},"resource_id":{"type":"string","minLength":1,"title":"Resource Id","description":"Identificador do recurso"},"subject_type":{"type":"string","title":"Subject Type","description":"'user' | 'group' | 'service_account'","default":"user"},"subject_id":{"type":"string","minLength":1,"title":"Subject Id","description":"Identificador do subject"},"access_level":{"type":"string","minLength":1,"title":"Access Level","description":"'viewer'|'commenter'|'editor'|'admin'"},"reason":{"title":"Reason","description":"Justificativa (audit context)","type":"string","nullable":true},"expires_at":{"title":"Expires At","description":"Expiracao (UTC) ou None","type":"string","format":"date-time","nullable":true}},"type":"object","required":["resource_type","resource_id","subject_id","access_level"],"title":"CreateGrantBody","description":"Body para criar um grant per-recurso."},"CreateKeyResponse":{"properties":{"key_id":{"type":"string","title":"Key Id"},"name":{"type":"string","title":"Name"},"api_key":{"type":"string","format":"password","title":"Api Key","description":"Chave em plaintext — salvar imediatamente","writeOnly":true},"tenant_id":{"type":"string","title":"Tenant Id"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"expires_at":{"title":"Expires At","type":"string","format":"date-time","nullable":true}},"type":"object","required":["key_id","name","api_key","tenant_id","permissions"],"title":"CreateKeyResponse","description":"Resposta de criacao de API key.\n\nPlaintext exposto via JSON HTTP uma unica vez; repr/log mascaram."},"CreateMaintenanceWindowRequest":{"properties":{"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"scope":{"$ref":"#/components/schemas/MaintenanceScope"},"scope_value":{"title":"Scope Value","type":"string","nullable":true},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["starts_at","ends_at","scope","reason"],"title":"CreateMaintenanceWindowRequest","description":"Request para POST /alerting/maintenance."},"CreateRoleBody":{"properties":{"name":{"type":"string","minLength":1,"title":"Name","description":"Nome da role custom (nao built-in)"},"description":{"type":"string","title":"Description","description":"Descricao legivel","default":""},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Permissions (catalogo)"},"requires_mfa":{"type":"boolean","title":"Requires Mfa","description":"Exige MFA ativo no login","default":false}},"type":"object","required":["name"],"title":"CreateRoleBody","description":"Body para criar uma role customizada."},"CreateScheduleRequest":{"properties":{"pipeline_id":{"type":"string","title":"Pipeline Id","description":"ID ou nome do pipeline a agendar","examples":["etl-vendas-diario"]},"cron_expression":{"type":"string","pattern":"^[0-9A-Za-z*,/\\-]+(\\s+[0-9A-Za-z*,/\\-]+){4}$","title":"Cron Expression","description":"Expressao CRON (5 campos; aceita nomes MON-SUN/JAN-DEC)","examples":["0 6 * * *","*/30 * * * *"]},"enabled":{"type":"boolean","title":"Enabled","description":"Se o schedule inicia ativo","default":true},"config_path":{"title":"Config Path","description":"Path do YAML de configuracao","examples":["configs/etl-vendas.yaml"],"type":"string","nullable":true},"trigger_type":{"type":"string","enum":["cron","interval","date"],"title":"Trigger Type","description":"Tipo de trigger.","default":"cron"},"interval_seconds":{"title":"Interval Seconds","description":"Intervalo em segundos (quando trigger_type=interval).","type":"integer","minimum":1.0,"nullable":true},"run_at":{"title":"Run At","description":"Data/hora de execucao unica (quando trigger_type=date).","type":"string","format":"date-time","nullable":true},"retry_max_attempts":{"title":"Retry Max Attempts","description":"Maximo de tentativas em caso de falha.","type":"integer","minimum":1.0,"nullable":true},"retry_backoff_seconds":{"title":"Retry Backoff Seconds","description":"Tempo base de espera entre retentativas.","type":"integer","minimum":1.0,"nullable":true},"retry_exponential":{"type":"boolean","title":"Retry Exponential","description":"Se backoff cresce exponencialmente.","default":false}},"type":"object","required":["pipeline_id","cron_expression"],"title":"CreateScheduleRequest","description":"Request para criacao de schedule."},"CreateSnapshotRequest":{"properties":{"template_id":{"type":"string","title":"Template Id","description":"Identificador lógico do report congelado"},"components":{"items":{"$ref":"#/components/schemas/ComponentSpec"},"type":"array","minItems":1,"title":"Components","description":"Componentes do report (mesmo contrato de /reports/generate)"},"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title","description":"Título","default":"Report"},"format":{"type":"string","enum":["pdf","excel","html"],"title":"Format","default":"pdf"}},"type":"object","required":["template_id","components"],"title":"CreateSnapshotRequest","description":"Payload HTTP para congelar um report em snapshot."},"CreateStorageConnectionRequest":{"properties":{"storage_type":{"type":"string","title":"Storage Type","description":"s3, azure, gcs ou local"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Configuracao especifica do tipo"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"}},"type":"object","required":["storage_type","config","name"],"title":"CreateStorageConnectionRequest","description":"Request para registrar nova conexao de storage.\n\nAttributes:\n    name: Nome unico da conexao (alphanumerico, hifen e underscore)."},"CreateSubscriptionRequest":{"properties":{"channel_id":{"type":"string","title":"Channel Id"},"target_kind":{"type":"string","title":"Target Kind","description":"pipeline, schedule, watchdog, wildcard"},"target_id":{"type":"string","title":"Target Id"},"severity_min":{"type":"string","title":"Severity Min","default":"INFO"},"notify_on":{"type":"string","title":"Notify On","default":"FAILURE"},"active":{"type":"boolean","title":"Active","default":true}},"type":"object","required":["channel_id","target_kind","target_id"],"title":"CreateSubscriptionRequest","description":"Request para criar subscription canal->target."},"DLQMutationResponse":{"properties":{"status":{"type":"string","title":"Status"},"entry_id":{"type":"string","title":"Entry Id"},"new_status":{"type":"string","title":"New Status"}},"type":"object","required":["status","entry_id","new_status"],"title":"DLQMutationResponse","description":"Response para POST /watchdog/dlq/{entry_id}/retry e .../archive.\n\nO identificador vem do path parameter; nao ha body DTO dedicado."},"DLQStatusResponse":{"properties":{"total_entries":{"type":"integer","title":"Total Entries"},"pending_retry":{"type":"integer","title":"Pending Retry"},"retries_exhausted":{"type":"integer","title":"Retries Exhausted"},"archived":{"type":"integer","title":"Archived"},"entries":{"items":{"$ref":"#/components/schemas/WatchdogDLQEntryResponse"},"type":"array","title":"Entries"}},"type":"object","required":["total_entries","pending_retry","retries_exhausted","archived","entries"],"title":"DLQStatusResponse","description":"Response para GET /watchdog/dlq."},"DashboardExportResponse":{"properties":{"format":{"type":"string","title":"Format"},"format_version":{"type":"string","title":"Format Version"},"exported_at":{"type":"string","title":"Exported At"},"source_dashboard_id":{"type":"string","title":"Source Dashboard Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"layout":{"$ref":"#/components/schemas/DashboardLayoutSpec"},"is_template":{"type":"boolean","title":"Is Template"}},"type":"object","required":["format","format_version","exported_at","source_dashboard_id","name","description","layout","is_template"],"title":"DashboardExportResponse","description":"Documento portavel de um dashboard (corpo do GET de export).\n\nArgs:\n    format: Identificador do formato do documento.\n    format_version: Versao do formato.\n    exported_at: Instante da exportacao em ISO 8601 UTC.\n    source_dashboard_id: Id do dashboard de origem.\n    name: Nome do dashboard.\n    description: Descricao do dashboard.\n    layout: Layout com widgets, como persistido.\n    is_template: True quando o dashboard e um template."},"DashboardLayoutSpec":{"properties":{"widgets":{"items":{"$ref":"#/components/schemas/WidgetSpec"},"type":"array","title":"Widgets"},"columns":{"type":"integer","maximum":24.0,"minimum":1.0,"title":"Columns","default":12},"row_height":{"type":"integer","maximum":300.0,"minimum":30.0,"title":"Row Height","default":80}},"type":"object","title":"DashboardLayoutSpec","description":"Layout completo de dashboard com widgets.\n\nArgs:\n    widgets: Lista de widgets com posicoes.\n    columns: Numero de colunas do grid.\n    row_height: Altura de cada linha em px."},"DashboardListResponse":{"properties":{"dashboards":{"items":{"$ref":"#/components/schemas/DashboardResponse"},"type":"array","title":"Dashboards"},"total_count":{"type":"integer","title":"Total Count","default":0}},"type":"object","title":"DashboardListResponse","description":"Response de listagem de dashboards.\n\nArgs:\n    dashboards: Lista de dashboards.\n    total_count: Total."},"DashboardOverview":{"properties":{"jobs":{"$ref":"#/components/schemas/JobSummary"},"schedules":{"$ref":"#/components/schemas/ScheduleSummary"},"alerts":{"$ref":"#/components/schemas/AlertSummary"},"system":{"$ref":"#/components/schemas/SystemHealth"},"tenant_id":{"type":"string","title":"Tenant Id"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["jobs","schedules","alerts","system","tenant_id","generated_at"],"title":"DashboardOverview","description":"Visao geral do dashboard operacional.\n\nArgs:\n    jobs: Sumario de jobs.\n    schedules: Sumario de schedules.\n    alerts: Sumario de alertas.\n    system: Saude do sistema.\n    tenant_id: Tenant atual.\n    generated_at: Timestamp de geracao."},"DashboardResponse":{"properties":{"dashboard_id":{"type":"string","title":"Dashboard Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"layout":{"$ref":"#/components/schemas/DashboardLayoutSpec"},"is_template":{"type":"boolean","title":"Is Template","default":false},"created_at":{"title":"Created At","type":"string","format":"date-time","nullable":true},"updated_at":{"title":"Updated At","type":"string","format":"date-time","nullable":true}},"type":"object","required":["dashboard_id","name"],"title":"DashboardResponse","description":"Response de dashboard completo.\n\nArgs:\n    dashboard_id: ID unico.\n    name: Nome.\n    description: Descricao.\n    layout: Layout com widgets.\n    is_template: True se template.\n    created_at: Data de criacao.\n    updated_at: Data de atualizacao."},"DataContract":{"properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_.-]*$","title":"Name","description":"Nome do contrato (slug DNS-like)."},"version":{"$ref":"#/components/schemas/SemVer","description":"Versao semantica do contrato."},"asset_key":{"$ref":"#/components/schemas/AssetKey","description":"Identificador canonico do asset."},"owner":{"type":"string","minLength":1,"title":"Owner","description":"Proprietario do contrato."},"description":{"title":"Description","description":"Descricao opcional.","type":"string","nullable":true},"schema_columns":{"items":{"$ref":"#/components/schemas/ContractColumn"},"type":"array","title":"Schema Columns","description":"Colunas definidas pelo contrato.","default":[]},"expectations":{"items":{"$ref":"#/components/schemas/ContractExpectation"},"type":"array","title":"Expectations","description":"Regras de qualidade associadas.","default":[]},"evolution_policy":{"type":"string","enum":["strict","tolerant"],"title":"Evolution Policy","description":"'strict' = breaking falha; 'tolerant' = breaking gera aviso.","default":"strict"},"consumers":{"items":{"type":"string"},"type":"array","title":"Consumers","description":"Nomes de pipelines que consomem este contrato.","default":[]}},"additionalProperties":false,"type":"object","required":["name","version","asset_key","owner"],"title":"DataContract","description":"Contrato formal de dados — fonte unica de verdade de schema + expectations.\n\nImutavel (frozen=True). Toda modificacao cria nova versao com SemVer superior.\n\nArgs:\n    name: Nome do contrato (slug DNS-like).\n    version: Versao semantica do contrato (SemVer).\n    asset_key: Identificador canonico do asset (AssetKey).\n    owner: Proprietario do contrato (pipeline ou equipe).\n    description: Descricao opcional.\n    schema_columns: Colunas definidas pelo contrato.\n    expectations: Regras de qualidade associadas.\n    evolution_policy: 'strict' (breaking = falha) ou 'tolerant' (breaking = aviso).\n    consumers: Nomes de pipelines que consomem este contrato."},"DataContractRefDTO":{"properties":{"contract_name":{"type":"string","title":"Contract Name"},"contract_version":{"type":"string","title":"Contract Version"},"evolution_policy":{"type":"string","title":"Evolution Policy"}},"type":"object","required":["contract_name","contract_version","evolution_policy"],"title":"DataContractRefDTO","description":"Ref de contrato associada a um catalog object (enrich API)."},"DatasetFreshnessModel":{"properties":{"page_id":{"type":"string","title":"Page Id"},"signal":{"type":"string","title":"Signal"},"responded":{"type":"boolean","title":"Responded"},"file_age_seconds":{"title":"File Age Seconds","type":"number","nullable":true},"data_delay_seconds":{"title":"Data Delay Seconds","type":"number","nullable":true},"byte_size":{"title":"Byte Size","type":"integer","nullable":true},"generation":{"title":"Generation","type":"string","nullable":true},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","required":["page_id","signal","responded"],"title":"DatasetFreshnessModel","description":"Frescor de um dataset servido (semaforo + metricas)."},"DatasetFreshnessResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"is_fresh":{"type":"boolean","title":"Is Fresh"},"sla_status":{"type":"string","title":"Sla Status"},"age_hours":{"type":"number","title":"Age Hours"},"max_timestamp":{"title":"Max Timestamp","type":"string","nullable":true},"max_age_hours":{"type":"number","title":"Max Age Hours"},"row_count":{"type":"integer","title":"Row Count"}},"type":"object","required":["dataset","is_fresh","sla_status","age_hours","max_age_hours","row_count"],"title":"DatasetFreshnessResponse","description":"Response da verificacao de freshness.\n\nAttributes:\n    dataset: Nome do dataset verificado.\n    is_fresh: Se dados estao dentro do SLA.\n    sla_status: OK, WARNING ou CRITICAL.\n    age_hours: Idade dos dados em horas.\n    max_timestamp: Timestamp mais recente encontrado (ISO 8601).\n    max_age_hours: SLA configurado em horas.\n    row_count: Total de registros."},"DatasetInfoResponse":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"format":{"type":"string","title":"Format"},"file_count":{"type":"integer","title":"File Count"},"total_size_bytes":{"type":"integer","title":"Total Size Bytes"},"partitioned":{"type":"boolean","title":"Partitioned","default":false}},"type":"object","required":["path","name","format","file_count","total_size_bytes"],"title":"DatasetInfoResponse","description":"Dataset descoberto em storage."},"DbtValidationRequest":{"properties":{"config_path":{"type":"string","format":"path","title":"Config Path"},"data_path":{"title":"Data Path","type":"string","format":"path","nullable":true},"model_filter":{"title":"Model Filter","type":"string","nullable":true}},"type":"object","required":["config_path"],"title":"DbtValidationRequest","description":"Request canonico para validacao dbt-style."},"DbtValidationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"mode":{"type":"string","title":"Mode"},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"total":{"type":"integer","title":"Total"},"error":{"title":"Error","type":"string","nullable":true}},"type":"object","required":["success","mode","passed","failed","total"],"title":"DbtValidationResponse","description":"Response canonica de validacao dbt-style."},"DedupeRequestDTO":{"properties":{"table_name":{"type":"string","title":"Table Name"},"unique_id_column":{"type":"string","title":"Unique Id Column","default":"unique_id"},"comparisons":{"items":{"$ref":"#/components/schemas/ComparisonSpecRequest"},"type":"array","title":"Comparisons","default":[]},"blocking_rules":{"items":{"$ref":"#/components/schemas/BlockingRuleSpecRequest"},"type":"array","title":"Blocking Rules","default":[]},"blocking_rules_training":{"items":{"$ref":"#/components/schemas/BlockingRuleSpecRequest"},"type":"array","title":"Blocking Rules Training","default":[]},"match_threshold":{"type":"number","title":"Match Threshold","default":0.95},"model_path":{"title":"Model Path","type":"string","nullable":true},"generate_reports":{"type":"boolean","title":"Generate Reports","default":false},"reports_output_dir":{"type":"string","title":"Reports Output Dir","default":"linkage_reports"}},"type":"object","required":["table_name"],"title":"DedupeRequestDTO","description":"Request canonico para deduplicacao de registros."},"DedupeResponseDTO":{"properties":{"total_records":{"type":"integer","title":"Total Records"},"total_pairs_compared":{"type":"integer","title":"Total Pairs Compared"},"matches_found":{"type":"integer","title":"Matches Found"},"clusters_formed":{"type":"integer","title":"Clusters Formed"},"duplicate_rate":{"type":"number","title":"Duplicate Rate"},"model_path":{"title":"Model Path","type":"string","nullable":true},"reports":{"additionalProperties":{"type":"string"},"type":"object","title":"Reports","default":{}},"output_table":{"type":"string","title":"Output Table","default":""},"linker_id":{"title":"Linker Id","type":"string","nullable":true},"graph_metrics_table":{"type":"string","title":"Graph Metrics Table","default":""}},"type":"object","required":["total_records","total_pairs_compared","matches_found","clusters_formed","duplicate_rate"],"title":"DedupeResponseDTO","description":"Response canonica de deduplicacao de registros."},"DefinitionItem":{"properties":{"name":{"type":"string","title":"Name"},"version":{"type":"string","title":"Version"},"description":{"type":"string","title":"Description","default":""},"checksum":{"type":"string","title":"Checksum","default":""},"author":{"type":"string","title":"Author","default":""},"published_at":{"type":"string","title":"Published At","default":""}},"type":"object","required":["name","version"],"title":"DefinitionItem","description":"Item da listagem de definicoes registradas.\n\nAttributes:\n    name: Nome da definicao.\n    version: Versao publicada.\n    description: Descricao declarada na publicacao.\n    checksum: SHA-256 do bundle.\n    author: Principal que publicou.\n    published_at: Instante de publicacao em ISO-8601."},"DeleteFileRequest":{"properties":{"file_path":{"type":"string","minLength":1,"title":"File Path","description":"Caminho do arquivo"}},"type":"object","required":["file_path"],"title":"DeleteFileRequest","description":"Request para deletar arquivo de storage.\n\nAttributes:\n    file_path: Caminho do arquivo a deletar."},"DeleteGeofenceResponse":{"properties":{"deleted":{"type":"boolean","title":"Deleted"}},"type":"object","required":["deleted"],"title":"DeleteGeofenceResponse","description":"Response para DELETE /geo/geofences/{name} (removida vs inexistente)."},"DeleteResponse":{"properties":{"deleted":{"type":"boolean","title":"Deleted"}},"type":"object","required":["deleted"],"title":"DeleteResponse","description":"Response generico de operacao de delete."},"DeleteSavedQueryResponse":{"properties":{"query_id":{"type":"string","title":"Query Id"},"status":{"type":"string","title":"Status","default":"deleted"}},"type":"object","required":["query_id"],"title":"DeleteSavedQueryResponse","description":"Response da remocao de query salva (DELETE /queries/saved/{query_id})."},"DeleteSchemaResponse":{"properties":{"deleted":{"type":"boolean","title":"Deleted"},"name":{"type":"string","title":"Name"},"message":{"type":"string","title":"Message"}},"type":"object","required":["deleted","name","message"],"title":"DeleteSchemaResponse","description":"Response apos remocao de schema.\n\nAttributes:\n    deleted: True se schema foi removido.\n    name: Nome do schema removido.\n    message: Mensagem descritiva."},"DescribeDatasetRequest":{"properties":{"dataset_path":{"type":"string","minLength":1,"title":"Dataset Path","description":"Path do dataset"},"connection_name":{"title":"Connection Name","description":"Nome da conexao (None = default)","type":"string","nullable":true},"sample_size":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Sample Size","description":"Linhas para amostragem","default":1000}},"type":"object","required":["dataset_path"],"title":"DescribeDatasetRequest","description":"Request para introspeccao de schema de dataset."},"DescribeDatasetResponse":{"properties":{"columns":{"items":{"$ref":"#/components/schemas/ColumnInfoResponse"},"type":"array","title":"Columns"},"row_count_estimate":{"title":"Row Count Estimate","type":"integer","nullable":true},"dataset_path":{"type":"string","title":"Dataset Path","default":""},"connection_name":{"type":"string","title":"Connection Name","default":""}},"type":"object","title":"DescribeDatasetResponse","description":"Response de introspeccao de schema de dataset."},"DescriptorResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"dimensions":{"items":{"$ref":"#/components/schemas/DimensionDescriptorModel"},"type":"array","title":"Dimensions"},"measures":{"items":{"$ref":"#/components/schemas/MeasureDescriptorModel"},"type":"array","title":"Measures"},"date_column":{"title":"Date Column","type":"string","nullable":true},"can_export":{"type":"boolean","title":"Can Export","default":false},"panels":{"items":{"$ref":"#/components/schemas/PanelDescriptorModel"},"type":"array","title":"Panels"}},"type":"object","required":["page_id"],"title":"DescriptorResponse","description":"Resposta do GET /report-serving/{page}/descriptor."},"DetailTableRequest":{"properties":{"filters":{"items":{"$ref":"#/components/schemas/FilterModel"},"type":"array","title":"Filters"},"limit":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Limit","default":500}},"type":"object","title":"DetailTableRequest","description":"Corpo do POST /report-serving/{page}/table."},"DetailTableResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"rows":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Rows"},"row_count":{"type":"integer","title":"Row Count","default":0},"truncated":{"type":"boolean","title":"Truncated","default":false}},"type":"object","required":["page_id"],"title":"DetailTableResponse","description":"Resposta do endpoint de tabela de detalhe."},"DiffResultResponse":{"properties":{"changes":{"items":{"$ref":"#/components/schemas/CatalogChangeResponse"},"type":"array","title":"Changes"},"total_changes":{"type":"integer","title":"Total Changes"}},"type":"object","required":["changes","total_changes"],"title":"DiffResultResponse","description":"Response para GET /catalog/diff."},"DimensionDescriptorModel":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"column":{"type":"string","title":"Column"}},"type":"object","required":["key","label","column"],"title":"DimensionDescriptorModel","description":"Dimensao filtravel exposta no descriptor (key = contrato de filtro)."},"DistinctRequest":{"properties":{"filters":{"items":{"$ref":"#/components/schemas/FilterModel"},"type":"array","title":"Filters"},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","default":1000}},"type":"object","title":"DistinctRequest","description":"Corpo do POST /report-serving/{page}/slicer/{dim} (cross-filter via body)."},"DistinctResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"dimension":{"type":"string","title":"Dimension"},"values":{"items":{"type":"string"},"type":"array","title":"Values"}},"type":"object","required":["page_id","dimension"],"title":"DistinctResponse","description":"Resposta do POST /report-serving/{page}/slicer/{dim}."},"DryRunRequest":{"properties":{"config_path":{"title":"Config Path","description":"Referencia do YAML dentro do root governado pelo servidor; aceita apenas com co-location declarada. Prefira pipeline_yaml.","type":"string","minLength":1,"nullable":true},"pipeline_yaml":{"title":"Pipeline Yaml","description":"Conteudo do YAML enviado pelo cliente. Funciona em qualquer topologia. Sem diretorio de origem no servidor a validacao cross-file (existencia de query_file/script_file e descida em sub-workflows) NAO roda; em /validate o que ficou de fora vem declarado em skipped_checks. Para cobertura COMPLETA por API, valide em /validate por definition_name (definicao ja registrada).","type":"string","minLength":1,"nullable":true},"pipeline_name":{"title":"Pipeline Name","type":"string","nullable":true},"verbose":{"type":"boolean","title":"Verbose","default":false},"sample_rows":{"title":"Sample Rows","type":"integer","nullable":true},"var_overrides":{"additionalProperties":{"type":"string"},"type":"object","title":"Var Overrides"}},"type":"object","title":"DryRunRequest","description":"Request para simulacao de pipeline.\n\nExatamente uma origem: referencia (config_path) ou conteudo (pipeline_yaml).\n\nAttributes:\n    config_path: Referencia do YAML dentro do root do servidor.\n    pipeline_yaml: Conteudo do YAML enviado pelo cliente.\n    pipeline_name: Nome do pipeline.\n    verbose: Log detalhado.\n    sample_rows: Linhas de amostra para extracts.\n    var_overrides: Overrides de ${var.*} do YAML (paridade com o run REST)."},"DryRunResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"pipeline_name":{"type":"string","title":"Pipeline Name","default":""},"steps":{"items":{"$ref":"#/components/schemas/DryRunStepInfo"},"type":"array","title":"Steps"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"sources_count":{"type":"integer","title":"Sources Count","default":0},"connections_count":{"type":"integer","title":"Connections Count","default":0}},"type":"object","required":["success"],"title":"DryRunResponse","description":"Response de simulacao de pipeline.\n\nAttributes:\n    success: True se dry run passou sem erros.\n    pipeline_name: Nome do pipeline simulado.\n    steps: Steps que seriam executados.\n    errors: Erros encontrados.\n    warnings: Avisos.\n    sources_count: Fontes de dados identificadas.\n    connections_count: Conexoes identificadas."},"DryRunStepInfo":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type","default":""},"details":{"type":"string","title":"Details","default":""}},"type":"object","required":["name"],"title":"DryRunStepInfo","description":"Info de step no resultado de dry run.\n\nAttributes:\n    name: Nome do step.\n    type: Tipo do step.\n    details: Detalhes adicionais."},"EffectiveSettingsResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"default_timezone":{"type":"string","title":"Default Timezone"},"retention_days":{"type":"integer","title":"Retention Days"},"default_datasource_id":{"title":"Default Datasource Id","type":"string","nullable":true},"default_config_path":{"title":"Default Config Path","type":"string","nullable":true},"features":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Features"}},"type":"object","required":["tenant_id","default_timezone","retention_days"],"title":"EffectiveSettingsResponse","description":"Settings efetivas apos merge da hierarquia workspace <- user <- pipeline."},"EmailChangeAcceptedResponse":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"EmailChangeAcceptedResponse","description":"Resposta de aceitacao de solicitacao de troca de e-mail.\n\nAttributes:\n    status: Status da solicitacao (sempre 'accepted' — anti-enumeration)."},"EnrichWithH3Command":{"properties":{"table_name":{"type":"string","title":"Table Name"},"lat_column":{"type":"string","title":"Lat Column","default":"latitude"},"lng_column":{"type":"string","title":"Lng Column","default":"longitude"},"resolution":{"type":"integer","title":"Resolution","default":11},"output_column":{"type":"string","title":"Output Column","default":"h3_index"},"add_parent_resolutions":{"items":{"type":"integer"},"type":"array","title":"Add Parent Resolutions"}},"type":"object","required":["table_name"],"title":"EnrichWithH3Command","description":"Comando para adicionar coluna H3 a tabela com coordenadas."},"EnrichWithH3Result":{"properties":{"rows_enriched":{"type":"integer","title":"Rows Enriched"},"rows_null_coords":{"type":"integer","title":"Rows Null Coords"},"resolution":{"type":"integer","title":"Resolution"},"output_table":{"type":"string","title":"Output Table"},"parent_columns":{"items":{"type":"string"},"type":"array","title":"Parent Columns"}},"type":"object","required":["rows_enriched","rows_null_coords","resolution","output_table"],"title":"EnrichWithH3Result","description":"Resultado do enriquecimento H3."},"EventDLQEntryResponse":{"properties":{"event_id":{"type":"string","title":"Event Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"source_id":{"type":"string","title":"Source Id"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"last_error_redacted":{"type":"string","title":"Last Error Redacted"},"retry_count":{"type":"integer","title":"Retry Count"},"first_failed_at":{"type":"string","format":"date-time","title":"First Failed At"},"last_attempted_at":{"type":"string","format":"date-time","title":"Last Attempted At"},"status":{"type":"string","title":"Status"}},"type":"object","required":["event_id","tenant_id","source_id","payload","last_error_redacted","retry_count","first_failed_at","last_attempted_at","status"],"title":"EventDLQEntryResponse","description":"Item da Dead Letter Queue (GET /events/dlq)."},"EventSourceResponse":{"properties":{"id":{"type":"string","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"type":{"$ref":"#/components/schemas/EventSourceType"},"enabled":{"type":"boolean","title":"Enabled"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","name","type","enabled","config","created_at"],"title":"EventSourceResponse","description":"Item de EventSource (GET /events/sources, POST /events/sources)."},"EventSourceType":{"type":"string","enum":["file_arrival_local","pipeline_completed","webhook_event"],"title":"EventSourceType","description":"Tipos de sensor suportados (conjunto fechado — exatamente 3 valores).\n\nConjunto fechado por decisao de arquitetura: incluir um tipo novo exige\nrevisao explicita da autoridade de disparo por evento."},"EventSubscriptionResponse":{"properties":{"id":{"type":"string","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"source_id":{"type":"string","title":"Source Id"},"pipeline_id":{"type":"string","title":"Pipeline Id"},"enabled":{"type":"boolean","title":"Enabled"},"dedup_window_seconds":{"type":"integer","title":"Dedup Window Seconds"},"input_mapping":{"additionalProperties":{"type":"string"},"type":"object","title":"Input Mapping"},"max_retries":{"type":"integer","title":"Max Retries"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","source_id","pipeline_id","enabled","dedup_window_seconds","input_mapping","max_retries","created_at"],"title":"EventSubscriptionResponse","description":"Item de EventSubscription (GET/POST /events/subscriptions)."},"ExecuteDashboardResponse":{"properties":{"dashboard_id":{"type":"string","title":"Dashboard Id"},"widgets":{"items":{"$ref":"#/components/schemas/WidgetRenderModel"},"type":"array","title":"Widgets"}},"type":"object","required":["dashboard_id"],"title":"ExecuteDashboardResponse","description":"Response de execucao (render) de dashboard.\n\nArgs:\n    dashboard_id: ID do dashboard renderizado.\n    widgets: Resultado por widget, na ordem do layout."},"ExpectationResultResponse":{"properties":{"expectation_id":{"type":"string","title":"Expectation Id"},"passed":{"type":"boolean","title":"Passed"},"message":{"type":"string","title":"Message"}},"type":"object","required":["expectation_id","passed","message"],"title":"ExpectationResultResponse","description":"Espelho REST de GatewayExpectationResult (fronteira do gateway)."},"ExpectationRuleInput":{"properties":{"name":{"type":"string","title":"Name","description":"Nome descritivo da regra"},"rule_type":{"type":"string","title":"Rule Type","description":"Tipo de regra (not_null, unique, range, pattern, referential_integrity, accepted_values, custom_sql)"},"column":{"title":"Column","description":"Coluna alvo (None para custom_sql)","type":"string","nullable":true},"params":{"title":"Params","description":"Parametros especificos do tipo de regra","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["name","rule_type"],"title":"ExpectationRuleInput","description":"Regra individual de expectation para input REST.\n\nAttributes:\n    name: Nome descritivo da regra.\n    rule_type: Tipo (not_null, unique, range, pattern, referential_integrity, accepted_values, custom_sql).\n    column: Coluna alvo (None para custom_sql).\n    params: Parametros especificos do tipo de regra."},"ExpectationsRequest":{"properties":{"dataset":{"type":"string","title":"Dataset","description":"Nome do dataset a validar"},"rules":{"items":{"$ref":"#/components/schemas/ExpectationRuleInput"},"type":"array","title":"Rules","description":"Lista de regras de expectation"},"persist_results":{"type":"boolean","title":"Persist Results","description":"Se True, persiste resultados em _tdv_expectation_results","default":true}},"type":"object","required":["dataset","rules"],"title":"ExpectationsRequest","description":"Request para execucao de suite de expectations via REST.\n\nAttributes:\n    dataset: Nome do dataset a validar.\n    rules: Lista de regras de expectation.\n    persist_results: Se True, salva resultados em tabela de historico."},"ExpectationsResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"total_rules":{"type":"integer","title":"Total Rules"},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"success_rate":{"type":"number","title":"Success Rate"},"results":{"items":{"$ref":"#/components/schemas/RuleResultResponse"},"type":"array","title":"Results"}},"type":"object","required":["dataset","total_rules","passed","failed","success_rate"],"title":"ExpectationsResponse","description":"Response da suite de expectations.\n\nAttributes:\n    dataset: Nome do dataset validado.\n    total_rules: Total de regras executadas.\n    passed: Numero de regras que passaram.\n    failed: Numero de regras que falharam.\n    success_rate: Percentual de sucesso (0-100).\n    results: Resultado detalhado de cada regra."},"ExploreColumnStatsResponse":{"properties":{"name":{"type":"string","title":"Name"},"dtype":{"type":"string","title":"Dtype"},"null_count":{"type":"integer","title":"Null Count","default":0},"distinct_count":{"type":"integer","title":"Distinct Count","default":0},"min_value":{"title":"Min Value","nullable":true},"max_value":{"title":"Max Value","nullable":true}},"type":"object","required":["name","dtype"],"title":"ExploreColumnStatsResponse","description":"Estatisticas de uma coluna na exploracao.\n\nAttributes:\n    name: Nome da coluna.\n    dtype: Tipo de dado.\n    null_count: Quantidade de nulos.\n    distinct_count: Valores distintos.\n    min_value: Valor minimo.\n    max_value: Valor maximo."},"ExploreRequest":{"properties":{"file_path":{"type":"string","title":"File Path","description":"Referencia do arquivo a explorar dentro do root de dados"},"output_format":{"type":"string","title":"Output Format","description":"Formato de saida (json, console, markdown)","default":"json"},"column":{"title":"Column","description":"Coluna especifica para analise detalhada","type":"string","nullable":true}},"type":"object","required":["file_path"],"title":"ExploreRequest","description":"Request para exploracao de arquivo de dados via REST.\n\n``file_path`` e referencia de LEITURA dentro do root de dados governado pelo\nservidor; o handler a resolve antes de qualquer I/O e substitui o campo do\ncomando. O valor que chega aqui e cru de proposito.\n\nAttributes:\n    file_path: Referencia do arquivo a explorar dentro do root de dados.\n    output_format: Formato de saida (json, console, markdown).\n    column: Coluna especifica para analise detalhada (opcional)."},"ExploreResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"file_name":{"type":"string","title":"File Name","default":""},"columns":{"items":{"$ref":"#/components/schemas/ExploreColumnStatsResponse"},"type":"array","title":"Columns"},"row_count":{"type":"integer","title":"Row Count","default":0},"sap_patterns":{"items":{"type":"string"},"type":"array","title":"Sap Patterns"},"key_candidates":{"items":{"type":"string"},"type":"array","title":"Key Candidates"},"error":{"title":"Error","type":"string","nullable":true}},"type":"object","required":["success"],"title":"ExploreResponse","description":"Response da exploracao de arquivo.\n\nAttributes:\n    success: Se exploracao concluiu com sucesso.\n    file_name: Nome do arquivo explorado.\n    columns: Estatisticas por coluna.\n    row_count: Total de linhas.\n    sap_patterns: Padroes SAP detectados.\n    key_candidates: Candidatos a chave primaria.\n    error: Mensagem de erro se falhou."},"ExploreStorageRequest":{"properties":{"prefix":{"type":"string","title":"Prefix","description":"Prefixo base para busca","default":""},"connection_name":{"title":"Connection Name","description":"Nome da conexao (None = default)","type":"string","nullable":true},"recursive":{"type":"boolean","title":"Recursive","description":"Explorar subdiretorios","default":false},"max_depth":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Max Depth","description":"Profundidade maxima","default":3}},"type":"object","title":"ExploreStorageRequest","description":"Request para autodiscovery de datasets em storage."},"ExploreStorageResponse":{"properties":{"datasets":{"items":{"$ref":"#/components/schemas/DatasetInfoResponse"},"type":"array","title":"Datasets"},"prefix_searched":{"type":"string","title":"Prefix Searched","default":""},"connection_name":{"type":"string","title":"Connection Name","default":""}},"type":"object","title":"ExploreStorageResponse","description":"Response de autodiscovery de datasets."},"ExportCsvRequest":{"properties":{"filters":{"items":{"$ref":"#/components/schemas/FilterModel"},"type":"array","title":"Filters"},"limit":{"type":"integer","maximum":1000000.0,"minimum":1.0,"title":"Limit","default":100000}},"type":"object","title":"ExportCsvRequest","description":"Corpo do POST /report-serving/{page}/export."},"FailuresResponse":{"properties":{"failures":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Failures"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"FailuresResponse","description":"Response com eventos de falha de lineage.\n\nArgs:\n    failures: Lista de eventos de falha.\n    total: Quantidade de falhas retornadas."},"FeedItemResponse":{"properties":{"id":{"type":"string","title":"Id"},"severity":{"type":"string","title":"Severity"},"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"},"source":{"type":"string","title":"Source"},"target_kind":{"title":"Target Kind","type":"string","nullable":true},"target_id":{"title":"Target Id","type":"string","nullable":true},"created_at":{"type":"string","format":"date-time","title":"Created At"},"read":{"type":"boolean","title":"Read"}},"type":"object","required":["id","severity","title","message","source","created_at","read"],"title":"FeedItemResponse","description":"Item do feed de notificacoes com read-state do usuario corrente."},"FeedReadAllResponse":{"properties":{"marked":{"type":"integer","title":"Marked","default":0}},"type":"object","title":"FeedReadAllResponse","description":"Resultado da marcacao em massa de leitura."},"FieldClass":{"type":"integer","enum":[0,1,2,3],"title":"FieldClass","description":"Classificacao de privacy de um campo.\n\nOrdem crescente de sensibilidade. Comparacao numerica >= PII\ndetermina se cifragem at-rest e obrigatoria.\n\nValores:\n    PUBLIC: Dado publico — nenhuma restricao.\n    INTERNAL: Dado interno — restrito a colaboradores autenticados.\n    PII: Informacao pessoal identificavel — cifragem at-rest obrigatoria.\n    SECRET: Segredo — nunca persistido."},"FileEntryResponse":{"properties":{"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"size_bytes":{"type":"integer","title":"Size Bytes"},"last_modified":{"title":"Last Modified","type":"string","format":"date-time","nullable":true},"content_type":{"title":"Content Type","type":"string","nullable":true},"etag":{"title":"Etag","type":"string","nullable":true}},"type":"object","required":["path","name","size_bytes"],"title":"FileEntryResponse","description":"Entrada de arquivo retornada por navegacao em storage."},"FileInfoResponse":{"properties":{"path":{"type":"string","title":"Path"},"size_bytes":{"type":"integer","title":"Size Bytes"},"last_modified":{"title":"Last Modified","type":"string","format":"date-time","nullable":true},"content_type":{"title":"Content Type","type":"string","nullable":true},"etag":{"title":"Etag","type":"string","nullable":true}},"type":"object","required":["path","size_bytes"],"title":"FileInfoResponse","description":"Informacoes de arquivo em storage.\n\nAttributes:\n    path: Caminho completo do arquivo.\n    size_bytes: Tamanho em bytes.\n    last_modified: Data da ultima modificacao.\n    content_type: MIME type do arquivo.\n    etag: Hash de integridade."},"FileOperationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"src_path":{"type":"string","title":"Src Path"},"dst_path":{"type":"string","title":"Dst Path"},"bytes_transferred":{"type":"integer","title":"Bytes Transferred","default":0}},"type":"object","required":["success","src_path","dst_path"],"title":"FileOperationResponse","description":"Response de operacao entre dois paths do storage (copy, move).\n\nEspelha 1:1 o ``FileOperationResult`` do BC: copy/move tem DOIS paths, e\n``StorageOperationResponse`` (upload/delete) so modela um.\n\nAttributes:\n    success: True se operacao bem-sucedida.\n    src_path: Path de origem.\n    dst_path: Path de destino.\n    bytes_transferred: Bytes transferidos."},"FilterModel":{"properties":{"column":{"type":"string","minLength":1,"title":"Column","description":"Key logica da dimensao filtrada"},"values":{"items":{"type":"string"},"type":"array","title":"Values","description":"Valores selecionados (IN)"}},"type":"object","required":["column"],"title":"FilterModel","description":"Predicado de filtro (coluna IN valores) no corpo da requisicao."},"FirstAccessPasswordRequest":{"properties":{"interim_token":{"type":"string","format":"password","title":"Interim Token","description":"Token interino (purpose=password_change) emitido no login","writeOnly":true},"new_password":{"type":"string","maxLength":1024,"minLength":1,"format":"password","title":"New Password","description":"Nova senha (validada por policy NIST 800-63B no use case)","writeOnly":true}},"type":"object","required":["interim_token","new_password"],"title":"FirstAccessPasswordRequest","description":"Request do 1o acesso: interino (purpose=password_change) + nova senha.\n\nUsado quando o login retorna password_change_required (must_change_password).\nNao exige a senha atual: o interino ja provou a credencial verificada."},"FormSubmitRequest":{"properties":{"action_id":{"type":"string","title":"Action Id","description":"ID da action declarada no template"},"form_data":{"additionalProperties":true,"type":"object","title":"Form Data","description":"Valores do form"}},"type":"object","required":["action_id"],"title":"FormSubmitRequest","description":"Payload HTTP para submissão de dados de form."},"FormSubmitResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"external_id":{"type":"string","title":"External Id","description":"Identificador externo da execução"},"rows_affected":{"title":"Rows Affected","type":"integer","nullable":true},"message":{"title":"Message","type":"string","nullable":true}},"type":"object","required":["ok","external_id"],"title":"FormSubmitResponse","description":"Resposta HTTP da submissão de form."},"FreshnessRequest":{"properties":{"dataset":{"type":"string","title":"Dataset","description":"Nome do dataset a verificar"},"timestamp_column":{"type":"string","title":"Timestamp Column","description":"Coluna timestamp para medir freshness"},"max_age_hours":{"type":"number","title":"Max Age Hours","description":"Idade maxima aceitavel em horas","default":24.0},"sla_name":{"type":"string","title":"Sla Name","description":"Nome descritivo do SLA","default":"default"}},"type":"object","required":["dataset","timestamp_column"],"title":"FreshnessRequest","description":"Request para verificacao de freshness via REST.\n\nAttributes:\n    dataset: Nome do dataset (tabela) a verificar.\n    timestamp_column: Coluna timestamp para medir freshness.\n    max_age_hours: Idade maxima aceitavel em horas (SLA).\n    sla_name: Nome descritivo do SLA."},"FunnelRequest":{"properties":{"filters":{"items":{"$ref":"#/components/schemas/FilterModel"},"type":"array","title":"Filters"}},"type":"object","title":"FunnelRequest","description":"Corpo do POST /report-serving/{page}/funnel."},"FunnelResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"stages":{"items":{"$ref":"#/components/schemas/FunnelStageModel"},"type":"array","title":"Stages"}},"type":"object","required":["page_id"],"title":"FunnelResponse","description":"Resposta do endpoint de funil."},"FunnelStageModel":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"value":{"type":"number","title":"Value"},"percentage":{"type":"number","title":"Percentage"}},"type":"object","required":["key","label","value","percentage"],"title":"FunnelStageModel","description":"Estagio do funil na resposta."},"GenerateDocstringsRequest":{"properties":{"code":{"type":"string","minLength":1,"title":"Code","description":"Codigo Python a documentar"},"file_path":{"type":"string","title":"File Path","description":"Rotulo do arquivo (telemetria)","default":"inline.py"}},"type":"object","required":["code"],"title":"GenerateDocstringsRequest","description":"Body de POST /code/docstrings."},"GenerateDocstringsResponse":{"properties":{"code_with_docstrings":{"type":"string","title":"Code With Docstrings"},"functions_processed":{"type":"integer","title":"Functions Processed"}},"type":"object","required":["code_with_docstrings","functions_processed"],"title":"GenerateDocstringsResponse","description":"Response de POST /code/docstrings."},"GenerateReportRequest":{"properties":{"components":{"items":{"$ref":"#/components/schemas/ComponentSpec"},"type":"array","minItems":1,"title":"Components","description":"Componentes do report"},"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title","description":"Titulo","default":"Report"},"format":{"type":"string","title":"Format","description":"Formato: html, markdown, json, pdf, excel, csv","default":"html"},"locale":{"type":"string","title":"Locale","description":"Locale","default":"pt-BR"},"timezone":{"type":"string","title":"Timezone","description":"Timezone","default":"UTC"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["components"],"title":"GenerateReportRequest","description":"Request para gerar report completo (build + export).\n\nAttributes:\n    components: Lista de specs de componentes.\n    title: Titulo do report.\n    format: Formato de saida (html, markdown, json, pdf, excel, csv).\n    locale: Locale para formatacao.\n    timezone: Timezone para datas.\n    metadata: Metadados adicionais."},"GenerateReportResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"content":{"type":"string","title":"Content","default":""},"component_count":{"type":"integer","title":"Component Count","default":0},"format":{"type":"string","title":"Format","default":"html"},"total_duration_ms":{"type":"number","title":"Total Duration Ms","default":0.0},"size_bytes":{"type":"integer","title":"Size Bytes","default":0}},"type":"object","required":["success"],"title":"GenerateReportResponse","description":"Response de geracao de report.\n\nAttributes:\n    success: True se gerado com sucesso.\n    content: Conteudo renderizado (HTML string).\n    component_count: Quantidade de componentes renderizados.\n    format: Formato gerado.\n    total_duration_ms: Duracao total em ms.\n    size_bytes: Tamanho do conteudo."},"GenerateSpatialReportCommand":{"properties":{"table_name":{"type":"string","title":"Table Name"},"h3_column":{"type":"string","title":"H3 Column","default":"h3_index"},"value_column":{"title":"Value Column","type":"string","nullable":true},"report_title":{"type":"string","title":"Report Title","default":"Spatial Report"},"output_path":{"type":"string","title":"Output Path","default":"spatial_report.html"},"center_lat":{"title":"Center Lat","type":"number","nullable":true},"center_lng":{"title":"Center Lng","type":"number","nullable":true},"zoom":{"type":"integer","title":"Zoom","default":10},"include_geofences":{"type":"boolean","title":"Include Geofences","default":false}},"type":"object","required":["table_name"],"title":"GenerateSpatialReportCommand","description":"Comando para gerar report HTML com mapa interativo."},"GenerateSpatialReportResult":{"properties":{"output_path":{"type":"string","title":"Output Path"},"cells_rendered":{"type":"integer","title":"Cells Rendered"},"file_size_bytes":{"type":"integer","title":"File Size Bytes"},"geofences_rendered":{"type":"integer","title":"Geofences Rendered","default":0}},"type":"object","required":["output_path","cells_rendered","file_size_bytes"],"title":"GenerateSpatialReportResult","description":"Resultado da geracao do report espacial."},"GeofenceCheckCommand":{"properties":{"table_name":{"type":"string","title":"Table Name"},"h3_column":{"type":"string","title":"H3 Column","default":"h3_index"},"fence_types":{"title":"Fence Types","items":{"$ref":"#/components/schemas/GeofenceType"},"type":"array","nullable":true},"output_column":{"type":"string","title":"Output Column","default":"geofence_name"}},"type":"object","required":["table_name"],"title":"GeofenceCheckCommand","description":"Comando para verificar quais linhas estao dentro de geofences."},"GeofenceCheckResult":{"properties":{"rows_inside":{"type":"integer","title":"Rows Inside"},"rows_outside":{"type":"integer","title":"Rows Outside"},"geofences_matched":{"type":"integer","title":"Geofences Matched"},"output_table":{"type":"string","title":"Output Table"}},"type":"object","required":["rows_inside","rows_outside","geofences_matched","output_table"],"title":"GeofenceCheckResult","description":"Resultado da verificacao de geofences."},"GeofenceDetail":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"geometry_wkt":{"type":"string","title":"Geometry Wkt"},"fence_type":{"type":"string","title":"Fence Type"},"resolution":{"type":"integer","title":"Resolution"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"title":"Created At","type":"string","format":"date-time","nullable":true}},"type":"object","required":["id","name","geometry_wkt","fence_type","resolution"],"title":"GeofenceDetail","description":"Detalhe de geofence (GET /geo/geofences/{name})."},"GeofenceSummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"geometry_wkt":{"type":"string","title":"Geometry Wkt"},"fence_type":{"type":"string","title":"Fence Type"},"resolution":{"type":"integer","title":"Resolution"}},"type":"object","required":["id","name","geometry_wkt","fence_type","resolution"],"title":"GeofenceSummary","description":"Item de listagem de geofence (GET /geo/geofences)."},"GeofenceType":{"type":"string","enum":["customer","warehouse","internal_area","municipality","custom"],"title":"GeofenceType","description":"Tipo de cerca geografica.\n\nDetermina resolucao H3 padrao e regras de buffer."},"GovernorSlotsResponse":{"properties":{"active_slots":{"type":"integer","title":"Active Slots"},"slots":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Slots"}},"type":"object","required":["active_slots","slots"],"title":"GovernorSlotsResponse","description":"Resposta de /governor/slots."},"GovernorStatusResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"additionalProperties":true,"type":"object","required":["enabled"],"title":"GovernorStatusResponse","description":"Resposta de /governor/status: enabled + os campos de GovernorHealth."},"GraphEdge":{"properties":{"id":{"type":"string","title":"Id"},"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"}},"type":"object","required":["id","source","target"],"title":"GraphEdge","description":"Aresta do grafo de lineage compativel com React Flow.\n\nArgs:\n    id: Identificador unico da aresta.\n    source: ID do no de origem.\n    target: ID do no de destino."},"GraphNode":{"properties":{"id":{"type":"string","title":"Id"},"data":{"additionalProperties":true,"type":"object","title":"Data"},"position":{"additionalProperties":{"type":"number"},"type":"object","title":"Position"}},"type":"object","required":["id"],"title":"GraphNode","description":"No do grafo de lineage compativel com React Flow.\n\nArgs:\n    id: Identificador unico do no.\n    data: Dados do no (label, type, depth).\n    position: Posicao x/y para layout (default 0,0 - calculado no frontend)."},"GraphRequest":{"properties":{"dataset":{"type":"string","maxLength":256,"minLength":1,"title":"Dataset","description":"Dataset raiz"},"direction":{"type":"string","enum":["upstream","downstream"],"title":"Direction","description":"Direcao do rastreamento","default":"upstream"},"depth":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Depth","description":"Profundidade maxima","default":10}},"type":"object","required":["dataset"],"title":"GraphRequest","description":"Request para gerar grafo de lineage.\n\nArgs:\n    dataset: Dataset raiz do grafo.\n    direction: Direcao do rastreamento (upstream ou downstream).\n    depth: Profundidade maxima (1-100, default 10)."},"GraphResponse":{"properties":{"root":{"type":"string","title":"Root"},"direction":{"type":"string","title":"Direction"},"nodes":{"items":{"$ref":"#/components/schemas/GraphNode"},"type":"array","title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/GraphEdge"},"type":"array","title":"Edges"}},"type":"object","required":["root","direction"],"title":"GraphResponse","description":"Response com grafo de lineage no formato React Flow.\n\nArgs:\n    root: Dataset raiz.\n    direction: Direcao do rastreamento.\n    nodes: Lista de nos do grafo.\n    edges: Lista de arestas do grafo."},"GroupedPanelModel":{"properties":{"dimension":{"type":"string","minLength":1,"title":"Dimension"},"measures":{"items":{"type":"string"},"type":"array","maxItems":12,"minItems":1,"title":"Measures"},"sort_measure":{"type":"string","minLength":1,"title":"Sort Measure"},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","default":200}},"type":"object","required":["dimension","measures","sort_measure"],"title":"GroupedPanelModel","description":"Painel agrupado multi-medida do batch (N medidas por grupo, um unico corte).\n\nDistinto de PagePanelModel (1 medida, corte proprio): todas as medidas saem\ndo mesmo scan e do mesmo recorte, ordenado por `sort_measure`."},"GroupedPanelResponse":{"properties":{"dimension":{"type":"string","title":"Dimension"},"measures":{"items":{"type":"string"},"type":"array","title":"Measures"},"rows":{"items":{"$ref":"#/components/schemas/GroupedPanelRowModel"},"type":"array","title":"Rows"}},"type":"object","required":["dimension"],"title":"GroupedPanelResponse","description":"Resposta de um painel agrupado (medidas na ordem pedida + linhas do corte)."},"GroupedPanelRowModel":{"properties":{"key":{"type":"string","title":"Key"},"values":{"items":{"type":"number"},"type":"array","title":"Values"},"coerced_nulls":{"items":{"type":"integer"},"type":"array","title":"Coerced Nulls"}},"type":"object","required":["key"],"title":"GroupedPanelRowModel","description":"Linha do painel agrupado (chave + valores na ordem das medidas pedidas).\n\n`coerced_nulls` acompanha cada valor: quantas linhas do grupo a coercao\ndeclarada da medida transformou em nulo. Zero em medida sem coercao. Viaja\nna propria linha para que perda de dado chegue a quem le o numero."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Status geral","examples":["UP"]},"version":{"type":"string","title":"Version","description":"Versao do SDK","default":"","examples":["1.0.0"]},"modules":{"items":{"type":"string"},"type":"array","title":"Modules","description":"Modulos ativos"},"endpoints":{"type":"integer","title":"Endpoints","description":"Total de endpoints registrados","default":0}},"type":"object","required":["status"],"title":"HealthResponse","description":"Resposta basica de health check."},"HistoryResponse":{"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Events"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"HistoryResponse","description":"Response com historico de eventos de lineage.\n\nArgs:\n    events: Lista de eventos.\n    total: Quantidade de eventos retornados."},"HolidayItemResponse":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"name":{"type":"string","title":"Name"},"scope":{"type":"string","title":"Scope"},"region":{"title":"Region","type":"string","nullable":true}},"type":"object","required":["date","name","scope"],"title":"HolidayItemResponse","description":"Item de feriado (GET /calendar/holidays)."},"ImpactRequest":{"properties":{"dataset":{"type":"string","maxLength":256,"minLength":1,"title":"Dataset","description":"Nome do dataset"}},"type":"object","required":["dataset"],"title":"ImpactRequest","description":"Request para analise de impacto downstream.\n\nArgs:\n    dataset: Nome do dataset para analisar impacto."},"ImpactResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"affected_datasets":{"items":{"type":"string"},"type":"array","title":"Affected Datasets"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","required":["dataset"],"title":"ImpactResponse","description":"Response com datasets impactados.\n\nArgs:\n    dataset: Dataset analisado.\n    affected_datasets: Lista ordenada de datasets impactados (downstream).\n    total: Quantidade de datasets impactados."},"ImportWorkspaceSettingsRequest":{"properties":{"default_timezone":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z][A-Za-z0-9_+/-]*$","title":"Default Timezone"},"retention_days":{"type":"integer","maximum":3650.0,"minimum":0.0,"title":"Retention Days"},"default_datasource_id":{"title":"Default Datasource Id","type":"string","nullable":true},"default_config_path":{"title":"Default Config Path","type":"string","nullable":true},"features":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Features"},"schema_version":{"type":"integer","title":"Schema Version","default":1},"merge_mode":{"type":"string","pattern":"^(patch|replace)$","title":"Merge Mode","default":"patch"}},"type":"object","required":["default_timezone","retention_days"],"title":"ImportWorkspaceSettingsRequest","description":"Payload HTTP de import de settings a partir de um export previo."},"JobCancelResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","status"],"title":"JobCancelResponse","description":"Resposta de cancelamento de job."},"JobListItemResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"title":"Updated At","type":"string","nullable":true},"job_type":{"type":"string","title":"Job Type","default":""},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"started_at":{"title":"Started At","type":"string","nullable":true},"completed_at":{"title":"Completed At","type":"string","nullable":true},"pipeline_name":{"type":"string","title":"Pipeline Name","default":""},"submitted_by":{"type":"string","title":"Submitted By","default":""}},"type":"object","required":["job_id","tenant_id","status","created_at"],"title":"JobListItemResponse","description":"Item tipado da listagem paginada de jobs (JobInfo serializado).\n\nContrato fechado: declara todos os campos do JobInfo, incluindo os marcos de\nexecucao usados para derivar duracao no consumidor, o pipeline executado e a\npessoa que submeteu."},"JobLogEntryResponse":{"properties":{"entry_id":{"type":"string","title":"Entry Id"},"job_id":{"type":"string","title":"Job Id"},"event_type":{"type":"string","title":"Event Type"},"occurred_at":{"type":"string","title":"Occurred At"},"message":{"title":"Message","type":"string","nullable":true},"progress":{"title":"Progress","type":"integer","nullable":true}},"type":"object","required":["entry_id","job_id","event_type","occurred_at"],"title":"JobLogEntryResponse","description":"Linha do historico de log de um job.\n\nO tenant nao se repete por linha: ele e propriedade do job, ja devolvida em\nGET /jobs/{job_id}."},"JobRetryResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"retry_of":{"type":"string","title":"Retry Of"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_id","retry_of","status"],"title":"JobRetryResponse","description":"Resposta de reenvio de job terminal (novo job enfileirado)."},"JobStatus":{"type":"string","enum":["queued","running","completed","failed","cancelled"],"title":"JobStatus","description":"Estados possiveis de um job async.\n\nFonte unica do vocabulario: quem escreve o estado no JobInfo, quem o\npersiste e quem o publica no contrato REST leem daqui. O filtro `status`\nde GET /jobs deriva deste conjunto — estado ausente aqui e rejeitado com\n422 antes de chegar ao store."},"JobStatusResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"title":"Updated At","type":"string","nullable":true},"job_type":{"type":"string","title":"Job Type","default":""},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"started_at":{"title":"Started At","type":"string","nullable":true},"completed_at":{"title":"Completed At","type":"string","nullable":true},"pipeline_name":{"type":"string","title":"Pipeline Name","default":""},"submitted_by":{"type":"string","title":"Submitted By","default":""}},"additionalProperties":true,"type":"object","required":["job_id","tenant_id","status","created_at"],"title":"JobStatusResponse","description":"Resposta de status de job (idem JobSubmitResponse)."},"JobSubmitResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"title":"Updated At","type":"string","nullable":true},"job_type":{"type":"string","title":"Job Type","default":""},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"started_at":{"title":"Started At","type":"string","nullable":true},"completed_at":{"title":"Completed At","type":"string","nullable":true},"pipeline_name":{"type":"string","title":"Pipeline Name","default":""},"submitted_by":{"type":"string","title":"Submitted By","default":""}},"additionalProperties":true,"type":"object","required":["job_id","tenant_id","status","created_at"],"title":"JobSubmitResponse","description":"Resposta de submissao de job (JobInfo serializado)."},"JobSummary":{"properties":{"active":{"type":"integer","title":"Active","default":0},"queued":{"type":"integer","title":"Queued","default":0},"completed_today":{"type":"integer","title":"Completed Today","default":0},"failed_today":{"type":"integer","title":"Failed Today","default":0}},"type":"object","title":"JobSummary","description":"Sumario de jobs.\n\nArgs:\n    active: Jobs em execucao.\n    queued: Jobs na fila.\n    completed_today: Completados hoje.\n    failed_today: Falharam hoje."},"KpiModel":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"value":{"title":"Value","nullable":true},"formatted_value":{"type":"string","title":"Formatted Value"}},"type":"object","required":["key","label","value","formatted_value"],"title":"KpiModel","description":"KPI resolvido no payload de resposta."},"KpisRequest":{"properties":{"filters":{"items":{"$ref":"#/components/schemas/FilterModel"},"type":"array","title":"Filters"}},"type":"object","title":"KpisRequest","description":"Corpo do POST /report-serving/{page}/kpis."},"KpisResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"kpis":{"items":{"$ref":"#/components/schemas/KpiModel"},"type":"array","title":"Kpis"}},"type":"object","required":["page_id"],"title":"KpisResponse","description":"Resposta do endpoint de KPIs."},"LakeHistoryResponse":{"properties":{"table_uri":{"type":"string","title":"Table Uri"},"entries":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Entries"},"entry_count":{"type":"integer","title":"Entry Count","default":0}},"type":"object","required":["table_uri"],"title":"LakeHistoryResponse","description":"Response de historico de operacoes de tabela Delta.\n\nAttributes:\n    table_uri: URI da tabela Delta consultada.\n    entries: Entradas de historico (version, operation, timestamp, ...).\n    entry_count: Numero de entradas retornadas."},"LakeMaintainRequest":{"properties":{"table_uri":{"type":"string","minLength":1,"title":"Table Uri","description":"URI/nome da tabela"},"operation":{"type":"string","enum":["auto","compact","optimize","vacuum"],"title":"Operation","description":"Operacao de manutencao","default":"auto"},"format":{"type":"string","enum":["delta","ducklake"],"title":"Format","description":"Formato lake (dispatch key: ducklake, delta)"},"backend":{"type":"string","title":"Backend","description":"Backend (file, postgres)","default":"file"},"data_path":{"type":"string","title":"Data Path","description":"Path base dos dados","default":""},"metadata_bucket":{"title":"Metadata Bucket","description":"Bucket .ducklake","type":"string","nullable":true},"metadata_key":{"title":"Metadata Key","description":"Key .ducklake","type":"string","nullable":true},"connection":{"title":"Connection","description":"Postgres connection","type":"string","nullable":true},"schema_name":{"type":"string","title":"Schema Name","description":"Schema da tabela ducklake","default":"main"},"min_file_size_bytes":{"title":"Min File Size Bytes","description":"Tamanho minimo (bytes)","type":"integer","nullable":true},"max_file_size_bytes":{"title":"Max File Size Bytes","description":"Tamanho maximo (bytes)","type":"integer","nullable":true},"z_order_columns":{"title":"Z Order Columns","description":"Colunas Z-ORDER","items":{"type":"string"},"type":"array","nullable":true},"target_size_mb":{"type":"integer","minimum":1.0,"title":"Target Size Mb","description":"Tamanho alvo em MB","default":128},"retention_hours":{"type":"integer","minimum":0.0,"title":"Retention Hours","description":"Horas de retencao","default":168},"dry_run":{"type":"boolean","title":"Dry Run","description":"Apenas listar, nao deletar","default":true}},"type":"object","required":["table_uri","format"],"title":"LakeMaintainRequest","description":"Request para manutencao unificada de tabela Lake (compact/optimize/vacuum).\n\nAttributes:\n    table_uri: URI/path (delta) ou nome de tabela (ducklake).\n    operation: Operacao solicitada (auto resolve por formato).\n    format: Formato Lake (\"ducklake\" | \"delta\") — dispatch key; unicos formatos\n        com strategy de manutencao registrada (registry so tem ducklake/delta).\n    backend: Backend de storage (file, postgres).\n    data_path: Path base para dados.\n    metadata_bucket: File backend — bucket do .ducklake.\n    metadata_key: File backend — key do .ducklake.\n    connection: Postgres backend — nome do connection.\n    schema_name: Schema da tabela ducklake.\n    min_file_size_bytes: Tamanho minimo de arquivo para compact.\n    max_file_size_bytes: Tamanho maximo de arquivo para compact.\n    z_order_columns: Colunas Z-ORDER para optimize delta.\n    target_size_mb: Tamanho alvo em MB para optimize delta.\n    retention_hours: Horas de retencao para vacuum delta.\n    dry_run: Se True, apenas lista sem deletar (vacuum)."},"LakeMaintainResponse":{"properties":{"operation":{"type":"string","title":"Operation"},"kind":{"type":"string","enum":["stats","file_list"],"title":"Kind"},"stats":{"title":"Stats","additionalProperties":true,"type":"object","nullable":true},"files":{"title":"Files","items":{"type":"string"},"type":"array","nullable":true},"file_count":{"title":"File Count","type":"integer","nullable":true}},"type":"object","required":["operation","kind"],"title":"LakeMaintainResponse","description":"Response de manutencao unificada (stats de compact/optimize/vacuum ducklake, ou\nlista de paths removidos por vacuum delta).\n\nAttributes:\n    operation: Operacao efetivamente executada.\n    kind: \"stats\" (dict de estatisticas) ou \"file_list\" (tuple de paths).\n    stats: Estatisticas quando kind=\"stats\".\n    files: Paths removidos quando kind=\"file_list\".\n    file_count: Numero de arquivos quando kind=\"file_list\"."},"LakeMigrateRequest":{"properties":{"backend":{"type":"string","title":"Backend","description":"Backend (file, postgres)","default":"file"},"data_path":{"type":"string","title":"Data Path","description":"Path dos dados"},"metadata_bucket":{"title":"Metadata Bucket","description":"Bucket .ducklake","type":"string","nullable":true},"metadata_key":{"title":"Metadata Key","description":"Key .ducklake","type":"string","nullable":true},"connection":{"title":"Connection","description":"Postgres connection","type":"string","nullable":true},"dry_run":{"type":"boolean","title":"Dry Run","description":"Apenas validar, nao migrar","default":false}},"type":"object","title":"LakeMigrateRequest","description":"Request para migracao one-shot de catalogo DuckLake 0.x -> 1.0.\n\nAttributes:\n    backend: Backend de storage (\"file\" ou \"postgres\").\n    data_path: Path base dos dados.\n    metadata_bucket: File backend — bucket do .ducklake.\n    metadata_key: File backend — key do .ducklake.\n    connection: Postgres backend — nome do connection.\n    dry_run: Se True, apenas valida sem migrar."},"LakeMigrateResponse":{"properties":{"result":{"additionalProperties":true,"type":"object","title":"Result"}},"type":"object","title":"LakeMigrateResponse","description":"Response de migracao de catalogo (tables_migrated, errors)."},"LakeOptimizeRequest":{"properties":{"table_uri":{"type":"string","minLength":1,"title":"Table Uri","description":"URI da tabela"},"format":{"type":"string","title":"Format","description":"Formato lake (apenas delta suportado)","default":"delta"},"z_order_columns":{"title":"Z Order Columns","description":"Colunas Z-ORDER","items":{"type":"string"},"type":"array","nullable":true},"target_size_mb":{"type":"integer","minimum":1.0,"title":"Target Size Mb","description":"Tamanho alvo em MB","default":128}},"type":"object","required":["table_uri"],"title":"LakeOptimizeRequest","description":"Request para compactar small files de tabela Lake (delega ILakeService.optimize).\n\nAttributes:\n    table_uri: URI da tabela (data_path).\n    format: Formato Lake (apenas \"delta\" suportado por optimize).\n    z_order_columns: Colunas para Z-ORDER.\n    target_size_mb: Tamanho alvo em MB."},"LakeOptimizeResponse":{"properties":{"stats":{"additionalProperties":true,"type":"object","title":"Stats"}},"type":"object","title":"LakeOptimizeResponse","description":"Response de optimize (files_added, files_removed, partitions_optimized)."},"LakeReadRequest":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"Query SQL para ler do lake"},"format":{"type":"string","title":"Format","description":"Formato lake","default":"ducklake"},"data_path":{"type":"string","title":"Data Path","description":"Path dos dados lake"},"backend":{"type":"string","title":"Backend","description":"Backend (file, postgres)","default":"file"},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","description":"Limite de linhas na resposta","default":1000},"metadata_bucket":{"title":"Metadata Bucket","description":"Bucket do catalogo DuckLake (backend file)","type":"string","nullable":true},"metadata_key":{"title":"Metadata Key","description":"Key do catalogo DuckLake (backend file)","type":"string","nullable":true},"connection":{"title":"Connection","description":"Nome da connection do registry (backend postgresql)","type":"string","nullable":true},"snapshot_version":{"title":"Snapshot Version","description":"Versao do snapshot historico (time travel)","type":"integer","nullable":true},"snapshot_timestamp":{"title":"Snapshot Timestamp","description":"Instante ISO 8601 do snapshot historico","type":"string","nullable":true}},"type":"object","required":["query"],"title":"LakeReadRequest","description":"Request para leitura de dados do Data Lake via SQL.\n\nAttributes:\n    query: Query SQL completa (SELECT).\n    format: Formato Lake (ducklake, delta).\n    data_path: Path base dos dados Lake.\n    backend: Backend de storage (file, postgres).\n    limit: Limite de linhas na resposta (paginacao client-side).\n    metadata_bucket: Bucket do catalogo DuckLake (backend file).\n    metadata_key: Key do catalogo DuckLake (backend file).\n    connection: Nome da connection do registry (backend postgresql).\n    snapshot_version: Versao do snapshot historico (time travel).\n    snapshot_timestamp: Instante ISO 8601 do snapshot historico."},"LakeReadResponse":{"properties":{"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"rows":{"items":{"items":{},"type":"array"},"type":"array","title":"Rows"},"row_count":{"type":"integer","title":"Row Count","default":0},"truncated":{"type":"boolean","title":"Truncated","default":false}},"type":"object","title":"LakeReadResponse","description":"Response de leitura de dados do Data Lake.\n\nAttributes:\n    columns: Nomes das colunas do resultado.\n    rows: Linhas retornadas (row-oriented, ate `limit`).\n    row_count: Numero de linhas retornadas (apos truncamento).\n    truncated: True se o resultado completo excedia `limit`."},"LakeVacuumRequest":{"properties":{"format":{"type":"string","enum":["delta","ducklake"],"title":"Format","description":"Formato lake (dispatch key)"},"table_uri":{"title":"Table Uri","description":"URI da tabela Delta","type":"string","nullable":true},"table":{"title":"Table","description":"Nome da tabela DuckLake (None = todas)","type":"string","nullable":true},"backend":{"type":"string","title":"Backend","description":"Backend DuckLake (file, postgres)","default":"file"},"data_path":{"type":"string","title":"Data Path","description":"Path dos dados DuckLake"},"metadata_bucket":{"title":"Metadata Bucket","description":"Bucket .ducklake","type":"string","nullable":true},"metadata_key":{"title":"Metadata Key","description":"Key .ducklake","type":"string","nullable":true},"connection":{"title":"Connection","description":"Postgres connection","type":"string","nullable":true},"older_than":{"title":"Older Than","description":"Expressao SQL de tempo","type":"string","nullable":true},"retention_hours":{"type":"integer","minimum":0.0,"title":"Retention Hours","description":"Horas de retencao (Delta)","default":168},"dry_run":{"type":"boolean","title":"Dry Run","description":"Apenas listar, nao deletar","default":true}},"type":"object","required":["format"],"title":"LakeVacuumRequest","description":"Request para remover arquivos orfaos de tabela Lake.\n\nDespacha ILakeService.vacuum_delta (format=\"delta\") ou\nILakeService.vacuum_ducklake (format=\"ducklake\") conforme `format`.\n\nAttributes:\n    format: Formato Lake (\"delta\" ou \"ducklake\") — dispatch key.\n    table_uri: URI da tabela Delta (obrigatorio quando format=\"delta\").\n    table: Nome da tabela DuckLake (None = todas; usado quando format=\"ducklake\").\n    backend: Backend de storage DuckLake (file, postgres).\n    data_path: Path base dos dados DuckLake.\n    metadata_bucket: File backend — bucket do .ducklake.\n    metadata_key: File backend — key do .ducklake.\n    connection: Postgres backend — nome do connection.\n    older_than: Expressao SQL de tempo (DuckLake).\n    retention_hours: Horas de retencao (Delta).\n    dry_run: Se True, apenas lista sem deletar."},"LakeVacuumResponse":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run"},"file_count":{"type":"integer","title":"File Count","default":0},"files":{"items":{"type":"string"},"type":"array","title":"Files"},"stats":{"title":"Stats","additionalProperties":true,"type":"object","nullable":true}},"type":"object","required":["dry_run"],"title":"LakeVacuumResponse","description":"Response de vacuum (Delta: lista de paths; DuckLake: estatisticas)."},"LakeWatermarkResponse":{"properties":{"table":{"type":"string","title":"Table"},"field":{"type":"string","title":"Field"},"watermark":{"title":"Watermark","type":"string","nullable":true}},"type":"object","required":["table","field"],"title":"LakeWatermarkResponse","description":"Response de consulta de watermark de tabela Lake.\n\nAttributes:\n    table: Nome da tabela consultada.\n    field: Campo timestamp consultado.\n    watermark: Valor ISO 8601 do watermark, ou None se tabela vazia."},"LinkRequestDTO":{"properties":{"left_table":{"type":"string","title":"Left Table"},"right_table":{"type":"string","title":"Right Table"},"unique_id_column":{"type":"string","title":"Unique Id Column","default":"unique_id"},"comparisons":{"items":{"$ref":"#/components/schemas/ComparisonSpecRequest"},"type":"array","title":"Comparisons","default":[]},"blocking_rules":{"items":{"$ref":"#/components/schemas/BlockingRuleSpecRequest"},"type":"array","title":"Blocking Rules","default":[]},"blocking_rules_training":{"items":{"$ref":"#/components/schemas/BlockingRuleSpecRequest"},"type":"array","title":"Blocking Rules Training","default":[]},"match_threshold":{"type":"number","title":"Match Threshold","default":0.95},"left_alias":{"type":"string","title":"Left Alias","default":"lhs"},"right_alias":{"type":"string","title":"Right Alias","default":"rhs"},"model_path":{"title":"Model Path","type":"string","nullable":true},"generate_reports":{"type":"boolean","title":"Generate Reports","default":false},"reports_output_dir":{"type":"string","title":"Reports Output Dir","default":"linkage_reports"}},"type":"object","required":["left_table","right_table"],"title":"LinkRequestDTO","description":"Request canonico para vinculacao de registros entre datasets."},"LinkResponseDTO":{"properties":{"left_records":{"type":"integer","title":"Left Records"},"right_records":{"type":"integer","title":"Right Records"},"total_pairs_compared":{"type":"integer","title":"Total Pairs Compared"},"matches_found":{"type":"integer","title":"Matches Found"},"match_rate":{"type":"number","title":"Match Rate"},"model_path":{"title":"Model Path","type":"string","nullable":true},"reports":{"additionalProperties":{"type":"string"},"type":"object","title":"Reports","default":{}},"output_table":{"type":"string","title":"Output Table","default":""},"linker_id":{"title":"Linker Id","type":"string","nullable":true},"graph_metrics_table":{"type":"string","title":"Graph Metrics Table","default":""}},"type":"object","required":["left_records","right_records","total_pairs_compared","matches_found","match_rate"],"title":"LinkResponseDTO","description":"Response canonica de vinculacao de registros entre datasets."},"ListDefinitionsResponse":{"properties":{"definitions":{"items":{"$ref":"#/components/schemas/DefinitionItem"},"type":"array","title":"Definitions"},"total_count":{"type":"integer","title":"Total Count","default":0}},"type":"object","title":"ListDefinitionsResponse","description":"Response da listagem de definicoes do tenant.\n\nAttributes:\n    definitions: Definicoes visiveis ao tenant autenticado.\n    total_count: Total de definicoes."},"ListFilesRequest":{"properties":{"bucket":{"type":"string","minLength":1,"title":"Bucket","description":"Nome do bucket"},"prefix":{"title":"Prefix","description":"Prefixo para filtrar","type":"string","nullable":true},"recursive":{"type":"boolean","title":"Recursive","description":"Listar recursivamente","default":false},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","description":"Maximo de resultados","default":100}},"type":"object","required":["bucket"],"title":"ListFilesRequest","description":"Request para listagem de arquivos em storage.\n\nAttributes:\n    bucket: Nome do bucket ou diretorio.\n    prefix: Filtro de prefixo.\n    recursive: Listar recursivamente.\n    limit: Maximo de resultados."},"ListFilesResponse":{"properties":{"files":{"items":{"$ref":"#/components/schemas/FileInfoResponse"},"type":"array","title":"Files"},"total_count":{"type":"integer","title":"Total Count","default":0},"bucket":{"type":"string","title":"Bucket","default":""},"prefix":{"title":"Prefix","type":"string","nullable":true}},"type":"object","title":"ListFilesResponse","description":"Response de listagem de arquivos.\n\nAttributes:\n    files: Lista de informacoes dos arquivos.\n    total_count: Total de arquivos encontrados.\n    bucket: Bucket consultado.\n    prefix: Prefixo aplicado."},"ListKeysItemResponse":{"properties":{"key_id":{"type":"string","title":"Key Id"},"name":{"type":"string","title":"Name"},"tenant_id":{"type":"string","title":"Tenant Id"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"title":"Last Used At","type":"string","nullable":true},"expires_at":{"title":"Expires At","type":"string","nullable":true},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["key_id","name","tenant_id","permissions","created_at","last_used_at","expires_at","is_active"],"title":"ListKeysItemResponse","description":"Item da listagem de API keys."},"ListQueryHistoryResponse":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/QueryHistoryEntry"},"type":"array","title":"Entries"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":50},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"ListQueryHistoryResponse","description":"Response da listagem de historico de queries (filtrada e paginada).\n\nArgs:\n    entries: Entradas retornadas (ate `limit`, a partir de `offset`).\n    total: Total de entradas que casam os filtros, independente de limit/offset.\n    limit: Limite aplicado (eco do request).\n    offset: Offset aplicado (eco do request)."},"LivenessResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Status do processo","default":"UP","examples":["UP"]},"timestamp":{"type":"string","title":"Timestamp","description":"Timestamp UTC","examples":["2026-03-06T10:30:00Z"]}},"type":"object","required":["timestamp"],"title":"LivenessResponse","description":"Resposta do liveness probe."},"LocalesResponse":{"properties":{"locales":{"items":{"type":"string"},"type":"array","title":"Locales"}},"type":"object","required":["locales"],"title":"LocalesResponse","description":"Locales suportados pelo BC (GET /calendar/locales, SSOT via ILocaleRegistry)."},"LogRecordResponse":{"properties":{"timestamp":{"type":"string","title":"Timestamp"},"level":{"type":"string","title":"Level"},"logger":{"type":"string","title":"Logger"},"message":{"type":"string","title":"Message"},"extra":{"additionalProperties":true,"type":"object","title":"Extra"}},"additionalProperties":true,"type":"object","required":["timestamp","level","logger","message"],"title":"LogRecordResponse","description":"Item de log para endpoint /logs/recent (serializavel)."},"LoginMfaPendingResponse":{"properties":{"status":{"type":"string","const":"mfa_pending","title":"Status","default":"mfa_pending"},"interim_token":{"type":"string","format":"password","title":"Interim Token","description":"Token interino (purpose=mfa, TTL 5min)","writeOnly":true},"factors":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Factors","description":"Fatores ativos (factor_id/kind/label)"},"user_id":{"type":"string","title":"User Id","description":"ID do usuario","default":""},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID do tenant","default":""}},"type":"object","required":["interim_token"],"title":"LoginMfaPendingResponse","description":"Credencial OK; MFA exigido. Cliente conclui via POST /auth/mfa/verify."},"LoginPasswordChangeResponse":{"properties":{"status":{"type":"string","const":"password_change_required","title":"Status","default":"password_change_required"},"interim_token":{"type":"string","format":"password","title":"Interim Token","description":"Token interino (purpose=password_change, TTL 5min)","writeOnly":true},"user_id":{"type":"string","title":"User Id","description":"ID do usuario","default":""},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID do tenant","default":""}},"type":"object","required":["interim_token"],"title":"LoginPasswordChangeResponse","description":"Credencial OK; must_change_password. Cliente conclui via POST /auth/password."},"LoginSuccessResponse":{"properties":{"status":{"type":"string","const":"success","title":"Status","default":"success"},"access_token":{"type":"string","format":"password","title":"Access Token","description":"JWT de acesso (claim sid)","writeOnly":true},"refresh_token":{"type":"string","format":"password","title":"Refresh Token","description":"Refresh opaco prefixado por tenant","writeOnly":true},"token_type":{"type":"string","title":"Token Type","description":"Tipo do token","default":"bearer"},"expires_in":{"type":"integer","minimum":0.0,"title":"Expires In","description":"TTL do access token em segundos"},"user_id":{"type":"string","title":"User Id","description":"ID do usuario autenticado","default":""},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID do tenant","default":""},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Permissoes do usuario"},"session_id":{"type":"string","title":"Session Id","description":"ID da sessao server-side","default":""}},"type":"object","required":["access_token","refresh_token","expires_in"],"title":"LoginSuccessResponse","description":"Login concluido: sessao server-side emitida (access JWT + refresh opaco)."},"MFAChallengeFactorView":{"properties":{"factor_id":{"type":"string","title":"Factor Id","description":"Identificador do fator"},"kind":{"type":"string","title":"Kind","description":"Tipo do fator (totp | webauthn)"},"label":{"type":"string","title":"Label","description":"Rotulo legivel do fator","default":""}},"type":"object","required":["factor_id","kind"],"title":"MFAChallengeFactorView","description":"Descritor de um fator ativo de challenge (sem segredos)."},"MFAChallengeRequest":{"properties":{"interim_token":{"type":"string","format":"password","title":"Interim Token","description":"Token interino emitido em mfa_pending (purpose=mfa)","writeOnly":true}},"type":"object","required":["interim_token"],"title":"MFAChallengeRequest","description":"Request para (re)listar os fatores do interino de login."},"MFAChallengeResponse":{"properties":{"mfa_required":{"type":"boolean","title":"Mfa Required","description":"True se ha fatores a desafiar"},"factors":{"items":{"$ref":"#/components/schemas/MFAChallengeFactorView"},"type":"array","title":"Factors","description":"Fatores ativos (totp/webauthn)"}},"type":"object","required":["mfa_required"],"title":"MFAChallengeResponse","description":"Resposta do challenge: fatores ativos a desafiar."},"MFADisableRequest":{"properties":{"password":{"type":"string","maxLength":1024,"minLength":1,"format":"password","title":"Password","description":"Senha atual do usuario (re-autenticacao obrigatoria)","writeOnly":true,"examples":["s3nh@segura"]}},"type":"object","required":["password"],"title":"MFADisableRequest","description":"Request para desativar um fator de MFA (re-auth por senha obrigatorio)."},"MFARecoveryCodesResponse":{"properties":{"codes":{"items":{"type":"string"},"type":"array","title":"Codes","description":"10 recovery codes plaintext (mostrados uma unica vez)"}},"type":"object","required":["codes"],"title":"MFARecoveryCodesResponse","description":"Resposta da geracao de recovery codes: 10 codes plaintext mostrados 1x.\n\nOs codes ja chegam em plaintext (intencionalmente exibidos uma unica vez); o\nendpoint constroi a lista a partir de `get_secret_value()`, sem expor SecretStr."},"MFATOTPActivateRequest":{"properties":{"code":{"type":"string","minLength":1,"title":"Code","description":"Primeiro codigo de 6 digitos do app autenticador","examples":["123456"]}},"type":"object","required":["code"],"title":"MFATOTPActivateRequest","description":"Request para ativar o fator TOTP pendente com o primeiro codigo."},"MFATOTPEnrollRequest":{"properties":{"account_name":{"type":"string","title":"Account Name","description":"Identificador exibido no app (default: principal autenticado)","default":"","examples":["joao.silva@empresa.com"]},"label":{"type":"string","title":"Label","description":"Rotulo legivel do fator","default":"","examples":["Authenticator pessoal"]}},"type":"object","title":"MFATOTPEnrollRequest","description":"Request para iniciar enrollment TOTP (self-service do usuario autenticado).\n\n`account_name` e o identificador exibido no app autenticador; quando vazio,\no endpoint usa o principal autenticado. `label` e um rotulo legivel opcional."},"MFATOTPEnrollResponse":{"properties":{"factor_id":{"type":"string","title":"Factor Id","description":"Identificador do fator TOTP pendente de ativacao","examples":["fac_01HW..."]},"provisioning_uri":{"type":"string","format":"password","title":"Provisioning Uri","description":"URI otpauth:// para QR (mostrada 1x; mascarada em repr)","writeOnly":true}},"type":"object","required":["factor_id","provisioning_uri"],"title":"MFATOTPEnrollResponse","description":"Resposta do enrollment TOTP: factor_id + URI de provisionamento (mostrada 1x)."},"MFAVerifyRecoveryRequest":{"properties":{"interim_token":{"type":"string","format":"password","title":"Interim Token","description":"Token interino (purpose=mfa)","writeOnly":true},"code":{"type":"string","minLength":1,"title":"Code","description":"Recovery code plaintext"}},"type":"object","required":["interim_token","code"],"title":"MFAVerifyRecoveryRequest","description":"Request para concluir o login com um recovery code (single-use)."},"MFAVerifyTOTPRequest":{"properties":{"interim_token":{"type":"string","format":"password","title":"Interim Token","description":"Token interino (purpose=mfa)","writeOnly":true},"factor_id":{"type":"string","title":"Factor Id","description":"Fator TOTP ativo a verificar"},"code":{"type":"string","minLength":1,"title":"Code","description":"Codigo de 6 digitos"}},"type":"object","required":["interim_token","factor_id","code"],"title":"MFAVerifyTOTPRequest","description":"Request para concluir o login com um codigo TOTP."},"MFAVerifyWebAuthnRequest":{"properties":{"interim_token":{"type":"string","format":"password","title":"Interim Token","description":"Token interino (purpose=mfa)","writeOnly":true},"factor_id":{"type":"string","title":"Factor Id","description":"Fator WebAuthn ativo a verificar"},"state":{"type":"string","format":"password","title":"State","description":"Estado opaco emitido no challenge WebAuthn","writeOnly":true},"response_json":{"type":"string","title":"Response Json","description":"AuthenticatorAssertionResponse serializado (browser)"}},"type":"object","required":["interim_token","factor_id","state","response_json"],"title":"MFAVerifyWebAuthnRequest","description":"Request para concluir o login com uma assertion WebAuthn."},"MFAWebAuthnCompleteRequest":{"properties":{"factor_id":{"type":"string","title":"Factor Id","description":"factor_id emitido no begin do registro WebAuthn","examples":["fac_01HW..."]},"state":{"type":"string","format":"password","title":"State","description":"Estado opaco (challenge) emitido no begin","writeOnly":true},"response_json":{"type":"string","title":"Response Json","description":"AuthenticatorAttestationResponse serializado (browser)"},"label":{"type":"string","title":"Label","description":"Rotulo legivel do fator","default":"","examples":["YubiKey 5"]}},"type":"object","required":["factor_id","state","response_json"],"title":"MFAWebAuthnCompleteRequest","description":"Request para concluir o registro WebAuthn (complete: valida attestation)."},"MFAWebAuthnEnrollRequest":{"properties":{"user_name":{"type":"string","title":"User Name","description":"Nome de exibicao (default: principal autenticado)","default":"","examples":["joao.silva@empresa.com"]}},"type":"object","title":"MFAWebAuthnEnrollRequest","description":"Request para iniciar o registro WebAuthn (begin: challenge).\n\n`user_name` e o nome de exibicao; quando vazio, o endpoint usa o principal."},"MFAWebAuthnEnrollResponse":{"properties":{"factor_id":{"type":"string","title":"Factor Id","description":"Identificador do fator WebAuthn pendente","examples":["fac_01HW..."]},"options_json":{"type":"string","title":"Options Json","description":"PublicKeyCredentialCreationOptions serializado (browser)"},"state":{"type":"string","format":"password","title":"State","description":"Estado opaco (challenge) reapresentado no complete (mascarado em repr)","writeOnly":true}},"type":"object","required":["factor_id","options_json","state"],"title":"MFAWebAuthnEnrollResponse","description":"Resposta do begin WebAuthn: options serializadas + estado opaco (mostrado 1x)."},"MaintenanceScope":{"type":"string","enum":["global","source_prefix","target_kind"],"title":"MaintenanceScope","description":"Escopo de aplicacao da janela de manutencao."},"MaintenanceWindowResponse":{"properties":{"id":{"type":"string","title":"Id"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"scope":{"$ref":"#/components/schemas/MaintenanceScope"},"scope_value":{"title":"Scope Value","type":"string","nullable":true},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["id","starts_at","ends_at","scope","scope_value","reason"],"title":"MaintenanceWindowResponse","description":"Response de uma MaintenanceWindow."},"MapaPdfRequest":{"properties":{"filters":{"items":{"$ref":"#/components/schemas/FilterModel"},"type":"array","title":"Filters"},"limit":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Limit","default":20000}},"type":"object","title":"MapaPdfRequest","description":"Corpo do POST /report-serving/{page}/mapa-pdf."},"MarketplaceEntryResponse":{"properties":{"name":{"type":"string","title":"Name"},"version":{"type":"string","title":"Version","default":""},"description":{"type":"string","title":"Description","default":""},"pull_count":{"type":"integer","title":"Pull Count","default":0},"published_at":{"title":"Published At","type":"string","format":"date-time","nullable":true},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["name"],"title":"MarketplaceEntryResponse","description":"Entrada do marketplace.\n\nAttributes:\n    name: Nome do template.\n    version: Versao.\n    description: Descricao.\n    pull_count: Downloads.\n    published_at: Data de publicacao.\n    tags: Tags."},"MarketplaceSearchRequest":{"properties":{"query":{"type":"string","title":"Query","description":"Texto de busca","default":""},"category":{"title":"Category","type":"string","nullable":true},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"order_by":{"type":"string","title":"Order By","description":"Ordenacao","default":"pull_count"},"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","description":"Maximo de resultados","default":50}},"type":"object","title":"MarketplaceSearchRequest","description":"Request para busca no marketplace.\n\nAttributes:\n    query: Texto de busca.\n    category: Filtro por categoria.\n    tags: Filtro por tags.\n    order_by: Ordenacao (pull_count, name, published_at).\n    limit: Maximo de resultados."},"MarketplaceSearchResponse":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/MarketplaceEntryResponse"},"type":"array","title":"Entries"},"total_count":{"type":"integer","title":"Total Count","default":0}},"type":"object","title":"MarketplaceSearchResponse","description":"Response de busca no marketplace.\n\nAttributes:\n    entries: Templates encontrados.\n    total_count: Total."},"MatchMappingResponse":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"score":{"type":"number","title":"Score"},"method":{"type":"string","title":"Method"}},"type":"object","required":["source","target","score","method"],"title":"MatchMappingResponse","description":"Mapeamento individual encontrado no match.\n\nAttributes:\n    source: Nome da coluna source.\n    target: Nome da coluna target.\n    score: Score de similaridade (0.0 a 1.0).\n    method: Metodo usado para matching (name, type, fuzzy)."},"MeasureDescriptorModel":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"}},"type":"object","required":["key","label"],"title":"MeasureDescriptorModel","description":"Medida agregavel exposta no descriptor."},"ModelSnapshotResponse":{"properties":{"model_hash":{"type":"string","title":"Model Hash"},"is_first":{"type":"boolean","title":"Is First"},"changed_since_last":{"type":"boolean","title":"Changed Since Last"}},"type":"object","required":["model_hash","is_first","changed_since_last"],"title":"ModelSnapshotResponse","description":"Response para POST /powerbi/snapshot (hash e status de mudanca)."},"MonitorFreshnessResponse":{"properties":{"datasets":{"items":{"$ref":"#/components/schemas/DatasetFreshnessModel"},"type":"array","title":"Datasets"}},"type":"object","title":"MonitorFreshnessResponse","description":"Resposta do GET /report-serving/monitor/freshness."},"MoveFileRequest":{"properties":{"src_path":{"type":"string","minLength":1,"title":"Src Path","description":"Caminho de origem"},"dst_path":{"type":"string","minLength":1,"title":"Dst Path","description":"Caminho de destino"}},"type":"object","required":["src_path","dst_path"],"title":"MoveFileRequest","description":"Request para mover arquivo entre paths no provider default.\n\nAttributes:\n    src_path: Caminho de origem no storage.\n    dst_path: Caminho de destino no storage."},"NextBusinessDayResponse":{"properties":{"original_date":{"type":"string","format":"date","title":"Original Date"},"next_business_day":{"type":"string","format":"date","title":"Next Business Day"},"skipped_holidays":{"items":{"type":"string","format":"date"},"type":"array","title":"Skipped Holidays"}},"type":"object","required":["original_date","next_business_day"],"title":"NextBusinessDayResponse","description":"Resultado do calculo de proximo dia util (GET /calendar/business-day/next)."},"ObservabilityDashboardResponse":{"properties":{"alerts_recent":{"items":{"$ref":"#/components/schemas/AlertSummaryDTO"},"type":"array","title":"Alerts Recent"},"alerts_total_24h":{"type":"integer","title":"Alerts Total 24H"},"alerts_available":{"type":"boolean","title":"Alerts Available"},"schedules_active":{"type":"integer","title":"Schedules Active"},"schedules_available":{"type":"boolean","title":"Schedules Available"},"watchdog":{"$ref":"#/components/schemas/WatchdogStatusDTO"},"watchdog_available":{"type":"boolean","title":"Watchdog Available"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["alerts_recent","alerts_total_24h","alerts_available","schedules_active","schedules_available","watchdog","watchdog_available","generated_at"],"title":"ObservabilityDashboardResponse","description":"Response para GET /observability/dashboard.\n\nAlerting/Scheduling/Watchdog sao BCs opcionais deste assembler (o modulo\nde observability e registrado em todo bootstrap, mas os 3 BCs compostos\nnem sempre estao presentes no perfil corrente). Cada secao carrega um\nflag `*_available`: True quando o BC respondeu e os contadores refletem\ndados reais; False quando o BC nao esta carregado no perfil (secao\nzerada, nunca omitida silenciosamente — distingue \"0 real\" de\n\"indisponivel\", mesmo idioma de `_composition/api/dashboard/_models_dashboard_overview.py`)."},"PageDataRequest":{"properties":{"filters":{"items":{"$ref":"#/components/schemas/FilterModel"},"type":"array","title":"Filters"},"panels":{"items":{"$ref":"#/components/schemas/PagePanelModel"},"type":"array","maxItems":8,"title":"Panels"},"grouped_panels":{"items":{"$ref":"#/components/schemas/GroupedPanelModel"},"type":"array","maxItems":4,"title":"Grouped Panels"},"include_funnel":{"type":"boolean","title":"Include Funnel","default":true},"include_kpis":{"type":"boolean","title":"Include Kpis","default":false},"include_table":{"type":"boolean","title":"Include Table","default":false},"table_limit":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Table Limit","default":300}},"type":"object","title":"PageDataRequest","description":"Corpo do POST /report-serving/{page}/page-data (refresh batch da pagina)."},"PageDataResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"kpis":{"items":{"$ref":"#/components/schemas/KpiModel"},"type":"array","title":"Kpis"},"stages":{"items":{"$ref":"#/components/schemas/FunnelStageModel"},"type":"array","title":"Stages"},"panels":{"items":{"$ref":"#/components/schemas/AggregateResponse"},"type":"array","title":"Panels"},"grouped_panels":{"items":{"$ref":"#/components/schemas/GroupedPanelResponse"},"type":"array","title":"Grouped Panels"},"table":{"$ref":"#/components/schemas/DetailTableResponse","nullable":true}},"type":"object","required":["page_id"],"title":"PageDataResponse","description":"Resposta do endpoint batch (secoes nao solicitadas vazias/None)."},"PagePanelModel":{"properties":{"measure":{"type":"string","minLength":1,"title":"Measure"},"dimension":{"type":"string","minLength":1,"title":"Dimension"},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","default":20}},"type":"object","required":["measure","dimension"],"title":"PagePanelModel","description":"Painel agregado solicitado no batch (medida x dimensao, top N)."},"PaginatedResponse_FeedItemResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FeedItemResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":20},"offset":{"type":"integer","title":"Offset","default":0},"has_next":{"type":"boolean","title":"Has Next","default":false},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true}},"type":"object","title":"PaginatedResponse[FeedItemResponse]"},"PaginatedResponse_JobListItemResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/JobListItemResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":20},"offset":{"type":"integer","title":"Offset","default":0},"has_next":{"type":"boolean","title":"Has Next","default":false},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true}},"type":"object","title":"PaginatedResponse[JobListItemResponse]"},"PaginatedResponse_JobLogEntryResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/JobLogEntryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":20},"offset":{"type":"integer","title":"Offset","default":0},"has_next":{"type":"boolean","title":"Has Next","default":false},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true}},"type":"object","title":"PaginatedResponse[JobLogEntryResponse]"},"PaginatedResponse_PipelineInfoResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PipelineInfoResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":20},"offset":{"type":"integer","title":"Offset","default":0},"has_next":{"type":"boolean","title":"Has Next","default":false},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true}},"type":"object","title":"PaginatedResponse[PipelineInfoResponse]"},"PaginatedResponse_ScheduleResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ScheduleResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":20},"offset":{"type":"integer","title":"Offset","default":0},"has_next":{"type":"boolean","title":"Has Next","default":false},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true}},"type":"object","title":"PaginatedResponse[ScheduleResponse]"},"PaginatedResponse_SourceResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SourceResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":20},"offset":{"type":"integer","title":"Offset","default":0},"has_next":{"type":"boolean","title":"Has Next","default":false},"next_cursor":{"title":"Next Cursor","type":"string","nullable":true}},"type":"object","title":"PaginatedResponse[SourceResponse]"},"PanelDescriptorModel":{"properties":{"view":{"type":"string","title":"View"},"title":{"type":"string","title":"Title"},"kind":{"type":"string","title":"Kind"},"measure":{"title":"Measure","type":"string","nullable":true},"dimension":{"title":"Dimension","type":"string","nullable":true},"wide":{"type":"boolean","title":"Wide","default":false}},"type":"object","required":["view","title","kind"],"title":"PanelDescriptorModel","description":"Painel de visualizacao declarado no page-model (layout da SPA por view)."},"ParseRequest":{"properties":{"source":{"type":"string","title":"Source"},"table_pattern":{"title":"Table Pattern","type":"string","nullable":true}},"type":"object","required":["source"],"title":"ParseRequest","description":"Request para POST /powerbi/parse (extracao de modelo semantico)."},"ParseResponse":{"properties":{"source_type":{"type":"string","title":"Source Type"},"table_count":{"type":"integer","title":"Table Count"},"measure_count":{"type":"integer","title":"Measure Count"},"relationship_count":{"type":"integer","title":"Relationship Count"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["source_type","table_count","measure_count","relationship_count","warnings"],"title":"ParseResponse","description":"Response para POST /powerbi/parse (resumo do modelo extraido)."},"PasswordResetCompleteRequest":{"properties":{"org":{"type":"string","minLength":1,"title":"Org","description":"tenant_id/dominio da org, do link de reset","examples":["corp"]},"token":{"type":"string","minLength":1,"format":"password","title":"Token","description":"Token de reset (plaintext do link de email)","writeOnly":true},"new_password":{"type":"string","maxLength":1024,"minLength":1,"format":"password","title":"New Password","description":"Nova senha escolhida (validada por policy NIST 800-63B no use case)","writeOnly":true}},"type":"object","required":["org","token","new_password"],"title":"PasswordResetCompleteRequest","description":"Request anonimo de conclusao do reset (link do email com token + org).\n\nO `org` e o token vem do link emailado; a nova senha e validada por policy\nNIST no use case."},"PasswordResetRequestRequest":{"properties":{"email":{"type":"string","minLength":1,"title":"Email","description":"Email informado no formulario de reset","examples":["ana.souza@corp.com"]}},"type":"object","required":["email"],"title":"PasswordResetRequestRequest","description":"Request anonimo de solicitacao de reset (formulario \"esqueci a senha\").\n\nApenas o email: a org/tenant e resolvida pelo dominio do email no adapter.\nA resposta e sempre 202 (anti-enumeration), sem revelar se a conta existe."},"PipelineDetailResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"steps":{"items":{"$ref":"#/components/schemas/PipelineStepInfo"},"type":"array","title":"Steps"},"config_path":{"type":"string","title":"Config Path","default":""}},"type":"object","required":["name"],"title":"PipelineDetailResponse","description":"Detalhes de pipeline com steps para renderizacao de DAG.\n\nAttributes:\n    name: Nome do pipeline.\n    description: Descricao.\n    steps: Steps com tipo e detalhes.\n    config_path: Path do YAML."},"PipelineExecutionEntry":{"properties":{"job_id":{"type":"string","title":"Job Id"},"pipeline_name":{"type":"string","title":"Pipeline Name"},"status":{"type":"string","title":"Status"},"started_at":{"title":"Started At","type":"string","format":"date-time","nullable":true},"finished_at":{"title":"Finished At","type":"string","format":"date-time","nullable":true}},"type":"object","required":["job_id","pipeline_name","status"],"title":"PipelineExecutionEntry","description":"Entrada de historico de execucao de pipeline.\n\nAttributes:\n    job_id: ID do job.\n    pipeline_name: Nome do pipeline.\n    status: Status final (queued, running, completed, failed, cancelled).\n    started_at: Timestamp de inicio.\n    finished_at: Timestamp de termino."},"PipelineHistoryResponse":{"properties":{"executions":{"items":{"$ref":"#/components/schemas/PipelineExecutionEntry"},"type":"array","title":"Executions"},"total_count":{"type":"integer","title":"Total Count","default":0}},"type":"object","title":"PipelineHistoryResponse","description":"Response de historico de execucoes.\n\nAttributes:\n    executions: Lista de execucoes filtradas por job_type=pipeline_run.\n    total_count: Total de resultados retornados."},"PipelineInfoResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"steps_count":{"type":"integer","title":"Steps Count","default":0},"config_path":{"type":"string","title":"Config Path","default":""}},"type":"object","required":["name"],"title":"PipelineInfoResponse","description":"Metadata de pipeline retornada na listagem.\n\nAttributes:\n    name: Nome do pipeline.\n    description: Descricao do pipeline.\n    steps_count: Quantidade de steps.\n    config_path: Path do YAML de configuracao."},"PipelineMarketplaceEntryResponse":{"properties":{"name":{"type":"string","title":"Name"},"version":{"type":"string","title":"Version","default":""},"description":{"type":"string","title":"Description","default":""},"pull_count":{"type":"integer","title":"Pull Count","default":0},"published_at":{"title":"Published At","type":"string","format":"date-time","nullable":true},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["name"],"title":"PipelineMarketplaceEntryResponse","description":"Entrada do marketplace de pipeline templates."},"PipelineMarketplaceSearchRequest":{"properties":{"query":{"type":"string","title":"Query","description":"Texto de busca","default":""},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","default":50}},"type":"object","title":"PipelineMarketplaceSearchRequest","description":"Request para busca no marketplace de pipeline templates."},"PipelineMarketplaceSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/PipelineMarketplaceEntryResponse"},"type":"array","title":"Results"},"total_count":{"type":"integer","title":"Total Count","default":0}},"type":"object","title":"PipelineMarketplaceSearchResponse","description":"Response da busca no marketplace."},"PipelineRequest":{"properties":{"source":{"type":"string","title":"Source"},"output_dir":{"type":"string","title":"Output Dir"},"pipeline_name":{"title":"Pipeline Name","type":"string","nullable":true},"dry_run":{"type":"boolean","title":"Dry Run","default":true}},"type":"object","required":["source","output_dir"],"title":"PipelineRequest","description":"Request para POST /powerbi/pipeline (geracao de pipeline YAML).\n\n``output_dir`` e referencia de ESCRITA dentro do root de saida governado\npelo servidor; o router a resolve antes de montar o comando."},"PipelineResponse":{"properties":{"pipeline_path":{"type":"string","title":"Pipeline Path"},"step_count":{"type":"integer","title":"Step Count"},"table_count":{"type":"integer","title":"Table Count"},"materialized_count":{"type":"integer","title":"Materialized Count"},"skipped":{"items":{"type":"string"},"type":"array","title":"Skipped"}},"type":"object","required":["pipeline_path","step_count","table_count","materialized_count","skipped"],"title":"PipelineResponse","description":"Response para POST /powerbi/pipeline (resumo do pipeline gerado)."},"PipelineStepInfo":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type","default":""},"details":{"type":"string","title":"Details","default":""}},"type":"object","required":["name"],"title":"PipelineStepInfo","description":"Informacao de um step de pipeline para renderizacao de DAG.\n\nAttributes:\n    name: Nome do step.\n    type: Tipo (sql, python, cli, etc.).\n    details: Descricao ou detalhes adicionais."},"PipelineTemplateDescriptorResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"path":{"type":"string","title":"Path"},"source":{"type":"string","title":"Source"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"source_types":{"items":{"type":"string"},"type":"array","title":"Source Types"},"step_types":{"items":{"type":"string"},"type":"array","title":"Step Types"},"requires_external":{"type":"boolean","title":"Requires External"}},"type":"object","required":["name","description","path","source","tags","source_types","step_types","requires_external"],"title":"PipelineTemplateDescriptorResponse","description":"Descritor de template de pipeline exposto pela API."},"PipelineTemplatePublishRequest":{"properties":{"template_name":{"type":"string","minLength":1,"title":"Template Name"},"version":{"type":"string","minLength":1,"title":"Version"},"source":{"type":"string","minLength":1,"title":"Source","description":"Conteudo YAML do pipeline"},"description":{"type":"string","title":"Description","default":""},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["template_name","version","source"],"title":"PipelineTemplatePublishRequest","description":"Request para publicar pipeline template no marketplace."},"PipelineTemplatePublishResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"storage_path":{"type":"string","title":"Storage Path","default":""},"version":{"type":"string","title":"Version","default":""},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"blocked_step_types":{"items":{"type":"string"},"type":"array","title":"Blocked Step Types"},"error":{"type":"string","title":"Error","default":""}},"type":"object","required":["success"],"title":"PipelineTemplatePublishResponse","description":"Response da publicacao no marketplace."},"PipelineTemplatePullRequest":{"properties":{"template_name":{"type":"string","minLength":1,"title":"Template Name"},"version":{"title":"Version","type":"string","nullable":true}},"type":"object","required":["template_name"],"title":"PipelineTemplatePullRequest","description":"Request para pull de pipeline template do marketplace."},"PipelineTemplatePullResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"local_path":{"type":"string","title":"Local Path","default":""},"version":{"type":"string","title":"Version","default":""},"error":{"type":"string","title":"Error","default":""}},"type":"object","required":["success"],"title":"PipelineTemplatePullResponse","description":"Response do pull de pipeline template."},"PipelineTemplateUploadRequest":{"properties":{"template_name":{"type":"string","minLength":1,"title":"Template Name"},"source":{"type":"string","minLength":1,"title":"Source","description":"Conteudo YAML do pipeline"}},"type":"object","required":["template_name","source"],"title":"PipelineTemplateUploadRequest","description":"Request para upload de pipeline template ao storage local."},"PipelineTemplateUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"storage_path":{"type":"string","title":"Storage Path","default":""},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"blocked_step_types":{"items":{"type":"string"},"type":"array","title":"Blocked Step Types"},"error":{"type":"string","title":"Error","default":""}},"type":"object","required":["success"],"title":"PipelineTemplateUploadResponse","description":"Response do upload de pipeline template."},"PipelineTemplateValidateRequest":{"properties":{"source":{"type":"string","minLength":1,"title":"Source","description":"Conteudo YAML do pipeline"}},"type":"object","required":["source"],"title":"PipelineTemplateValidateRequest","description":"Request para validar pipeline YAML."},"PipelineTemplateValidateResponse":{"properties":{"is_valid":{"type":"boolean","title":"Is Valid"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"blocked_step_types":{"items":{"type":"string"},"type":"array","title":"Blocked Step Types"}},"type":"object","required":["is_valid"],"title":"PipelineTemplateValidateResponse","description":"Response da validacao de pipeline YAML."},"PrefixInfoResponse":{"properties":{"prefix":{"type":"string","title":"Prefix"},"name":{"type":"string","title":"Name"}},"type":"object","required":["prefix","name"],"title":"PrefixInfoResponse","description":"Entrada de diretorio virtual (prefixo) em storage."},"PreviewDatasetRequest":{"properties":{"dataset_path":{"type":"string","minLength":1,"title":"Dataset Path","description":"Path do dataset"},"connection_name":{"title":"Connection Name","description":"Nome da conexao (None = default)","type":"string","nullable":true},"limit":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Limit","description":"Maximo de linhas","default":50},"columns":{"title":"Columns","description":"Colunas especificas (None = todas)","items":{"type":"string"},"type":"array","nullable":true}},"type":"object","required":["dataset_path"],"title":"PreviewDatasetRequest","description":"Request para preview de linhas de dataset."},"PreviewDatasetResponse":{"properties":{"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"rows":{"items":{"items":{},"type":"array"},"type":"array","title":"Rows"},"total_rows_sampled":{"type":"integer","title":"Total Rows Sampled","default":0},"truncated":{"type":"boolean","title":"Truncated","default":false},"dataset_path":{"type":"string","title":"Dataset Path","default":""},"connection_name":{"type":"string","title":"Connection Name","default":""}},"type":"object","title":"PreviewDatasetResponse","description":"Response de preview de dataset."},"ProfileRequestDTO":{"properties":{"tables":{"items":{"type":"string"},"type":"array","title":"Tables"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns","default":[]},"output_dir":{"type":"string","title":"Output Dir","default":"linkage_diagnostics"}},"type":"object","required":["tables"],"title":"ProfileRequestDTO","description":"Request canonico para diagnosticos exploratorios de colunas."},"ProfileResponseDTO":{"properties":{"reports":{"additionalProperties":{"type":"string"},"type":"object","title":"Reports","default":{}}},"type":"object","title":"ProfileResponseDTO","description":"Response canonica dos diagnosticos exploratorios de colunas."},"PublishDefinitionRequest":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"version":{"type":"string","maxLength":32,"minLength":5,"title":"Version"},"source":{"type":"string","minLength":1,"title":"Source","description":"Conteudo YAML da definicao"},"description":{"type":"string","title":"Description","default":""},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"resources":{"items":{"$ref":"#/components/schemas/PublishedResourceModel"},"type":"array","title":"Resources","default":[]}},"type":"object","required":["name","version","source"],"title":"PublishDefinitionRequest","description":"Request de publicacao de definicao de pipeline no registro do tenant.\n\nAttributes:\n    name: Nome da definicao; identifica a definicao dentro do tenant.\n    version: SemVer MAJOR.MINOR.PATCH da versao publicada.\n    source: Conteudo YAML da definicao.\n    description: Descricao curta exibida na listagem.\n    tags: Rotulos livres para filtro.\n    resources: Recursos que o documento referencia por path relativo\n        (`query_file:`, sub-workflow); vazio publica um pipeline autocontido."},"PublishDefinitionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"name":{"type":"string","title":"Name","default":""},"version":{"type":"string","title":"Version","default":""},"checksum":{"type":"string","title":"Checksum","default":""},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"error":{"type":"string","title":"Error","default":""},"resource_paths":{"items":{"type":"string"},"type":"array","title":"Resource Paths"}},"type":"object","required":["success"],"title":"PublishDefinitionResponse","description":"Response da publicacao de definicao.\n\nAttributes:\n    success: True quando validada e gravada.\n    name: Nome da definicao publicada.\n    version: Versao publicada.\n    checksum: SHA-256 do bundle, calculado pelo servidor.\n    errors: Erros de validacao ou de politica que impediram a publicacao.\n    error: Falha nao relacionada a validacao.\n    resource_paths: Paths normalizados dos recursos que entraram no bundle."},"PublishTemplateRequest":{"properties":{"template_name":{"type":"string","minLength":1,"title":"Template Name"},"version":{"type":"string","minLength":1,"title":"Version"},"description":{"type":"string","title":"Description","default":""},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["template_name","version"],"title":"PublishTemplateRequest","description":"Request para publicar template no marketplace.\n\nAttributes:\n    template_name: Nome do template local.\n    version: Versao a publicar.\n    description: Descricao para o marketplace.\n    tags: Tags de categoria."},"PublishTemplateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"marketplace_path":{"type":"string","title":"Marketplace Path","default":""},"version":{"type":"string","title":"Version","default":""},"error":{"type":"string","title":"Error","default":""}},"type":"object","required":["success"],"title":"PublishTemplateResponse","description":"Response de publicacao.\n\nAttributes:\n    success: True se publicado.\n    marketplace_path: Path no marketplace.\n    version: Versao publicada.\n    error: Erro se falhou."},"PublishedResourceModel":{"properties":{"relative_path":{"type":"string","maxLength":255,"minLength":1,"title":"Relative Path"},"content":{"type":"string","minLength":1,"title":"Content"}},"type":"object","required":["relative_path","content"],"title":"PublishedResourceModel","description":"Recurso acompanhante enviado junto com a definicao.\n\nAttributes:\n    relative_path: Path relativo ao documento (ex: \"sql/baixas.sql\").\n    content: Conteudo textual do recurso."},"PullTemplateRequest":{"properties":{"template_name":{"type":"string","minLength":1,"title":"Template Name"},"version":{"title":"Version","type":"string","nullable":true}},"type":"object","required":["template_name"],"title":"PullTemplateRequest","description":"Request para pull de template do marketplace.\n\nAttributes:\n    template_name: Nome do template no marketplace.\n    version: Versao especifica (None = latest)."},"PullTemplateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"local_path":{"type":"string","title":"Local Path","default":""},"version":{"type":"string","title":"Version","default":""},"was_cached":{"type":"boolean","title":"Was Cached","default":false},"error":{"type":"string","title":"Error","default":""}},"type":"object","required":["success"],"title":"PullTemplateResponse","description":"Response de pull.\n\nAttributes:\n    success: True se baixado.\n    local_path: Path local.\n    version: Versao baixada.\n    was_cached: True se ja estava em cache.\n    error: Erro se falhou."},"QueryAlertsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"alerts":{"items":{"$ref":"#/components/schemas/AlertSummaryResponse"},"type":"array","title":"Alerts"}},"type":"object","required":["total","alerts"],"title":"QueryAlertsResponse","description":"Response para GET /alerting/alerts."},"QueryAnalyzeRequest":{"properties":{"sql":{"type":"string","title":"Sql","description":"Query SQL para analisar"},"detailed":{"type":"boolean","title":"Detailed","description":"Incluir analise de cardinalidade","default":false}},"type":"object","required":["sql"],"title":"QueryAnalyzeRequest","description":"Request para analise de plano de execucao de query SQL.\n\nArgs:\n    sql: Query SQL para analisar.\n    detailed: Se True, inclui analise avancada com cardinalidade."},"QueryAnalyzeResponse":{"properties":{"plan_text":{"type":"string","title":"Plan Text","default":""},"execution_time_ms":{"type":"number","title":"Execution Time Ms","default":0.0},"bottlenecks":{"items":{"type":"string"},"type":"array","title":"Bottlenecks"},"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions"}},"type":"object","title":"QueryAnalyzeResponse","description":"Response com plano de execucao e recomendacoes.\n\nArgs:\n    plan_text: Plano de execucao formatado.\n    execution_time_ms: Tempo estimado de execucao.\n    bottlenecks: Gargalos identificados.\n    suggestions: Recomendacoes de otimizacao."},"QueryExecuteRequest":{"properties":{"sql":{"type":"string","title":"Sql","description":"Query SQL a executar","examples":["SELECT * FROM vendas WHERE ano = 2024 LIMIT 100"]},"params":{"additionalProperties":true,"type":"object","title":"Params","description":"Parametros nomeados para a query","examples":[{"ano":2024}]},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","description":"Limite de linhas retornadas","default":100,"examples":[100,1000]},"offset":{"type":"integer","maximum":1000000.0,"minimum":0.0,"title":"Offset","description":"Numero de linhas a pular antes do limit (paginacao offset-based). Sem ORDER BY explicito na query, a ordem das linhas entre paginas nao e garantida (comportamento do motor SQL).","default":0,"examples":[0,100]},"format":{"type":"string","enum":["json","csv"],"title":"Format","description":"Formato do resultado","default":"json","examples":["json","csv"]}},"type":"object","required":["sql"],"title":"QueryExecuteRequest","description":"Request para execucao de query SQL via Query Studio.\n\nArgs:\n    sql: Query SQL a executar.\n    params: Parametros nomeados para a query (bind variables).\n    limit: Limite de linhas no resultado.\n    offset: Numero de linhas a pular antes do limit (paginacao offset-based).\n    format: Formato de saida dos resultados."},"QueryExecuteResponse":{"properties":{"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"rows":{"items":{"items":{},"type":"array"},"type":"array","title":"Rows"},"row_count":{"type":"integer","title":"Row Count","default":0},"execution_time_ms":{"type":"number","title":"Execution Time Ms","default":0.0},"query_id":{"type":"string","title":"Query Id","default":""},"offset":{"type":"integer","title":"Offset","default":0},"has_more":{"type":"boolean","title":"Has More","default":false}},"type":"object","title":"QueryExecuteResponse","description":"Response com resultado da execucao de query SQL.\n\nArgs:\n    columns: Lista de nomes das colunas.\n    rows: Lista de linhas (cada linha e lista de valores).\n    row_count: Numero de linhas retornadas.\n    execution_time_ms: Tempo de execucao em milissegundos.\n    query_id: Identificador da execucao no historico.\n    offset: Offset efetivamente aplicado (eco do request).\n    has_more: True quando row_count atingiu o limit solicitado, indicando\n        que provavelmente ha mais linhas na proxima pagina (heuristica\n        offset-based; nao e uma contagem exata do total).","examples":[{"columns":["ano","total"],"execution_time_ms":12.5,"has_more":false,"offset":0,"query_id":"q-abc123","row_count":2,"rows":[[2024,1500.0],[2023,1200.0]]}]},"QueryHistoryEntry":{"properties":{"query_id":{"type":"string","title":"Query Id"},"sql":{"type":"string","title":"Sql","default":""},"tenant_id":{"type":"string","title":"Tenant Id","default":""},"executed_at":{"type":"string","format":"date-time","title":"Executed At"},"execution_time_ms":{"type":"number","title":"Execution Time Ms","default":0.0},"row_count":{"type":"integer","title":"Row Count","default":0},"status":{"type":"string","title":"Status","default":"success"},"error_message":{"title":"Error Message","type":"string","nullable":true}},"type":"object","title":"QueryHistoryEntry","description":"Registro de execucao de query no historico (imutavel).\n\nArgs:\n    query_id: Identificador unico da execucao.\n    sql: Query SQL executada.\n    tenant_id: Tenant que executou.\n    executed_at: Timestamp da execucao.\n    execution_time_ms: Tempo de execucao em milissegundos.\n    row_count: Linhas retornadas.\n    status: Resultado da execucao (success ou error).\n    error_message: Mensagem de erro se status=error."},"ReadinessResponse":{"properties":{"status":{"type":"string","title":"Status","description":"UP, DOWN ou DEGRADED agregado","examples":["UP"]},"checks":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Checks","description":"Status por componente (nome -> {status, details?})"}},"type":"object","required":["status"],"title":"ReadinessResponse","description":"Resposta do readiness probe."},"RefactorSuggestionModel":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"file_path":{"type":"string","title":"File Path"},"line_number":{"type":"integer","title":"Line Number"},"message":{"type":"string","title":"Message"}},"type":"object","required":["rule_id","file_path","line_number","message"],"title":"RefactorSuggestionModel","description":"Sugestao de refactor (espelho REST de RefactorSuggestion)."},"RefreshRequest":{"properties":{"source_id":{"title":"Source Id","type":"string","nullable":true},"category":{"title":"Category","type":"string","nullable":true},"refresh_all":{"type":"boolean","title":"Refresh All","default":false}},"type":"object","title":"RefreshRequest","description":"Request para POST /catalog/refresh."},"RefreshResultResponse":{"properties":{"sources_refreshed":{"type":"integer","title":"Sources Refreshed"},"total_objects":{"type":"integer","title":"Total Objects"},"total_changes":{"type":"integer","title":"Total Changes"},"source_results":{"items":{"$ref":"#/components/schemas/RefreshSourceResultResponse"},"type":"array","title":"Source Results"}},"type":"object","required":["sources_refreshed","total_objects","total_changes","source_results"],"title":"RefreshResultResponse","description":"Response para POST /catalog/refresh."},"RefreshSourceResultResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"status":{"type":"string","title":"Status"},"objects_found":{"type":"integer","title":"Objects Found"},"changes_detected":{"type":"integer","title":"Changes Detected"},"duration_seconds":{"type":"number","title":"Duration Seconds"}},"type":"object","required":["source_id","status","objects_found","changes_detected","duration_seconds"],"title":"RefreshSourceResultResponse","description":"Resultado de refresh de uma source individual."},"RefreshStatusResponse":{"properties":{"pipeline_name":{"type":"string","title":"Pipeline Name"},"found":{"type":"boolean","title":"Found"},"status":{"title":"Status","type":"string","nullable":true},"started_at":{"title":"Started At","type":"string","nullable":true},"finished_at":{"title":"Finished At","type":"string","nullable":true},"steps_completed":{"title":"Steps Completed","type":"integer","nullable":true},"steps_total":{"title":"Steps Total","type":"integer","nullable":true},"execution_time_seconds":{"title":"Execution Time Seconds","type":"number","nullable":true},"total_duration_seconds":{"title":"Total Duration Seconds","type":"number","nullable":true}},"type":"object","required":["pipeline_name","found"],"title":"RefreshStatusResponse","description":"Resposta do GET /report-serving/monitor/status."},"RegisterEventSourceRequest":{"properties":{"name":{"type":"string","title":"Name"},"source_type":{"$ref":"#/components/schemas/EventSourceType"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["name","source_type"],"title":"RegisterEventSourceRequest","description":"Request para POST /events/sources."},"RegisterEventSubscriptionRequest":{"properties":{"source_id":{"type":"string","title":"Source Id"},"pipeline_id":{"type":"string","title":"Pipeline Id"},"input_mapping":{"additionalProperties":{"type":"string"},"type":"object","title":"Input Mapping"},"max_retries":{"type":"integer","title":"Max Retries","default":3}},"type":"object","required":["source_id","pipeline_id"],"title":"RegisterEventSubscriptionRequest","description":"Request para POST /events/subscriptions."},"RegisterSchemaRequest":{"properties":{"name":{"type":"string","maxLength":128,"minLength":1,"title":"Name","description":"Nome unico do schema"},"schema_definition":{"additionalProperties":true,"type":"object","title":"Schema Definition","description":"Definicao com 'columns' (dict) e 'primary_key' (list)"},"version":{"title":"Version","description":"Versao (auto-incrementa se null)","type":"string","nullable":true}},"type":"object","required":["name","schema_definition"],"title":"RegisterSchemaRequest","description":"Request para registro de novo schema ou versao.\n\nArgs:\n    name: Nome unico do schema.\n    schema_definition: Definicao do schema com columns e primary_key.\n    version: Versao do schema (auto-incrementa se None).\n\nExample:\n    ```json\n    {\n        \"name\": \"users_v1\",\n        \"schema_definition\": {\n            \"columns\": {\n                \"id\": {\"type\": \"INTEGER\", \"nullable\": false},\n                \"email\": {\"type\": \"VARCHAR\", \"nullable\": false},\n                \"name\": {\"type\": \"VARCHAR\", \"nullable\": true}\n            },\n            \"primary_key\": [\"id\"]\n        },\n        \"version\": null\n    }\n    ```"},"RegisterSchemaResponse":{"properties":{"schema_name":{"type":"string","title":"Schema Name"},"version":{"type":"string","title":"Version"},"columns_count":{"type":"integer","title":"Columns Count"}},"type":"object","required":["schema_name","version","columns_count"],"title":"RegisterSchemaResponse","description":"Response apos registro bem-sucedido de schema.\n\nArgs:\n    schema_name: Nome do schema registrado.\n    version: Versao registrada.\n    columns_count: Quantidade de colunas no schema."},"RegisterSourceRequest":{"properties":{"source_id":{"type":"string","title":"Source Id"},"source_category":{"type":"string","title":"Source Category"},"source_type":{"type":"string","title":"Source Type"},"connection_name":{"type":"string","title":"Connection Name"},"description":{"type":"string","title":"Description","default":""},"refresh_cron":{"title":"Refresh Cron","type":"string","nullable":true},"exclusion_patterns":{"items":{"type":"string"},"type":"array","title":"Exclusion Patterns","default":[]},"inclusion_patterns":{"items":{"type":"string"},"type":"array","title":"Inclusion Patterns","default":[]}},"type":"object","required":["source_id","source_category","source_type","connection_name"],"title":"RegisterSourceRequest","description":"Request para POST /catalog/sources."},"RegisterWebhookSubscriptionRequest":{"properties":{"target_url":{"type":"string","title":"Target Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"secret":{"title":"Secret","type":"string","nullable":true},"retry_max_attempts":{"title":"Retry Max Attempts","type":"integer","nullable":true},"retry_backoff_seconds":{"title":"Retry Backoff Seconds","type":"integer","nullable":true},"retry_exponential_backoff":{"title":"Retry Exponential Backoff","type":"boolean","nullable":true},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["target_url","events"],"title":"RegisterWebhookSubscriptionRequest","description":"Request para POST /webhooks/subscriptions."},"RegistryEndpointItem":{"properties":{"path":{"type":"string","title":"Path"},"method":{"type":"string","title":"Method"},"summary":{"type":"string","title":"Summary"}},"type":"object","required":["path","method","summary"],"title":"RegistryEndpointItem","description":"Item retornado em list_endpoints."},"RegistryResponse":{"properties":{"total":{"type":"integer","title":"Total"},"groups":{"additionalProperties":{"items":{"$ref":"#/components/schemas/RegistryEndpointItem"},"type":"array"},"type":"object","title":"Groups"}},"type":"object","required":["total","groups"],"title":"RegistryResponse","description":"Resposta de /registry."},"RemoveTagRequest":{"properties":{"source_id":{"type":"string","title":"Source Id"},"object_path":{"type":"string","title":"Object Path"},"tag":{"type":"string","title":"Tag"}},"type":"object","required":["source_id","object_path","tag"],"title":"RemoveTagRequest","description":"Request para DELETE /catalog/tags."},"ReportRequestDTO":{"properties":{"linker_id":{"type":"string","title":"Linker Id"},"output_dir":{"type":"string","title":"Output Dir","default":"linkage_reports"},"report_types":{"title":"Report Types","items":{"type":"string"},"type":"array","nullable":true},"sample_pairs":{"type":"integer","title":"Sample Pairs","default":5},"match_threshold":{"title":"Match Threshold","type":"number","nullable":true},"tf_column":{"type":"string","title":"Tf Column","default":""},"model_path":{"type":"string","title":"Model Path","default":""},"tables":{"items":{"type":"string"},"type":"array","title":"Tables","default":[]}},"type":"object","required":["linker_id"],"title":"ReportRequestDTO","description":"Request canonico para geracao de reports HTML do Splink."},"ReportResponseDTO":{"properties":{"reports_generated":{"additionalProperties":{"type":"string"},"type":"object","title":"Reports Generated","default":{}},"total_files":{"type":"integer","title":"Total Files","default":0},"output_dir":{"type":"string","title":"Output Dir","default":""}},"type":"object","title":"ReportResponseDTO","description":"Response canonica da geracao de reports HTML do Splink."},"ReportSnapshotResponse":{"properties":{"id":{"type":"string","title":"Id"},"template_id":{"type":"string","title":"Template Id"},"format":{"type":"string","enum":["pdf","excel","html"],"title":"Format"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"size_bytes":{"type":"integer","title":"Size Bytes"},"download_url":{"type":"string","title":"Download Url"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["id","template_id","format","created_at","size_bytes","download_url","tenant_id"],"title":"ReportSnapshotResponse","description":"Metadados de um snapshot persistido."},"RequestEmailChangeRequest":{"properties":{"new_email":{"type":"string","minLength":3,"title":"New Email","description":"Novo e-mail primario desejado"}},"type":"object","required":["new_email"],"title":"RequestEmailChangeRequest","description":"Request para iniciar a troca de e-mail (envia token ao novo e-mail)."},"RetryDLQResponse":{"properties":{"retried_count":{"type":"integer","title":"Retried Count"}},"type":"object","required":["retried_count"],"title":"RetryDLQResponse","description":"Resultado do POST /events/dlq/retry."},"RetryPolicyResponse":{"properties":{"max_attempts":{"type":"integer","title":"Max Attempts"},"backoff_seconds":{"type":"integer","title":"Backoff Seconds"},"exponential_backoff":{"type":"boolean","title":"Exponential Backoff"}},"type":"object","required":["max_attempts","backoff_seconds","exponential_backoff"],"title":"RetryPolicyResponse","description":"Representacao da politica de retry."},"RevokeAllResponse":{"properties":{"revoked_count":{"type":"integer","minimum":0.0,"title":"Revoked Count","description":"Numero de tokens vivos revogados na operacao"}},"type":"object","required":["revoked_count"],"title":"RevokeAllResponse","description":"Resultado da revogacao em massa (numero de tokens vivos revogados)."},"RevokeKeyResponse":{"properties":{"key_id":{"type":"string","title":"Key Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["key_id","status"],"title":"RevokeKeyResponse","description":"Resposta de revogacao de API key."},"RuleResultResponse":{"properties":{"rule_name":{"type":"string","title":"Rule Name"},"rule_type":{"type":"string","title":"Rule Type"},"passed":{"type":"boolean","title":"Passed"},"violations":{"type":"integer","title":"Violations","default":0},"details":{"type":"string","title":"Details","default":""}},"type":"object","required":["rule_name","rule_type","passed"],"title":"RuleResultResponse","description":"Resultado de uma regra individual na response.\n\nAttributes:\n    rule_name: Nome da regra.\n    rule_type: Tipo da regra.\n    passed: Se a regra passou.\n    violations: Numero de violacoes.\n    details: Detalhes adicionais."},"RunPipelineRequest":{"properties":{"config_path":{"title":"Config Path","description":"Referencia do YAML dentro do root governado pelo servidor (ADR-065 R2 forma (c)); exige co-location declarada","type":"string","minLength":1,"nullable":true},"definition_name":{"title":"Definition Name","description":"Nome da definicao publicada no registro do servidor (ADR-065 R2 forma (b)); funciona em qualquer topologia","type":"string","minLength":1,"nullable":true},"definition_version":{"title":"Definition Version","description":"Versao SemVer da definicao; ausente usa a mais recente","type":"string","minLength":1,"nullable":true},"pipeline_name":{"title":"Pipeline Name","type":"string","nullable":true},"verbose":{"type":"boolean","title":"Verbose","default":false},"show_lineage":{"type":"boolean","title":"Show Lineage","default":false},"env_overrides":{"additionalProperties":{"type":"string"},"type":"object","title":"Env Overrides"},"var_overrides":{"additionalProperties":{"type":"string"},"type":"object","title":"Var Overrides"},"track_performance":{"type":"boolean","title":"Track Performance","default":false},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","title":"RunPipelineRequest","description":"Request para submeter execucao assincrona de pipeline.\n\nExatamente UMA origem, das duas formas legitimas de referenciar o documento:\na referencia confinada ao root governado pelo servidor (forma (c)) ou a\nidentidade da definicao publicada no registro (forma (b)). Conteudo inline\ncontinua recusado: a execucao resolve referencias relativas a partir do\ndiretorio do documento, entao ela exige raiz materializada em disco.\n\nAttributes:\n    config_path: Referencia do YAML dentro do root governado pelo servidor.\n    definition_name: Nome da definicao publicada no registro do tenant.\n    definition_version: Versao SemVer da definicao; ausente usa a mais recente.\n    pipeline_name: Nome do pipeline se YAML define multiplos.\n    verbose: Habilitar log detalhado.\n    show_lineage: Rastrear lineage.\n    env_overrides: Overrides de variaveis de ambiente.\n    var_overrides: Overrides de variaveis do pipeline.\n    track_performance: Rastrear metricas de performance.\n    dry_run: Simular execucao sem alterar dados."},"RunPipelineResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"pipeline_name":{"type":"string","title":"Pipeline Name","default":""},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["job_id","status"],"title":"RunPipelineResponse","description":"Response de submissao de execucao de pipeline.\n\nAttributes:\n    job_id: ID do job assincrono para tracking via GET /jobs/{job_id}.\n    status: Status inicial (queued).\n    pipeline_name: Nome do pipeline submetido.\n    message: Mensagem de status."},"SaveQueryRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Nome da query"},"description":{"type":"string","maxLength":1000,"title":"Description","description":"Descricao","default":""},"sql":{"type":"string","title":"Sql","description":"Corpo SQL da query"}},"type":"object","required":["name","sql"],"title":"SaveQueryRequest","description":"Request para salvar query nos favoritos.\n\nArgs:\n    name: Nome descritivo da query salva.\n    description: Descricao opcional da query.\n    sql: Corpo SQL da query."},"SaveQueryResponse":{"properties":{"query_id":{"type":"string","title":"Query Id"}},"type":"object","required":["query_id"],"title":"SaveQueryResponse","description":"Response com ID da query salva.\n\nArgs:\n    query_id: Identificador unico da query salva."},"SavedQuery":{"properties":{"query_id":{"type":"string","title":"Query Id"},"name":{"type":"string","title":"Name","default":""},"description":{"type":"string","title":"Description","default":""},"sql":{"type":"string","title":"Sql","default":""},"tenant_id":{"type":"string","title":"Tenant Id","default":""},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"owner_id":{"title":"Owner Id","description":"user_id do dono do recurso (owner tem precedencia sobre grant).","type":"string","nullable":true},"workspace_id":{"title":"Workspace Id","description":"Workspace que contem a query (heranca de acesso).","type":"string","nullable":true}},"type":"object","title":"SavedQuery","description":"Query salva/favorita por um tenant (imutavel).\n\nArgs:\n    query_id: Identificador unico da query salva.\n    name: Nome descritivo.\n    description: Descricao opcional.\n    sql: Corpo SQL.\n    tenant_id: Tenant proprietario.\n    created_at: Timestamp de criacao.\n    updated_at: Timestamp da ultima atualizacao."},"ScanRequest":{"properties":{"force":{"type":"boolean","title":"Force","default":false}},"type":"object","title":"ScanRequest","description":"Request para POST /watchdog/scan."},"ScanResultResponse":{"properties":{"total_running":{"type":"integer","title":"Total Running"},"healthy":{"type":"integer","title":"Healthy"},"slow":{"type":"integer","title":"Slow"},"stuck":{"type":"integer","title":"Stuck"},"dead":{"type":"integer","title":"Dead"},"scanned_at":{"type":"string","format":"date-time","title":"Scanned At"}},"type":"object","required":["total_running","healthy","slow","stuck","dead","scanned_at"],"title":"ScanResultResponse","description":"Response para POST /watchdog/scan."},"ScanSecurityRequest":{"properties":{"code":{"type":"string","minLength":1,"title":"Code","description":"Codigo Python a scanear"},"file_path":{"type":"string","title":"File Path","description":"Rotulo do arquivo (telemetria)","default":"inline.py"},"checks":{"items":{"type":"string"},"type":"array","title":"Checks","description":"Checks: sql_injection, secrets, dangerous_calls","default":["sql_injection","secrets"]}},"type":"object","required":["code"],"title":"ScanSecurityRequest","description":"Body de POST /code/scan."},"ScanSecurityResponse":{"properties":{"sql_injection":{"items":{"$ref":"#/components/schemas/SecurityIssueModel"},"type":"array","title":"Sql Injection"},"secrets":{"items":{"$ref":"#/components/schemas/SecurityIssueModel"},"type":"array","title":"Secrets"},"dangerous_calls":{"items":{"$ref":"#/components/schemas/SecurityIssueModel"},"type":"array","title":"Dangerous Calls"},"total_issues":{"type":"integer","title":"Total Issues"},"is_safe":{"type":"boolean","title":"Is Safe"}},"type":"object","required":["sql_injection","secrets","dangerous_calls","total_issues","is_safe"],"title":"ScanSecurityResponse","description":"Response de POST /code/scan."},"ScheduleExecutionResponse":{"properties":{"execution_id":{"type":"string","title":"Execution Id"},"schedule_id":{"type":"string","title":"Schedule Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"status":{"type":"string","enum":["running","completed","failed"],"title":"Status"},"finished_at":{"title":"Finished At","type":"string","format":"date-time","nullable":true},"error_message":{"title":"Error Message","type":"string","nullable":true},"steps_completed":{"title":"Steps Completed","type":"integer","nullable":true},"steps_total":{"title":"Steps Total","type":"integer","nullable":true},"execution_time_seconds":{"title":"Execution Time Seconds","type":"number","nullable":true}},"type":"object","required":["execution_id","schedule_id","tenant_id","started_at","status"],"title":"ScheduleExecutionResponse","description":"Representacao de uma execucao de schedule."},"ScheduleResponse":{"properties":{"id":{"type":"string","title":"Id"},"pipeline_id":{"type":"string","title":"Pipeline Id"},"cron":{"type":"string","title":"Cron"},"status":{"type":"string","enum":["active","paused","disabled"],"title":"Status"},"next_run_at":{"type":"string","format":"date-time","title":"Next Run At"},"last_run_at":{"title":"Last Run At","type":"string","format":"date-time","nullable":true},"created_at":{"title":"Created At","type":"string","format":"date-time","nullable":true},"updated_at":{"title":"Updated At","type":"string","format":"date-time","nullable":true},"tenant_id":{"type":"string","title":"Tenant Id"},"config_path":{"title":"Config Path","type":"string","nullable":true},"trigger_type":{"type":"string","title":"Trigger Type","default":"cron"},"retry_policy":{"$ref":"#/components/schemas/RetryPolicyResponse","nullable":true}},"type":"object","required":["id","pipeline_id","cron","status","next_run_at","tenant_id"],"title":"ScheduleResponse","description":"Representacao de um schedule na resposta da API."},"ScheduleSummary":{"properties":{"total_active":{"type":"integer","title":"Total Active","default":0},"total_paused":{"type":"integer","title":"Total Paused","default":0},"next_run":{"title":"Next Run","type":"string","format":"date-time","nullable":true},"available":{"type":"boolean","title":"Available","default":false}},"type":"object","title":"ScheduleSummary","description":"Sumario de schedules.\n\nArgs:\n    total_active: Schedules ativos.\n    total_paused: Schedules pausados.\n    next_run: Proximo schedule a executar.\n    available: True quando os contadores refletem agregacao real; False quando\n        ainda nao computados (distingue \"0 real\" de \"indisponivel\")."},"SchedulerStatusResponse":{"properties":{"is_running":{"type":"boolean","title":"Is Running"},"total_schedules":{"type":"integer","title":"Total Schedules"},"active_schedules":{"type":"integer","title":"Active Schedules"},"paused_schedules":{"type":"integer","title":"Paused Schedules"}},"type":"object","required":["is_running","total_schedules","active_schedules","paused_schedules"],"title":"SchedulerStatusResponse","description":"Status do scheduler (APScheduler)."},"SchemaColumnResponse":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"nullable":{"type":"boolean","title":"Nullable","default":true}},"type":"object","required":["name","type"],"title":"SchemaColumnResponse","description":"Representacao de coluna em responses.\n\nAttributes:\n    name: Nome da coluna.\n    type: Tipo da coluna.\n    nullable: Se coluna aceita NULL."},"SchemaDetailResponse":{"properties":{"name":{"type":"string","title":"Name"},"version":{"type":"string","title":"Version"},"columns":{"items":{"$ref":"#/components/schemas/SchemaColumnResponse"},"type":"array","title":"Columns"},"primary_key":{"items":{"type":"string"},"type":"array","title":"Primary Key"},"tenant_id":{"type":"string","title":"Tenant Id","default":"default"}},"type":"object","required":["name","version"],"title":"SchemaDetailResponse","description":"Response com detalhes completos de um schema.\n\nAttributes:\n    name: Nome do schema.\n    version: Versao do schema.\n    columns: Lista de colunas com tipo e nullable.\n    primary_key: Lista de colunas da chave primaria.\n    tenant_id: ID do tenant dono do schema."},"SchemaDiffRequest":{"properties":{"baseline":{"type":"string","minLength":1,"title":"Baseline","description":"Nome do schema baseline"},"target":{"type":"string","minLength":1,"title":"Target","description":"Nome do schema target"}},"type":"object","required":["baseline","target"],"title":"SchemaDiffRequest","description":"Request para comparacao de dois schemas registrados.\n\nAttributes:\n    baseline: Nome do schema baseline.\n    target: Nome do schema target.\n\nExample:\n    ```json\n    {\n        \"baseline\": \"users_v1\",\n        \"target\": \"users_v2\"\n    }\n    ```"},"SchemaDiffResponse":{"properties":{"schema_a":{"type":"string","title":"Schema A"},"schema_b":{"type":"string","title":"Schema B"},"has_changes":{"type":"boolean","title":"Has Changes"},"has_breaking_changes":{"type":"boolean","title":"Has Breaking Changes"},"added":{"items":{"type":"string"},"type":"array","title":"Added"},"removed":{"items":{"type":"string"},"type":"array","title":"Removed"},"modified":{"items":{"$ref":"#/components/schemas/ColumnDiffResponse"},"type":"array","title":"Modified"}},"type":"object","required":["schema_a","schema_b","has_changes","has_breaking_changes"],"title":"SchemaDiffResponse","description":"Response com resultado da comparacao de schemas.\n\nAttributes:\n    schema_a: Nome do primeiro schema.\n    schema_b: Nome do segundo schema.\n    has_changes: Se ha diferencas entre os schemas.\n    has_breaking_changes: Se ha mudancas breaking (colunas removidas).\n    added: Nomes de colunas adicionadas no target.\n    removed: Nomes de colunas removidas do baseline.\n    modified: Colunas com tipo alterado."},"SchemaErrorResponse":{"properties":{"error_type":{"type":"string","title":"Error Type"},"expected":{"type":"string","title":"Expected"},"actual":{"type":"string","title":"Actual"},"column_name":{"title":"Column Name","type":"string","nullable":true}},"type":"object","required":["error_type","expected","actual"],"title":"SchemaErrorResponse","description":"Espelho REST de GatewaySchemaError (fronteira do gateway)."},"SchemaListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SchemaSummaryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":20},"offset":{"type":"integer","title":"Offset","default":0},"has_next":{"type":"boolean","title":"Has Next","default":false}},"type":"object","title":"SchemaListResponse","description":"Response paginada de listagem de schemas.\n\nAttributes:\n    items: Lista de schemas na pagina atual.\n    total: Total de schemas.\n    limit: Limite aplicado.\n    offset: Offset aplicado.\n    has_next: Se ha proxima pagina."},"SchemaMatchRequest":{"properties":{"source_table":{"type":"string","minLength":1,"title":"Source Table","description":"Nome da tabela source"},"target_table":{"type":"string","minLength":1,"title":"Target Table","description":"Nome da tabela target"},"threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Threshold","description":"Threshold de similaridade","default":0.8}},"type":"object","required":["source_table","target_table"],"title":"SchemaMatchRequest","description":"Request para matching de schemas entre tabelas.\n\nAttributes:\n    source_table: Nome da tabela source.\n    target_table: Nome da tabela target.\n    threshold: Threshold minimo de similaridade (0.0 a 1.0).\n\nExample:\n    ```json\n    {\n        \"source_table\": \"raw_customers\",\n        \"target_table\": \"dim_customers\",\n        \"threshold\": 0.7\n    }\n    ```"},"SchemaMatchResponse":{"properties":{"matches":{"items":{"$ref":"#/components/schemas/MatchMappingResponse"},"type":"array","title":"Matches"},"unmatched_source":{"items":{"type":"string"},"type":"array","title":"Unmatched Source"},"unmatched_target":{"items":{"type":"string"},"type":"array","title":"Unmatched Target"},"execution_time_ms":{"type":"number","title":"Execution Time Ms","default":0.0}},"type":"object","title":"SchemaMatchResponse","description":"Response com mapeamentos encontrados entre tabelas.\n\nAttributes:\n    matches: Lista de mapeamentos com score e metodo.\n    unmatched_source: Colunas source sem match.\n    unmatched_target: Colunas target sem match.\n    execution_time_ms: Tempo de execucao em milissegundos."},"SchemaSuggestionModel":{"properties":{"kind":{"type":"string","title":"Kind","examples":["table","column"]},"name":{"type":"string","title":"Name","examples":["fact_vendas"]},"qualified":{"type":"string","title":"Qualified","examples":["main.fact_vendas"]}},"type":"object","required":["kind","name","qualified"],"title":"SchemaSuggestionModel","description":"Item de autocomplete (tabela ou coluna) do schema do tenant.\n\nArgs:\n    kind: Tipo do objeto ('table' ou 'column').\n    name: Nome curto para insercao no editor.\n    qualified: Nome qualificado (schema.table ou schema.table.column)."},"SchemaSummaryResponse":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"SchemaSummaryResponse","description":"Resumo de schema para listagem.\n\nAttributes:\n    name: Nome do schema."},"SchemaValidateRequest":{"properties":{"schema_name":{"type":"string","minLength":1,"title":"Schema Name","description":"Nome do schema registrado"},"table_name":{"type":"string","minLength":1,"title":"Table Name","description":"Nome da tabela DuckDB"},"version":{"title":"Version","description":"Versao do schema (null para ultima)","type":"string","nullable":true}},"type":"object","required":["schema_name","table_name"],"title":"SchemaValidateRequest","description":"Request para validacao de tabela contra schema registrado.\n\nAttributes:\n    schema_name: Nome do schema registrado.\n    table_name: Nome da tabela DuckDB a validar.\n    version: Versao do schema (None para ultima).\n\nExample:\n    ```json\n    {\n        \"schema_name\": \"users_v1\",\n        \"table_name\": \"staging_users\",\n        \"version\": null\n    }\n    ```"},"SchemaValidateResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"schema_name":{"type":"string","title":"Schema Name"},"errors":{"items":{"$ref":"#/components/schemas/ValidationErrorResponse"},"type":"array","title":"Errors"},"rows_checked":{"type":"integer","title":"Rows Checked","default":0}},"type":"object","required":["valid","schema_name"],"title":"SchemaValidateResponse","description":"Response com resultado da validacao de dados contra schema.\n\nAttributes:\n    valid: True se dados sao compativeis com schema.\n    schema_name: Nome do schema usado na validacao.\n    errors: Lista de violacoes encontradas.\n    rows_checked: Numero de linhas verificadas."},"SchemaVersionsResponse":{"properties":{"name":{"type":"string","title":"Name"},"versions":{"items":{"type":"string"},"type":"array","title":"Versions"},"latest":{"title":"Latest","type":"string","nullable":true}},"type":"object","required":["name"],"title":"SchemaVersionsResponse","description":"Response com as versoes registradas de um schema.\n\nAttributes:\n    name: Nome do schema.\n    versions: Versoes em ordem de registro (asc).\n    latest: Versao mais recente (None nunca ocorre em schema existente)."},"SearchResultResponse":{"properties":{"objects":{"items":{"$ref":"#/components/schemas/CatalogObjectResponse"},"type":"array","title":"Objects"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["objects","total_count"],"title":"SearchResultResponse","description":"Response para GET /catalog/search."},"SecurityIssueModel":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"line_number":{"type":"integer","title":"Line Number"},"severity":{"type":"string","enum":["low","medium","high","critical"],"title":"Severity"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"suggestion":{"type":"string","title":"Suggestion"}},"type":"object","required":["rule_id","line_number","severity","title","description","suggestion"],"title":"SecurityIssueModel","description":"Vulnerabilidade detectada (espelho REST de SecurityIssue)."},"SemVer":{"properties":{"major":{"type":"integer","title":"Major"},"minor":{"type":"integer","title":"Minor"},"patch":{"type":"integer","title":"Patch"},"pre_release":{"title":"Pre Release","type":"string","nullable":true}},"additionalProperties":false,"type":"object","required":["major","minor","patch"],"title":"SemVer","description":"Versao semantica imutavel (major.minor.patch[-pre_release]).\n\nAtributos:\n    major: Versao principal.\n    minor: Versao secundaria.\n    patch: Versao de correcao.\n    pre_release: Sufixo pre-release opcional (ex: \"alpha.1\", \"rc.2\")."},"SessionListResponse":{"properties":{"sessions":{"items":{"$ref":"#/components/schemas/SessionView"},"type":"array","title":"Sessions","description":"Sessoes ativas (uma por session_id vivo)"}},"type":"object","title":"SessionListResponse","description":"Lista das sessoes ativas do usuario autenticado."},"SessionRefreshRequest":{"properties":{"refresh_token":{"type":"string","minLength":1,"format":"password","title":"Refresh Token","description":"Refresh OPACO prefixado por tenant, obtido no login","writeOnly":true,"examples":["corp:Zm9vYmFyMTIzNDU2Nzg5MA"]}},"type":"object","required":["refresh_token"],"title":"SessionRefreshRequest","description":"Request de refresh: refresh OPACO prefixado por tenant (`{tenant_id}:{opaco}`)."},"SessionTokenResponse":{"properties":{"access_token":{"type":"string","format":"password","title":"Access Token","description":"JWT de acesso (com claim sid)","writeOnly":true},"refresh_token":{"type":"string","format":"password","title":"Refresh Token","description":"Refresh OPACO prefixado por tenant (`{tenant_id}:{opaco}`)","writeOnly":true},"token_type":{"type":"string","title":"Token Type","description":"Tipo do token","default":"bearer"},"expires_in":{"type":"integer","minimum":0.0,"title":"Expires In","description":"TTL do access token em segundos"},"user_id":{"type":"string","title":"User Id","description":"ID do usuario autenticado","default":""},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID do tenant","default":""},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Permissoes re-resolvidas no refresh"}},"type":"object","required":["access_token","refresh_token","expires_in"],"title":"SessionTokenResponse","description":"Par de tokens emitido pelo refresh (access JWT + refresh OPACO prefixado)."},"SessionView":{"properties":{"session_id":{"type":"string","title":"Session Id","description":"Identificador da sessao"},"user_id":{"type":"string","title":"User Id","description":"Dono da sessao"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Quando a sessao foi criada (UTC)"},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"Expiracao do refresh corrente (UTC)"},"last_used_at":{"title":"Last Used At","description":"Ultimo uso/rotacao (UTC), None se nunca rotacionado","type":"string","format":"date-time","nullable":true},"last_used_ip":{"title":"Last Used Ip","description":"IP do ultimo uso","type":"string","nullable":true},"user_agent":{"title":"User Agent","description":"User agent na emissao","type":"string","nullable":true}},"type":"object","required":["session_id","user_id","created_at","expires_at"],"title":"SessionView","description":"Projecao de uma sessao ativa para listagem (sem hashes nem segredos)."},"SetBudgetRequest":{"properties":{"monthly_limit_cents":{"type":"integer","exclusiveMinimum":0.0,"title":"Monthly Limit Cents","description":"Limite mensal em cents"},"soft_alert_pct":{"type":"integer","maximum":99.0,"minimum":1.0,"title":"Soft Alert Pct","description":"% para alerta de aviso","default":80},"hard_stop_pct":{"title":"Hard Stop Pct","description":"None = nunca para; >0 = bloqueia em N% do limite mensal","type":"integer","nullable":true},"alert_webhook_ref":{"title":"Alert Webhook Ref","type":"string","nullable":true}},"type":"object","required":["monthly_limit_cents"],"title":"SetBudgetRequest","description":"Request para PUT /cost/budget/{tenant_id}."},"SnapshotListResponse":{"properties":{"snapshots":{"items":{"$ref":"#/components/schemas/ReportSnapshotResponse"},"type":"array","title":"Snapshots"},"total_count":{"type":"integer","title":"Total Count","default":0},"limit":{"type":"integer","title":"Limit","default":50},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"SnapshotListResponse","description":"Pagina de snapshots persistidos do tenant."},"SnapshotRequest":{"properties":{"model_id":{"type":"string","title":"Model Id"},"source":{"type":"string","title":"Source"}},"type":"object","required":["model_id","source"],"title":"SnapshotRequest","description":"Request para POST /powerbi/snapshot (snapshot versionado de modelo)."},"SourceAuthority":{"type":"string","enum":["internal_raw","external_curated"],"title":"SourceAuthority","description":"Autoridade de proveniência de um asset/fonte.\n\nINTERNAL_RAW: cru extraído pelo Sindri direto da origem.\nEXTERNAL_CURATED: curado por system-of-record externo (Datasphere, BW)."},"SourceResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"source_category":{"type":"string","title":"Source Category"},"source_type":{"type":"string","title":"Source Type"},"connection_name":{"type":"string","title":"Connection Name"},"description":{"type":"string","title":"Description"},"total_objects":{"type":"integer","title":"Total Objects"},"last_refresh_at":{"title":"Last Refresh At","type":"string","format":"date-time","nullable":true}},"type":"object","required":["source_id","source_category","source_type","connection_name","description","total_objects","last_refresh_at"],"title":"SourceResponse","description":"Response para source individual."},"SpatialAggregateCommand":{"properties":{"table_name":{"type":"string","title":"Table Name"},"h3_column":{"type":"string","title":"H3 Column","default":"h3_index"},"metrics":{"additionalProperties":{"type":"string"},"type":"object","title":"Metrics"},"group_columns":{"items":{"type":"string"},"type":"array","title":"Group Columns"},"output_table":{"type":"string","title":"Output Table","default":"h3_aggregated"}},"type":"object","required":["table_name"],"title":"SpatialAggregateCommand","description":"Comando para agregar metricas por celula H3."},"SpatialAggregateResult":{"properties":{"output_table":{"type":"string","title":"Output Table"},"distinct_cells":{"type":"integer","title":"Distinct Cells"},"total_rows":{"type":"integer","title":"Total Rows"}},"type":"object","required":["output_table","distinct_cells","total_rows"],"title":"SpatialAggregateResult","description":"Resultado da agregacao espacial."},"StatusResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Status agregado","examples":["UP"]},"version":{"type":"string","title":"Version","description":"Versao do SDK","examples":["1.0.0"]},"uptime_seconds":{"type":"number","title":"Uptime Seconds","description":"Uptime em segundos","examples":[86400.0]},"checks":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Checks","description":"Status por componente (to_dict do HealthStatus)"},"active_bounded_contexts":{"items":{"type":"string"},"type":"array","title":"Active Bounded Contexts","description":"BCs REST registrados","examples":[["scheduling","jobs"]]}},"type":"object","required":["status","version","uptime_seconds"],"title":"StatusResponse","description":"Resposta detalhada de status do sistema."},"StepUpRequest":{"properties":{"kind":{"type":"string","enum":["totp","webauthn","recovery"],"title":"Kind","description":"Tipo do fator MFA a revalidar."},"factor_id":{"type":"string","title":"Factor Id","description":"ID do fator MFA ativo. Obrigatorio para `totp` e `webauthn`; ignorado para `recovery`.","default":""},"code":{"type":"string","title":"Code","description":"Codigo TOTP (6 digitos) ou recovery code. Obrigatorio para `totp` e `recovery`.","default":""},"state":{"type":"string","title":"State","description":"Estado opaco do challenge WebAuthn. Obrigatorio para `webauthn`.","default":""},"response_json":{"type":"string","title":"Response Json","description":"`AuthenticatorAssertionResponse` serializado. Obrigatorio para `webauthn`.","default":""}},"type":"object","required":["kind"],"title":"StepUpRequest","description":"Request do step-up: fator + credencial MFA.","examples":[{"code":"123456","factor_id":"factor_abc","kind":"totp"},{"factor_id":"factor_xyz","kind":"webauthn","response_json":"{...}","state":"opaque-state-from-challenge"},{"code":"ABCD-EFGH-1234","kind":"recovery"}]},"StepUpResponse":{"properties":{"access_token":{"type":"string","format":"password","title":"Access Token","description":"Novo access JWT (claim sid + step_up_verified_at).","writeOnly":true},"token_type":{"type":"string","title":"Token Type","description":"Tipo do token.","default":"bearer"},"expires_in":{"type":"integer","minimum":0.0,"title":"Expires In","description":"TTL do access token em segundos (5 min por default)."},"step_up_ttl_seconds":{"type":"integer","minimum":0.0,"title":"Step Up Ttl Seconds","description":"TTL do claim `step_up_verified_at` (AuthSettings.step_up_ttl_seconds)."}},"type":"object","required":["access_token","expires_in","step_up_ttl_seconds"],"title":"StepUpResponse","description":"Resposta do step-up: novo access JWT curto com claim `step_up_verified_at`."},"StorageConnectionInfo":{"properties":{"name":{"type":"string","title":"Name"},"storage_type":{"type":"string","title":"Storage Type"},"status":{"type":"string","title":"Status"},"config_summary":{"additionalProperties":true,"type":"object","title":"Config Summary"},"created_at":{"title":"Created At","type":"string","format":"date-time","nullable":true}},"type":"object","required":["name","storage_type","status"],"title":"StorageConnectionInfo","description":"Informacoes de uma conexao de storage registrada.\n\nSecrets nunca aparecem neste model — config_summary retorna\napenas campos nao-sensiveis ou mascarados com '***'.\n\nAttributes:\n    name: Nome unico da conexao no tenant.\n    storage_type: Tipo do backend (s3, azure, gcs, local).\n    status: Estado da conexao (connected, persisted).\n    config_summary: Config sem secrets (campos sensiveis mascarados).\n    created_at: Data de registro."},"StorageConnectionListResponse":{"properties":{"connections":{"items":{"$ref":"#/components/schemas/StorageConnectionInfo"},"type":"array","title":"Connections"},"total_count":{"type":"integer","title":"Total Count","default":0}},"type":"object","title":"StorageConnectionListResponse","description":"Response de listagem de conexoes de storage.\n\nAttributes:\n    connections: Lista de conexoes registradas.\n    total_count: Total de conexoes."},"StorageConnectionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"name":{"type":"string","title":"Name","default":""},"storage_type":{"type":"string","title":"Storage Type","default":""},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["success"],"title":"StorageConnectionResponse","description":"Response de operacao em conexao de storage (criar, atualizar, remover).\n\nAttributes:\n    success: True se operacao bem-sucedida.\n    name: Nome da conexao.\n    storage_type: Tipo do backend.\n    message: Mensagem descritiva."},"StorageInsightsResponse":{"properties":{"total_download_seconds":{"type":"number","minimum":0.0,"title":"Total Download Seconds","default":0.0},"total_upload_seconds":{"type":"number","minimum":0.0,"title":"Total Upload Seconds","default":0.0},"total_bytes_downloaded":{"type":"integer","minimum":0.0,"title":"Total Bytes Downloaded","default":0},"total_bytes_uploaded":{"type":"integer","minimum":0.0,"title":"Total Bytes Uploaded","default":0},"cache_hits":{"type":"integer","minimum":0.0,"title":"Cache Hits","default":0},"cache_misses":{"type":"integer","minimum":0.0,"title":"Cache Misses","default":0},"cache_hit_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Cache Hit Rate","default":0.0},"operations_count":{"type":"integer","minimum":0.0,"title":"Operations Count","default":0}},"type":"object","title":"StorageInsightsResponse","description":"Metricas agregadas de operacoes de storage.\n\nBoundary Pydantic model para o endpoint GET /storage/metrics.\nMapeado a partir de StorageInsights (_core), sem chamar to_dict().\n\nAttributes:\n    total_download_seconds: Tempo total de downloads em segundos.\n    total_upload_seconds: Tempo total de uploads em segundos.\n    total_bytes_downloaded: Total de bytes baixados.\n    total_bytes_uploaded: Total de bytes enviados.\n    cache_hits: Numero de acertos de cache.\n    cache_misses: Numero de falhas de cache.\n    cache_hit_rate: Taxa de acerto de cache (0.0 a 1.0).\n    operations_count: Total de operacoes registradas."},"StorageOperationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"file_path":{"type":"string","title":"File Path"},"bytes_transferred":{"type":"integer","title":"Bytes Transferred","default":0},"operation_type":{"type":"string","title":"Operation Type","default":""},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["success","file_path"],"title":"StorageOperationResponse","description":"Response de operacao de storage (upload, delete).\n\nAttributes:\n    success: True se operacao bem-sucedida.\n    file_path: Path do arquivo operado.\n    bytes_transferred: Bytes transferidos.\n    operation_type: Tipo da operacao.\n    metadata: Metadados adicionais."},"StorageProviderTypeInfo":{"properties":{"type_name":{"type":"string","title":"Type Name"},"display_name":{"type":"string","title":"Display Name"},"required_fields":{"items":{"type":"string"},"type":"array","title":"Required Fields"},"optional_fields":{"items":{"type":"string"},"type":"array","title":"Optional Fields"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["type_name","display_name"],"title":"StorageProviderTypeInfo","description":"Descricao de um tipo de storage provider disponivel.\n\nAttributes:\n    type_name: Chave do tipo (s3, azure, gcs, local).\n    display_name: Nome legivel para exibicao.\n    required_fields: Campos obrigatorios na config.\n    optional_fields: Campos opcionais na config.\n    description: Descricao do provider."},"StorageProviderTypesResponse":{"properties":{"providers":{"items":{"$ref":"#/components/schemas/StorageProviderTypeInfo"},"type":"array","title":"Providers"}},"type":"object","title":"StorageProviderTypesResponse","description":"Response de listagem de tipos de storage disponiveis.\n\nAttributes:\n    providers: Lista de tipos disponiveis."},"SubmitBackfillRequest":{"properties":{"pipeline_name":{"type":"string","minLength":1,"title":"Pipeline Name"},"config_path":{"type":"string","minLength":1,"title":"Config Path"},"window":{"$ref":"#/components/schemas/BackfillWindow"},"max_parallel":{"type":"integer","maximum":32.0,"minimum":1.0,"title":"Max Parallel","default":1},"backfill_id":{"title":"Backfill Id","type":"string","nullable":true},"extra_overrides":{"additionalProperties":{"type":"string"},"type":"object","title":"Extra Overrides"}},"type":"object","required":["pipeline_name","config_path","window"],"title":"SubmitBackfillRequest","description":"Request de submissao de backfill por janela temporal.\n\nA janela e o proprio VO do dominio: as invariantes (fim > inicio, datas\ntimezone-aware, limite de 5 anos) sao validadas na entrada e viram 422, sem\nduplicar a regra nesta camada.\n\nAttributes:\n    pipeline_name: Pipeline a reprocessar.\n    config_path: Path do YAML de configuracao.\n    window: Janela temporal com granularidade e variavel de particao.\n    max_parallel: Limite de particoes em paralelo.\n    backfill_id: Backfill existente para resume; None cria um novo.\n    extra_overrides: Variaveis adicionais injetadas em cada particao."},"SubmitPipelineRequest":{"properties":{"config_path":{"type":"string","minLength":1,"title":"Config Path","description":"Referencia do YAML dentro do territorio do tenant chamador; path absoluto e escape do territorio sao recusados"},"pipeline_name":{"title":"Pipeline Name","type":"string","nullable":true},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["config_path"],"title":"SubmitPipelineRequest","description":"Request para submeter pipeline como job async."},"SuggestRefactorRequest":{"properties":{"code":{"type":"string","minLength":1,"title":"Code","description":"Codigo Python a analisar"},"file_path":{"type":"string","title":"File Path","description":"Rotulo do arquivo (telemetria)","default":"inline.py"}},"type":"object","required":["code"],"title":"SuggestRefactorRequest","description":"Body de POST /code/refactor."},"SuggestRefactorResponse":{"properties":{"suggestions":{"items":{"$ref":"#/components/schemas/RefactorSuggestionModel"},"type":"array","title":"Suggestions"}},"type":"object","required":["suggestions"],"title":"SuggestRefactorResponse","description":"Response de POST /code/refactor."},"SystemHealth":{"properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"],"title":"Status","default":"healthy"},"duckdb_connected":{"type":"boolean","title":"Duckdb Connected","default":true},"storage_connected":{"type":"boolean","title":"Storage Connected","default":true},"uptime_seconds":{"type":"integer","title":"Uptime Seconds","default":0}},"type":"object","title":"SystemHealth","description":"Estado de saude do sistema.\n\nArgs:\n    status: Status geral (healthy, degraded, unhealthy).\n    duckdb_connected: Conexao DuckDB ativa.\n    storage_connected: Storage acessivel.\n    uptime_seconds: Tempo de atividade do servidor."},"SystemInfoResponse":{"properties":{"api_title":{"type":"string","title":"Api Title"},"api_version":{"type":"string","title":"Api Version"},"python_version":{"type":"string","title":"Python Version"},"platform":{"type":"string","title":"Platform"},"active_bounded_contexts":{"items":{"type":"string"},"type":"array","title":"Active Bounded Contexts"},"total_endpoints":{"type":"integer","title":"Total Endpoints"},"docs_url":{"type":"string","title":"Docs Url"},"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["api_title","api_version","python_version","platform","active_bounded_contexts","total_endpoints","docs_url","portal_url"],"title":"SystemInfoResponse","description":"Resposta de /info."},"SystemMetricsResponse":{"properties":{},"additionalProperties":true,"type":"object","title":"SystemMetricsResponse","description":"Resposta de /metrics (estrutura do collector — extra allow para campos dinâmicos)."},"TagResultResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"schema_name":{"type":"string","title":"Schema Name"},"object_name":{"type":"string","title":"Object Name"},"tags_applied":{"items":{"type":"string"},"type":"array","title":"Tags Applied"}},"type":"object","required":["source_id","schema_name","object_name","tags_applied"],"title":"TagResultResponse","description":"Response para POST/DELETE /catalog/tags."},"TemplateContentResponse":{"properties":{"template_id":{"type":"string","title":"Template Id"},"content":{"type":"string","title":"Content"},"format":{"type":"string","const":"yaml","title":"Format","default":"yaml"}},"type":"object","required":["template_id","content"],"title":"TemplateContentResponse","description":"Conteúdo textual de um template serializado em YAML."},"TemplateInfoResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description","default":""},"version":{"type":"string","title":"Version","default":""},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"component_types":{"items":{"type":"string"},"type":"array","title":"Component Types"},"size_bytes":{"type":"integer","title":"Size Bytes","default":0}},"type":"object","required":["name"],"title":"TemplateInfoResponse","description":"Metadata de template de report.\n\nAttributes:\n    name: Nome do template.\n    description: Descricao.\n    version: Versao.\n    tags: Tags de categorias.\n    component_types: Tipos de componentes usados.\n    size_bytes: Tamanho do template."},"TemplateListResponse":{"properties":{"templates":{"items":{"$ref":"#/components/schemas/TemplateInfoResponse"},"type":"array","title":"Templates"},"total_count":{"type":"integer","title":"Total Count","default":0}},"type":"object","title":"TemplateListResponse","description":"Response de listagem de templates.\n\nAttributes:\n    templates: Lista de templates.\n    total_count: Total disponivel."},"TemplateValidateRequest":{"properties":{"content":{"type":"string","minLength":1,"title":"Content","description":"Codigo fonte do template a validar"}},"type":"object","required":["content"],"title":"TemplateValidateRequest","description":"Payload HTTP para validacao de seguranca de um template Jinja2."},"TemplateValidateResponse":{"properties":{"is_valid":{"type":"boolean","title":"Is Valid"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"risk_level":{"type":"string","enum":["safe","low","medium","high"],"title":"Risk Level","default":"safe"}},"type":"object","required":["is_valid"],"title":"TemplateValidateResponse","description":"Resultado da validacao de seguranca de um template."},"TestChannelInlineRequest":{"properties":{"channel":{"$ref":"#/components/schemas/CreateChannelRequest"},"test_recipient":{"title":"Test Recipient","type":"string","nullable":true},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["channel"],"title":"TestChannelInlineRequest","description":"Request para testar canal antes de salvar (Dokploy-style)."},"TestChannelRequest":{"properties":{"test_recipient":{"title":"Test Recipient","type":"string","nullable":true},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","title":"TestChannelRequest","description":"Request para testar canal salvo."},"TraceRequest":{"properties":{"dataset":{"type":"string","maxLength":256,"minLength":1,"title":"Dataset","description":"Nome do dataset"},"depth":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Depth","description":"Profundidade maxima de busca","default":10}},"type":"object","required":["dataset"],"title":"TraceRequest","description":"Request para rastrear lineage upstream de um dataset.\n\nArgs:\n    dataset: Nome do dataset a rastrear.\n    depth: Profundidade maxima de busca (1-100, default 10)."},"TraceResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"sources":{"items":{"type":"string"},"type":"array","title":"Sources"},"transformations":{"items":{"type":"string"},"type":"array","title":"Transformations"},"pipelines":{"items":{"type":"string"},"type":"array","title":"Pipelines"},"depth":{"type":"integer","title":"Depth","default":0}},"type":"object","required":["dataset"],"title":"TraceResponse","description":"Response com resultado do rastreamento de lineage.\n\nArgs:\n    dataset: Dataset rastreado.\n    sources: Lista de datasets fonte (upstream).\n    transformations: Transformacoes aplicadas na cadeia.\n    pipelines: Pipelines que processaram o dataset.\n    depth: Profundidade maxima alcancada."},"TrackProfileRequest":{"properties":{"dataset":{"type":"string","title":"Dataset","description":"Nome do dataset a perfilar"}},"type":"object","required":["dataset"],"title":"TrackProfileRequest","description":"Request para profile tracking com historico via REST.\n\nAttributes:\n    dataset: Nome do dataset a perfilar."},"TrackProfileResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"snapshot_id":{"type":"string","title":"Snapshot Id"},"deviations":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Deviations"}},"type":"object","required":["dataset","snapshot_id"],"title":"TrackProfileResponse","description":"Response do profile tracking.\n\nAttributes:\n    dataset: Nome do dataset perfilado.\n    snapshot_id: ID do snapshot persistido.\n    deviations: Lista de desvios vs profile anterior."},"TranspileRequest":{"properties":{"source":{"type":"string","title":"Source"},"tables":{"title":"Tables","items":{"type":"string"},"type":"array","nullable":true}},"type":"object","required":["source"],"title":"TranspileRequest","description":"Request para POST /powerbi/transpile (transpilacao DAX->SQL)."},"TranspileResponse":{"properties":{"total_expressions":{"type":"integer","title":"Total Expressions"},"transpiled_count":{"type":"integer","title":"Transpiled Count"},"unsupported_count":{"type":"integer","title":"Unsupported Count"},"coverage_pct":{"type":"number","title":"Coverage Pct"},"executable_pct":{"type":"number","title":"Executable Pct"}},"type":"object","required":["total_expressions","transpiled_count","unsupported_count","coverage_pct","executable_pct"],"title":"TranspileResponse","description":"Response para POST /powerbi/transpile (cobertura da transpilacao)."},"UnreadCountResponse":{"properties":{"unread":{"type":"integer","title":"Unread","default":0}},"type":"object","title":"UnreadCountResponse","description":"Contagem de notificacoes nao lidas do usuario corrente."},"UnregisterSourceResponse":{"properties":{"source_id":{"type":"string","title":"Source Id"},"message":{"type":"string","title":"Message"}},"type":"object","required":["source_id","message"],"title":"UnregisterSourceResponse","description":"Response para DELETE /catalog/sources/{source_id}."},"UpdateChannelRequest":{"properties":{"name":{"title":"Name","type":"string","nullable":true},"config":{"title":"Config","additionalProperties":true,"type":"object","nullable":true},"secrets_ref":{"title":"Secrets Ref","type":"string","nullable":true},"active":{"title":"Active","type":"boolean","nullable":true}},"type":"object","title":"UpdateChannelRequest","description":"Request para atualizar canal existente."},"UpdateDashboardRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"type":"string","title":"Description","default":""},"layout":{"$ref":"#/components/schemas/DashboardLayoutSpec"}},"type":"object","required":["name"],"title":"UpdateDashboardRequest","description":"Request para atualizar dashboard.\n\nArgs:\n    name: Novo nome.\n    description: Nova descricao.\n    layout: Novo layout."},"UpdateGlobalWorkspaceDefaultsBody":{"properties":{"default_timezone":{"title":"Default Timezone","type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z][A-Za-z0-9_+/-]*$","nullable":true},"retention_days":{"title":"Retention Days","type":"integer","maximum":3650.0,"minimum":0.0,"nullable":true},"default_datasource_id":{"title":"Default Datasource Id","description":"Datasource default de plataforma","type":"string","nullable":true},"default_config_path":{"title":"Default Config Path","description":"Path de config default de plataforma","type":"string","nullable":true},"features":{"title":"Features","description":"Feature flags default de plataforma","additionalProperties":{"type":"boolean"},"type":"object","nullable":true}},"type":"object","title":"UpdateGlobalWorkspaceDefaultsBody","description":"Body de atualizacao parcial dos defaults globais de plataforma.\n\nCampo ausente/None preserva o valor corrente (merge parcial no use case)."},"UpdateProfileRequest":{"properties":{"display_name":{"title":"Display Name","description":"Nome de exibicao","type":"string","nullable":true},"phone":{"title":"Phone","description":"Celular (PII, cifrado em repouso)","type":"string","nullable":true},"secondary_email":{"title":"Secondary Email","description":"E-mail secundario","type":"string","nullable":true},"notification_channel":{"title":"Notification Channel","description":"Canal de notificacao ('email' | 'msg')","type":"string","nullable":true},"locale":{"title":"Locale","description":"Locale de UI/notificacoes","type":"string","nullable":true}},"type":"object","title":"UpdateProfileRequest","description":"Request self-service de atualizacao de perfil (campos opcionais).\n\nApenas os campos presentes (nao None) sao enviados ao use case; a PK e a\nauditoria ficam de fora (anti mass-assignment, garantido tambem no use case)."},"UpdateRoleBody":{"properties":{"description":{"type":"string","title":"Description","description":"Nova descricao legivel","default":""},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Novas permissions (catalogo)"},"requires_mfa":{"type":"boolean","title":"Requires Mfa","description":"Exige MFA ativo no login","default":false}},"type":"object","title":"UpdateRoleBody","description":"Body para atualizar uma role customizada existente."},"UpdateScheduleRequest":{"properties":{"cron_expression":{"title":"Cron Expression","description":"Nova expressao cron (5 campos; aceita nomes MON-SUN/JAN-DEC).","type":"string","pattern":"^[0-9A-Za-z*,/\\-]+(\\s+[0-9A-Za-z*,/\\-]+){4}$","nullable":true},"status":{"title":"Status","description":"Novo status do schedule.","type":"string","enum":["active","paused","disabled"],"nullable":true}},"type":"object","title":"UpdateScheduleRequest","description":"Request para atualizacao parcial de schedule."},"UpdateStorageConnectionRequest":{"properties":{"storage_type":{"type":"string","title":"Storage Type","description":"s3, azure, gcs ou local"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Configuracao especifica do tipo"}},"type":"object","required":["storage_type","config"],"title":"UpdateStorageConnectionRequest","description":"Request para atualizar conexao existente; o nome vem do path."},"UpdateWebhookSubscriptionRequest":{"properties":{"target_url":{"title":"Target Url","type":"string","nullable":true},"events":{"title":"Events","items":{"type":"string"},"type":"array","nullable":true},"secret":{"title":"Secret","type":"string","nullable":true},"retry_max_attempts":{"title":"Retry Max Attempts","type":"integer","nullable":true},"retry_backoff_seconds":{"title":"Retry Backoff Seconds","type":"integer","nullable":true},"retry_exponential_backoff":{"title":"Retry Exponential Backoff","type":"boolean","nullable":true},"enabled":{"title":"Enabled","type":"boolean","nullable":true}},"type":"object","title":"UpdateWebhookSubscriptionRequest","description":"Request para PATCH /webhooks/subscriptions/{id} (campos None mantem o valor atual)."},"UpdateWorkspaceSettingsRequest":{"properties":{"default_timezone":{"title":"Default Timezone","type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z][A-Za-z0-9_+/-]*$","nullable":true},"retention_days":{"title":"Retention Days","type":"integer","maximum":3650.0,"minimum":0.0,"nullable":true},"default_datasource_id":{"title":"Default Datasource Id","type":"string","nullable":true},"default_config_path":{"title":"Default Config Path","type":"string","nullable":true},"features":{"title":"Features","additionalProperties":{"type":"boolean"},"type":"object","nullable":true}},"type":"object","title":"UpdateWorkspaceSettingsRequest","description":"Payload HTTP de atualizacao parcial das preferencias de workspace."},"UploadTemplateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"storage_path":{"type":"string","title":"Storage Path","default":""},"size_bytes":{"type":"integer","title":"Size Bytes","default":0},"version":{"title":"Version","type":"string","nullable":true}},"type":"object","required":["success"],"title":"UploadTemplateResponse","description":"Response de upload de template.\n\nAttributes:\n    success: True se upload bem-sucedido.\n    storage_path: Path no storage.\n    size_bytes: Tamanho.\n    version: Versao salva."},"ValidateConfigRequest":{"properties":{"config_path":{"title":"Config Path","description":"Referencia do YAML dentro do root governado pelo servidor; aceita apenas com co-location declarada. Prefira pipeline_yaml.","type":"string","minLength":1,"nullable":true},"pipeline_yaml":{"title":"Pipeline Yaml","description":"Conteudo do YAML enviado pelo cliente. Funciona em qualquer topologia. Sem diretorio de origem no servidor a validacao cross-file (existencia de query_file/script_file e descida em sub-workflows) NAO roda; em /validate o que ficou de fora vem declarado em skipped_checks. Para cobertura COMPLETA por API, valide em /validate por definition_name (definicao ja registrada).","type":"string","minLength":1,"nullable":true},"definition_name":{"title":"Definition Name","description":"Nome da definicao publicada no registro do tenant (ADR-065 R2 forma (b)). Unica origem com cobertura COMPLETA: o servidor materializa o bundle e a validacao cross-file roda contra a raiz real, entao skipped_checks volta vazio.","type":"string","minLength":1,"nullable":true},"definition_version":{"title":"Definition Version","description":"Versao SemVer da definicao; ausente usa a mais recente","type":"string","minLength":1,"nullable":true},"strict":{"type":"boolean","title":"Strict","default":false},"validate_paths":{"type":"boolean","title":"Validate Paths","default":false},"var_overrides":{"additionalProperties":{"type":"string"},"type":"object","title":"Var Overrides"}},"type":"object","title":"ValidateConfigRequest","description":"Request para validar YAML de pipeline sem executar.\n\nExatamente uma origem, das tres formas de referenciar o documento: a\ndefinicao ja registrada (definition_name), a referencia confinada ao root\ngovernado pelo servidor (config_path) ou o conteudo enviado (pipeline_yaml).\nSo a primeira tem cobertura completa — as outras duas nao alcancam a raiz\nreal do documento, e o que ficou de fora volta em skipped_checks.\n\nA identidade da definicao usa os MESMOS dois campos de RunPipelineRequest\n(nome + versao), montados no MESMO VO (PipelineDefinitionRef): uma grafia\n\"nome@versao\" seria uma segunda sintaxe de identidade no mesmo boundary, com\nparser proprio para manter em sincronia.\n\nAttributes:\n    config_path: Referencia do YAML dentro do root do servidor.\n    pipeline_yaml: Conteudo do YAML enviado pelo cliente.\n    definition_name: Nome da definicao publicada no registro do tenant.\n    definition_version: Versao SemVer da definicao; ausente usa a mais recente.\n    strict: Tratar warnings como erros.\n    validate_paths: Validar que paths referenciados existem.\n    var_overrides: Overrides de ${var.*} do YAML (paridade com o run REST)."},"ValidateConfigResponse":{"properties":{"is_valid":{"type":"boolean","title":"Is Valid"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"semantic_issues":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Semantic Issues"},"skipped_checks":{"items":{"type":"string"},"type":"array","title":"Skipped Checks"}},"type":"object","required":["is_valid"],"title":"ValidateConfigResponse","description":"Response de validacao de config YAML.\n\nAttributes:\n    is_valid: True se sem erros.\n    errors: Erros de validacao.\n    warnings: Avisos nao-bloqueantes.\n    semantic_issues: Issues semanticos estruturados.\n    skipped_checks: Checagens que nao rodaram nesta validacao. Vazio =\n        cobertura completa. `is_valid` significa \"sem erros entre as\n        checagens executadas\" — com esta lista nao vazia, um cliente que\n        exige cobertura total deve tratar o resultado como inconclusivo."},"ValidateContractRequest":{"properties":{"target_table":{"type":"string","title":"Target Table"}},"type":"object","required":["target_table"],"title":"ValidateContractRequest","description":"Request canonico para validacao de tabela contra contrato registrado."},"ValidationError":{"properties":{"loc":{"items":{"type":"string"},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input","nullable":true},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidationErrorResponse":{"properties":{"column":{"type":"string","title":"Column"},"error_type":{"type":"string","title":"Error Type"},"message":{"type":"string","title":"Message"}},"type":"object","required":["column","error_type","message"],"title":"ValidationErrorResponse","description":"Erro individual de validacao de schema.\n\nAttributes:\n    column: Nome da coluna com problema.\n    error_type: Tipo do erro (missing_column, type_mismatch, null_violation).\n    message: Mensagem descritiva do erro."},"WatchdogDLQEntryResponse":{"properties":{"id":{"type":"string","title":"Id"},"execution_id":{"type":"string","title":"Execution Id"},"pipeline_id":{"type":"string","title":"Pipeline Id"},"status":{"type":"string","title":"Status"},"retry_count":{"type":"integer","title":"Retry Count"},"max_retries":{"type":"integer","title":"Max Retries"},"error_message":{"type":"string","title":"Error Message"},"failed_at":{"type":"string","format":"date-time","title":"Failed At"},"next_retry_at":{"title":"Next Retry At","type":"string","format":"date-time","nullable":true}},"type":"object","required":["id","execution_id","pipeline_id","status","retry_count","max_retries","error_message","failed_at","next_retry_at"],"title":"WatchdogDLQEntryResponse","description":"Response para entrada do DLQ."},"WatchdogStatusDTO":{"properties":{"watchdog_enabled":{"type":"boolean","title":"Watchdog Enabled"},"scheduler_running":{"type":"boolean","title":"Scheduler Running"},"total_running_executions":{"type":"integer","title":"Total Running Executions"},"dlq_depth":{"type":"integer","title":"Dlq Depth"},"sla_violations_active":{"type":"integer","title":"Sla Violations Active"}},"type":"object","required":["watchdog_enabled","scheduler_running","total_running_executions","dlq_depth","sla_violations_active"],"title":"WatchdogStatusDTO","description":"Status resumido do watchdog para o dashboard unificado."},"WatchdogStatusResponse":{"properties":{"watchdog_enabled":{"type":"boolean","title":"Watchdog Enabled"},"scheduler_running":{"type":"boolean","title":"Scheduler Running"},"total_running_executions":{"type":"integer","title":"Total Running Executions"},"dlq_depth":{"type":"integer","title":"Dlq Depth"},"sla_violations_active":{"type":"integer","title":"Sla Violations Active"},"available":{"type":"boolean","title":"Available","default":true},"unavailable_reason":{"title":"Unavailable Reason","type":"string","nullable":true}},"type":"object","required":["watchdog_enabled","scheduler_running","total_running_executions","dlq_depth","sla_violations_active"],"title":"WatchdogStatusResponse","description":"Response para GET /watchdog/status."},"WebhookSubscriptionResponse":{"properties":{"id":{"type":"string","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"target_url":{"type":"string","title":"Target Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"enabled":{"type":"boolean","title":"Enabled"},"secret":{"title":"Secret","type":"string","nullable":true},"retry_max_attempts":{"title":"Retry Max Attempts","type":"integer","nullable":true},"retry_backoff_seconds":{"title":"Retry Backoff Seconds","type":"integer","nullable":true},"retry_exponential_backoff":{"title":"Retry Exponential Backoff","type":"boolean","nullable":true},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","target_url","enabled","secret","retry_max_attempts","retry_backoff_seconds","retry_exponential_backoff","created_at"],"title":"WebhookSubscriptionResponse","description":"Item de WebhookSubscription (GET/POST/PATCH /webhooks/subscriptions).\n\nO campo ``secret`` nunca retorna o valor real: ``\"***\"`` se configurado,\n``None`` caso contrario (write-only na fronteira REST)."},"WhoAmIResponse":{"properties":{"user_id":{"type":"string","title":"User Id","description":"ID do usuario","examples":["joao.silva"]},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID do tenant","examples":["corp-financeiro"]},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Permissoes ativas","examples":[["pipelines:run","analytics:read"]]}},"type":"object","required":["user_id","tenant_id"],"title":"WhoAmIResponse","description":"Resposta com info do usuario autenticado.\n\nArgs:\n    user_id: ID do usuario.\n    tenant_id: ID do tenant.\n    permissions: Lista de permissoes."},"WidgetRenderModel":{"properties":{"widget_id":{"type":"string","title":"Widget Id"},"widget_type":{"type":"string","title":"Widget Type"},"status":{"type":"string","title":"Status"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"rows":{"items":{"items":{},"type":"array"},"type":"array","title":"Rows"},"row_count":{"type":"integer","title":"Row Count","default":0},"scalar":{"title":"Scalar","nullable":true},"text":{"title":"Text","type":"string","nullable":true},"chart":{"title":"Chart","additionalProperties":true,"type":"object","nullable":true},"execution_time_ms":{"type":"number","title":"Execution Time Ms","default":0.0},"error":{"title":"Error","type":"string","nullable":true}},"type":"object","required":["widget_id","widget_type","status"],"title":"WidgetRenderModel","description":"Resultado HTTP de render de um widget.\n\nArgs:\n    widget_id: ID do widget no layout.\n    widget_type: Tipo declarado.\n    status: 'ok' ou 'error'.\n    columns: Colunas (tabular/chart).\n    rows: Linhas (tabular/chart).\n    row_count: Numero de linhas.\n    scalar: Valor escalar de kpi/metric.\n    text: Conteudo de markdown.\n    chart: Metadados de encoding do chart.\n    execution_time_ms: Tempo de execucao do SQL do widget.\n    error: Mensagem de erro quando status='error'."},"WidgetSpec":{"properties":{"widget_id":{"type":"string","minLength":1,"title":"Widget Id"},"widget_type":{"type":"string","pattern":"^(kpi|chart|table|markdown|metric|sql)$","title":"Widget Type"},"title":{"type":"string","title":"Title","default":""},"x":{"type":"integer","minimum":0.0,"title":"X","default":0},"y":{"type":"integer","minimum":0.0,"title":"Y","default":0},"w":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"W","default":4},"h":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"H","default":3},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["widget_id","widget_type"],"title":"WidgetSpec","description":"Especificacao de widget em dashboard.\n\nArgs:\n    widget_id: ID unico do widget no dashboard.\n    widget_type: Tipo (kpi, chart, table, markdown, metric, sql).\n    title: Titulo do widget.\n    x: Posicao X no grid.\n    y: Posicao Y no grid.\n    w: Largura em colunas do grid.\n    h: Altura em linhas do grid.\n    config: Configuracao especifica do tipo."},"WorkspaceSettingsExportResponse":{"properties":{"default_timezone":{"type":"string","title":"Default Timezone"},"retention_days":{"type":"integer","title":"Retention Days"},"default_datasource_id":{"title":"Default Datasource Id","type":"string","nullable":true},"default_config_path":{"title":"Default Config Path","type":"string","nullable":true},"features":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Features"},"schema_version":{"type":"integer","title":"Schema Version"}},"type":"object","required":["default_timezone","retention_days","schema_version"],"title":"WorkspaceSettingsExportResponse","description":"Payload serializavel do export (sem tenant_id/updated_at por design)."},"WorkspaceSettingsResponse":{"properties":{"default_timezone":{"type":"string","title":"Default Timezone","default":"America/Sao_Paulo"},"retention_days":{"type":"integer","title":"Retention Days","default":90},"default_datasource_id":{"title":"Default Datasource Id","type":"string","nullable":true},"default_config_path":{"title":"Default Config Path","type":"string","nullable":true},"features":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Features"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["tenant_id"],"title":"WorkspaceSettingsResponse","description":"Preferencias de workspace efetivas do tenant."},"Zone":{"type":"string","enum":["bronze","silver","gold"],"title":"Zone","description":"Camada medallion de um asset. Ordenável por rank para governança.\n\nBRONZE: dado extraído (cru ou de fonte externa curada).\nSILVER: tabelas com chave primária derivadas de bronze.\nGOLD: entrega final ao consumidor."},"_CreateKeyRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":3,"title":"Name","description":"Nome descritivo"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Permissoes"},"expires_at":{"title":"Expires At","description":"Expiracao opcional","type":"string","format":"date-time","nullable":true}},"type":"object","required":["name"],"title":"_CreateKeyRequest","description":"Request model para criar API key."}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT obtido via POST /auth/login"},"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API Key para M2M (criada via POST /auth/keys)"},"HTTPBasic":{"type":"http","scheme":"basic","description":"Username/Password — valida com LDAP"}}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"x-tagGroups":[{"name":"Autenticacao","tags":["auth","api-keys"],"description":"Login JWT, refresh tokens, API keys M2M."},{"name":"Pipeline Execution","tags":["pipelines","jobs"],"description":"Executar, validar e monitorar pipelines YAML."},{"name":"Data Intelligence","tags":["Data Intelligence","schemas","query-studio"],"description":"Analytics, profiling, comparacao, schema matching, SQL ad-hoc."},{"name":"Scheduling","tags":["scheduling"],"description":"Agendamento de pipelines com CRON e triggers."},{"name":"Storage & Artifacts","tags":["artifacts"],"description":"Upload, download, listagem em storage multi-cloud."},{"name":"AI Agents","tags":["agents"],"description":"Executar AI agents com guardrails, tools e streaming."},{"name":"Lineage & Audit","tags":["lineage","audit"],"description":"Rastreamento de lineage upstream/downstream e audit trail."},{"name":"Dashboard","tags":["Dashboard"],"description":"Visao geral operacional e timeline de atividade."},{"name":"Sistema","tags":["system","System","Documentation","health"],"description":"Health check, error catalog, CLI mapping, quick-start."}],"tags":[{"name":"auth","description":"Autenticacao - Login, refresh, whoami"},{"name":"api-keys","description":"Gerenciamento de API Keys M2M"},{"name":"pipelines","description":"Execucao e validacao de pipelines YAML"},{"name":"jobs","description":"Gerenciamento de jobs assincronos"},{"name":"Data Intelligence","description":"Analytics, profiling, comparacao de datasets"},{"name":"schemas","description":"Schema Registry - registro, diff, matching, validacao"},{"name":"query-studio","description":"Execucao SQL ad-hoc com historico e queries salvas"},{"name":"scheduling","description":"Agendamento de pipelines com CRON e triggers"},{"name":"artifacts","description":"Upload, download e gerenciamento de artefatos"},{"name":"agents","description":"AI Agents com streaming SSE e guardrails"},{"name":"lineage","description":"Lineage de dados - trace, impact, grafo visual"},{"name":"audit","description":"Audit trail com filtros e exportacao CSV/JSON"},{"name":"Dashboard","description":"Dashboard operacional - overview e atividade"},{"name":"system","description":"Sistema - health, registry, error catalog"},{"name":"System","description":"Error catalog e informacoes do sistema"},{"name":"Documentation","description":"Documentacao - CLI mapping, quick-start"},{"name":"health","description":"Health check - liveness, readiness, status detalhado"}],"servers":[{"url":"http://127.0.0.1:8000","description":"Servidor API"}]}