openapi: 3.0.3
info:
  title: Riversoft STCP Gemini API
  version: v2
  description: |-
    Especificação pública da API REST de gestão do Riversoft STCP Gemini e do Riversoft STCP DirectLink. É a mesma API usada pelo Riversoft Console Portal.

    Substitua o servidor de exemplo pelo endereço da API do seu ambiente. Use HTTPS em produção.

    As rotas protegidas exigem o header `Authorization: Bearer <access_token>`, obtido em `/oauth/token` ou `/oauth/v2/token`. Cada rota exige uma permissão no `scope` do operador; ela está indicada na descrição de cada operação.

    Requisições com corpo JSON devem enviar exatamente `Content-Type: application/json`.

    Os esquemas do `CONFIG_TXT` correspondem ao módulo de configuração `stcpcfgifacetypes-go` v1.3.2.
  contact:
    name: Suporte Riversoft
servers:
- url: https://api.exemplo.com:33070
  description: Endereço ilustrativo; substitua pelo endereço da API do seu ambiente.
tags:
- name: Autenticação
- name: Single Sign-On
- name: Informações
- name: Instâncias
- name: Usuários
- name: Serviços de rede
- name: Agendamentos
- name: Tipos de arquivo
- name: Roteamentos
- name: Operadores
- name: Grupos e permissões
- name: Cadastro da API
- name: Códigos de erro e evento
- name: Supervisão
- name: Arquivos da supervisão
- name: Manutenção
- name: Relatórios
security:
- bearerAuth: []
paths:
  /oauth/token:
    post:
      tags:
      - Autenticação
      summary: Emitir token (password grant)
      operationId: postOAuthToken
      description: |-
        Emite o token de acesso por OAuth 2.0 *password grant*, somente com a autenticação nativa. Esta rota não aplica a autenticação de dois fatores (2FA) e não aceita login LDAP: para esses casos, use `POST /oauth/v2/token`.

        Após o número máximo de falhas definido nas políticas de senha, o operador é bloqueado e passa a receber `401`.
      security: []
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TokenRequest'
            example:
              grant_type: password
              username: stcpadmin
              password: <senha>
      responses:
        '200':
          description: Token emitido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AuthUnauthorized'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/InternalError'
  /oauth/v2/token:
    post:
      tags:
      - Autenticação
      summary: Emitir token com suporte a 2FA
      operationId: postOAuthTokenV2
      description: |-
        Primeira etapa do login. Sem 2FA, responde com o token, no mesmo formato de `POST /oauth/token`. Com 2FA habilitado no cadastro da API, responde com a URL do desafio (`URL`); no primeiro acesso do operador, também com o segredo TOTP (`secret`) e o QR code (`qrcode`) para cadastro no aplicativo autenticador.

        Para login LDAP, informe o usuário no formato `<provedor>/<operador>`, em que `<provedor>` é o nome do provedor LDAP cadastrado em `ssoProviders`.
      security: []
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TokenRequest'
      responses:
        '200':
          description: Token emitido ou desafio de 2FA.
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/TokenResponse'
                - $ref: '#/components/schemas/MFAChallengeResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AuthUnauthorized'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '500':
          $ref: '#/components/responses/InternalError'
  /oauth/v2/token/mfa/{challengeID}:
    post:
      tags:
      - Autenticação
      summary: Concluir o login com o código 2FA
      operationId: postOAuthTokenMFA
      description: Segunda etapa do login com 2FA. Envie o código TOTP de 6 dígitos gerado pelo aplicativo autenticador. Cada
        código errado responde `401`; no quarto código errado, o operador é bloqueado e o desafio é descartado. Com um desafio
        inexistente ou descartado, recomece em `POST /oauth/v2/token`.
      security: []
      parameters:
      - in: path
        name: challengeID
        required: true
        description: Identificador do desafio, retornado em `URL` na etapa anterior.
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        description: Código TOTP.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MFARequest'
            example:
              Code: '123456'
      responses:
        '200':
          description: Token emitido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AuthUnauthorized'
        '500':
          $ref: '#/components/responses/InternalError'
  /disconnect/api/v3/logout:
    delete:
      tags:
      - Autenticação
      summary: Encerrar a sessão
      operationId: deleteLogout
      description: Invalida o token de acesso informado no header `Authorization`. Com `sso_logout_end_session` habilitado
        e uma sessão SSO, a resposta traz em `redirect` o endereço para encerrar também a sessão no provedor de identidade.
      responses:
        '200':
          description: Sessão encerrada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogoutResponse'
              example:
                data: Logout successful
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/logout:
    delete:
      tags:
      - Autenticação
      summary: Encerrar a sessão (rota alternativa)
      operationId: deleteLogoutV2
      description: Mesma função de `DELETE /disconnect/api/v3/logout`.
      responses:
        '200':
          description: Sessão encerrada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogoutResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalError'
  /auth/api/v1/sso/login:
    get:
      tags:
      - Single Sign-On
      summary: Iniciar o login SSO
      operationId: getSSOLogin
      description: Redireciona o navegador para o provedor de identidade informado (SAML 2.0 ou OAuth 2.0). Os provedores
        disponíveis são listados em `GET /info/sso/providers`. Provedores LDAP usam `POST /oauth/v2/token`.
      security: []
      parameters:
      - in: query
        name: provider
        required: true
        description: Nome do provedor de identidade cadastrado.
        schema:
          type: string
      responses:
        '307':
          description: Redirecionamento para o provedor de identidade.
        '400':
          $ref: '#/components/responses/BadRequest'
  /auth/api/v1/sso/saml2/acs:
    post:
      tags:
      - Single Sign-On
      summary: Retorno SAML 2.0 (ACS)
      operationId: postSAML2ACS
      description: Endpoint de retorno (*Assertion Consumer Service*) chamado pelo provedor SAML 2.0 após a autenticação.
        Não é chamado diretamente por integrações.
      security: []
      responses:
        '303':
          description: Redirecionamento para o endereço de `sso_login_redirect` com `token`, `token_type` (`Bearer`) e `scope`
            (permissões em JSON codificado em Base64) na query string. Em caso de falha, com `error`.
  /auth/api/v1/sso/saml2/slo:
    post:
      tags:
      - Single Sign-On
      summary: Retorno do logout SAML 2.0 (SLO)
      operationId: postSAML2SLO
      description: Endpoint de *Single Logout* chamado pelo provedor SAML 2.0.
      security: []
      responses:
        '303':
          description: Redirecionamento após o logout.
  /auth/api/v1/sso/oauth2:
    get:
      tags:
      - Single Sign-On
      summary: Retorno OAuth 2.0 / OpenID Connect
      operationId: getOAuth2Callback
      description: Endpoint de retorno (*callback*) chamado pelo provedor OAuth 2.0 ou OpenID Connect após a autenticação.
        Não é chamado diretamente por integrações.
      security: []
      responses:
        '303':
          description: Redirecionamento para o endereço de `sso_login_redirect` com `token`, `token_type` (`Bearer`) e `scope`
            (permissões em JSON codificado em Base64) na query string. Em caso de falha, com `error`.
  /info/version:
    get:
      tags:
      - Informações
      summary: Versão da API
      operationId: getInfoVersion
      description: Nome do cadastro da API (`rest_name`), versão e codinome.
      security: []
      responses:
        '200':
          description: Versão da API.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionInfo'
              example:
                Name: RestAPI
                Version: 2.3.0
                Model: Pudim
  /info/status:
    get:
      tags:
      - Informações
      summary: Situação das conexões
      operationId: getInfoStatus
      description: Situação das conexões da API com o banco de configuração e com o banco de log. Útil para monitoramento.
      security: []
      responses:
        '200':
          description: Situação das conexões.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ServiceStatus'
              example:
              - name: API_ConfigDB_Connection
                active: true
                status_time: '2026-11-09T10:15:00-03:00'
              - name: API_LogDB_Connection
                active: true
                status_time: '2026-11-09T10:15:00-03:00'
  /info/report:
    get:
      tags:
      - Informações
      summary: Histórico de ocorrências de uma conexão
      operationId: getInfoReport
      description: Últimas ocorrências registradas para uma das conexões de `GET /info/status`.
      security: []
      parameters:
      - in: query
        name: name
        required: true
        description: Nome da conexão, como `API_ConfigDB_Connection`.
        schema:
          type: string
      responses:
        '200':
          description: Ocorrências registradas.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '404':
          $ref: '#/components/responses/NotFound'
  /info/license:
    get:
      tags:
      - Informações
      summary: Situação da licença
      operationId: getInfoLicense
      description: Situação da licença, dias até o vencimento e data de vencimento. Quando a licença vence, a API é encerrada.
      security: []
      responses:
        '200':
          description: Situação da licença.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LicenseStatus'
              example:
                status: active
                daysRemaining: 120
                expiresAt: '2027-03-09T00:00:00Z'
  /info/sso/providers:
    get:
      tags:
      - Informações
      summary: Provedores de login
      operationId: getInfoSSOProviders
      description: Provedores de identidade habilitados para login (OAuth 2.0, SAML 2.0 ou LDAP).
      security: []
      responses:
        '200':
          description: Provedores habilitados.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/LoginProvider'
              example:
              - Name: EntraID
                Type: oauth2
  /stcpcore/v2/instances:
    get:
      tags:
      - Instâncias
      summary: Listar instâncias
      operationId: listInstances
      description: |-
        **Permissão:** `stcpcore.instance` ≥ 1 (leitura).

        O operador vê as instâncias relacionadas aos seus grupos.
      responses:
        '200':
          description: Instâncias encontradas.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Instance'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Instâncias
      summary: Criar instância
      operationId: createInstance
      description: |-
        **Permissão:** `stcpcore.instance` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      requestBody:
        required: true
        description: Instância a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Instance'
      responses:
        '200':
          description: Instância criada. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}:
    get:
      tags:
      - Instâncias
      summary: Consultar instância
      operationId: getInstance
      description: '**Permissão:** `stcpcore.instance` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Instância encontrada.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Instance'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Instâncias
      summary: Alterar instância
      operationId: updateInstance
      description: |-
        **Permissão:** `stcpcore.instance` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Instância alterada.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Instance'
      responses:
        '200':
          description: Instância alterada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Instâncias
      summary: Excluir instância
      operationId: deleteInstance
      description: '**Permissão:** `stcpcore.instance` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Instância excluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/members:
    get:
      tags:
      - Instâncias
      summary: Listar instâncias e seus usuários
      operationId: listInstanceMembers
      description: '**Permissão:** `stcpcore.instance` ≥ 15 (leitura e escrita).'
      responses:
        '200':
          description: Instâncias com os usuários de cada uma.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceMembers'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/users:
    get:
      tags:
      - Usuários
      summary: Listar usuários
      operationId: listUsers
      description: |-
        **Permissão:** `stcpcore.user` ≥ 1 (leitura).

        Cada usuário tem uma única caixa postal.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Usuários encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Usuários
      summary: Criar usuário
      operationId: createUser
      description: |-
        **Permissão:** `stcpcore.user` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Usuário a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        '200':
          description: Usuário criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/users/id/{userID}:
    get:
      tags:
      - Usuários
      summary: Consultar usuário
      operationId: getUser
      description: '**Permissão:** `stcpcore.user` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Usuário encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Usuários
      summary: Alterar usuário
      operationId: updateUser
      description: |-
        **Permissão:** `stcpcore.user` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Usuário alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        '200':
          description: Usuário alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Usuários
      summary: Excluir usuário
      operationId: deleteUser
      description: '**Permissão:** `stcpcore.user` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Usuário excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/services:
    get:
      tags:
      - Serviços de rede
      summary: Listar serviços de rede
      operationId: listNetworkServices
      description: |-
        **Permissão:** `stcpcore.service` ≥ 1 (leitura).

        Inclui os serviços de supervisão (Supervisão (gemini) e Supervisão (directlink)) e o serviço da API do Riversoft STCP DirectLink.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Serviços de rede encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/NetworkService'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Serviços de rede
      summary: Criar serviço de rede
      operationId: createNetworkService
      description: |-
        **Permissão:** `stcpcore.service` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Serviço de rede a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NetworkService'
      responses:
        '200':
          description: Serviço de rede criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/services/id/{serviceID}:
    get:
      tags:
      - Serviços de rede
      summary: Consultar serviço de rede
      operationId: getNetworkService
      description: '**Permissão:** `stcpcore.service` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: serviceID
        required: true
        description: ID do serviço de rede.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Serviço de rede encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/NetworkService'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Serviços de rede
      summary: Alterar serviço de rede
      operationId: updateNetworkService
      description: |-
        **Permissão:** `stcpcore.service` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: serviceID
        required: true
        description: ID do serviço de rede.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Serviço de rede alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NetworkService'
      responses:
        '200':
          description: Serviço de rede alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Serviços de rede
      summary: Excluir serviço de rede
      operationId: deleteNetworkService
      description: '**Permissão:** `stcpcore.service` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: serviceID
        required: true
        description: ID do serviço de rede.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Serviço de rede excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/schedules:
    get:
      tags:
      - Agendamentos
      summary: Listar agendamentos
      operationId: listSchedules
      description: '**Permissão:** `stcpcore.schedule` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Agendamentos encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Schedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Agendamentos
      summary: Criar agendamento
      operationId: createSchedule
      description: |-
        **Permissão:** `stcpcore.schedule` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Agendamento a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Schedule'
      responses:
        '200':
          description: Agendamento criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/schedules/id/{scheduleID}:
    get:
      tags:
      - Agendamentos
      summary: Consultar agendamento
      operationId: getSchedule
      description: '**Permissão:** `stcpcore.schedule` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: scheduleID
        required: true
        description: ID do agendamento.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Agendamento encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Schedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Agendamentos
      summary: Alterar agendamento
      operationId: updateSchedule
      description: |-
        **Permissão:** `stcpcore.schedule` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: scheduleID
        required: true
        description: ID do agendamento.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Agendamento alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Schedule'
      responses:
        '200':
          description: Agendamento alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Agendamentos
      summary: Excluir agendamento
      operationId: deleteSchedule
      description: '**Permissão:** `stcpcore.schedule` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: scheduleID
        required: true
        description: ID do agendamento.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Agendamento excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/ftypesglobal:
    get:
      tags:
      - Tipos de arquivo
      summary: Listar tipos de arquivo globais
      operationId: listFileTypeGlobals
      description: |-
        **Permissão:** `stcpcore.filetypeglobal` ≥ 1 (leitura).

        Tipos de arquivo aplicados quando o usuário não tem um tipo próprio que corresponda ao arquivo.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Tipos de arquivo globais encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/FileTypeGlobal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Tipos de arquivo
      summary: Criar tipo de arquivo global
      operationId: createFileTypeGlobal
      description: |-
        **Permissão:** `stcpcore.filetypeglobal` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Tipo de arquivo global a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileTypeGlobal'
      responses:
        '200':
          description: Tipo de arquivo global criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/ftypesglobal/id/{ftypesglobalID}:
    get:
      tags:
      - Tipos de arquivo
      summary: Consultar tipo de arquivo global
      operationId: getFileTypeGlobal
      description: '**Permissão:** `stcpcore.filetypeglobal` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: ftypesglobalID
        required: true
        description: ID do tipo de arquivo global.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Tipo de arquivo global encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/FileTypeGlobal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Tipos de arquivo
      summary: Alterar tipo de arquivo global
      operationId: updateFileTypeGlobal
      description: |-
        **Permissão:** `stcpcore.filetypeglobal` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: ftypesglobalID
        required: true
        description: ID do tipo de arquivo global.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Tipo de arquivo global alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileTypeGlobal'
      responses:
        '200':
          description: Tipo de arquivo global alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Tipos de arquivo
      summary: Excluir tipo de arquivo global
      operationId: deleteFileTypeGlobal
      description: '**Permissão:** `stcpcore.filetypeglobal` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: ftypesglobalID
        required: true
        description: ID do tipo de arquivo global.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Tipo de arquivo global excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/ftypesglobal/check:
    get:
      tags:
      - Tipos de arquivo
      summary: Testar nome de arquivo nos tipos globais
      operationId: checkFileTypeGlobal
      description: |-
        **Permissão:** `stcpcore.filetypeglobal` ≥ 1 (leitura).

        Retorna os tipos de arquivo globais cuja expressão regular corresponde ao nome informado.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: query
        name: filename
        required: true
        description: Nome do arquivo a testar.
        schema:
          type: string
      responses:
        '200':
          description: Tipos correspondentes.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/FileTypeGlobal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/users/id/{userID}/filetypes:
    get:
      tags:
      - Tipos de arquivo
      summary: Listar tipos de arquivo do usuário
      operationId: listFileTypes
      description: '**Permissão:** `stcpcore.filetype` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Tipos de arquivo do usuário encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/FileType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Tipos de arquivo
      summary: Criar tipo de arquivo do usuário
      operationId: createFileType
      description: |-
        **Permissão:** `stcpcore.filetype` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Tipo de arquivo do usuário a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileType'
      responses:
        '200':
          description: Tipo de arquivo do usuário criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/users/id/{userID}/filetypes/id/{filetypeID}:
    get:
      tags:
      - Tipos de arquivo
      summary: Consultar tipo de arquivo do usuário
      operationId: getFileType
      description: '**Permissão:** `stcpcore.filetype` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      - in: path
        name: filetypeID
        required: true
        description: ID do tipo de arquivo do usuário.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Tipo de arquivo do usuário encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/FileType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Tipos de arquivo
      summary: Alterar tipo de arquivo do usuário
      operationId: updateFileType
      description: |-
        **Permissão:** `stcpcore.filetype` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      - in: path
        name: filetypeID
        required: true
        description: ID do tipo de arquivo do usuário.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Tipo de arquivo do usuário alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileType'
      responses:
        '200':
          description: Tipo de arquivo do usuário alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Tipos de arquivo
      summary: Excluir tipo de arquivo do usuário
      operationId: deleteFileType
      description: '**Permissão:** `stcpcore.filetype` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      - in: path
        name: filetypeID
        required: true
        description: ID do tipo de arquivo do usuário.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Tipo de arquivo do usuário excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/users/id/{userID}/filetypes/check:
    get:
      tags:
      - Tipos de arquivo
      summary: Testar nome de arquivo nos tipos do usuário
      operationId: checkFileType
      description: |-
        **Permissão:** `stcpcore.filetype` ≥ 1 (leitura).

        Retorna os tipos de arquivo do usuário cuja expressão regular corresponde ao nome informado.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: userID
        required: true
        description: ID do usuário.
        schema:
          type: integer
          format: int64
      - in: query
        name: filename
        required: true
        description: Nome do arquivo a testar.
        schema:
          type: string
      responses:
        '200':
          description: Tipos correspondentes.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/FileType'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/routing:
    get:
      tags:
      - Roteamentos
      summary: Listar roteamentos
      operationId: listRoutings
      description: |-
        **Permissão:** `stcpcore.routing` ≥ 1 (leitura).

        Roteamentos e regras usados pelo Riversoft STCP Gemini Rename.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Roteamentos encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Routing'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Roteamentos
      summary: Criar roteamento
      operationId: createRouting
      description: '**Permissão:** `stcpcore.routing` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Roteamento a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Routing'
      responses:
        '200':
          description: Roteamento criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Roteamentos
      summary: Alterar roteamento
      operationId: updateRouting
      description: |-
        **Permissão:** `stcpcore.routing` ≥ 15 (leitura e escrita).

        O roteamento é identificado pelo `ID` informado no corpo.
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Roteamento alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Routing'
      responses:
        '200':
          description: Roteamento alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/routing/id/{bundleID}:
    get:
      tags:
      - Roteamentos
      summary: Consultar roteamento
      operationId: getRouting
      description: '**Permissão:** `stcpcore.routing` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: bundleID
        required: true
        description: ID do roteamento.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Roteamento encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Routing'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Roteamentos
      summary: Excluir roteamento
      operationId: deleteRouting
      description: '**Permissão:** `stcpcore.routing` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: bundleID
        required: true
        description: ID do roteamento.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Roteamento excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpcore/v2/instances/id/{instanceID}/routing/name/{bundleName}:
    get:
      tags:
      - Roteamentos
      summary: Consultar roteamento pelo nome
      operationId: getRoutingByName
      description: '**Permissão:** `stcpcore.routing` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: instanceID
        required: true
        description: ID da instância.
        schema:
          type: integer
          format: int64
      - in: path
        name: bundleName
        required: true
        description: Nome do roteamento.
        schema:
          type: string
      responses:
        '200':
          description: Roteamento encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Routing'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/operators:
    get:
      tags:
      - Operadores
      summary: Listar operadores
      operationId: listOperators
      description: '**Permissão:** `stcpadmin.operator` ≥ 1 (leitura).'
      responses:
        '200':
          description: Operadores encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Operator'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Operadores
      summary: Criar operador
      operationId: createOperator
      description: |-
        **Permissão:** `stcpadmin.operator` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      requestBody:
        required: true
        description: Operador a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Operator'
      responses:
        '200':
          description: Operador criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/operators/id/{operatorID}:
    get:
      tags:
      - Operadores
      summary: Consultar operador
      operationId: getOperator
      description: '**Permissão:** `stcpadmin.operator` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: operatorID
        required: true
        description: ID do operador.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Operador encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Operator'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Operadores
      summary: Alterar operador
      operationId: updateOperator
      description: |-
        **Permissão:** `stcpadmin.operator` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: operatorID
        required: true
        description: ID do operador.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Operador alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Operator'
      responses:
        '200':
          description: Operador alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Operadores
      summary: Excluir operador
      operationId: deleteOperator
      description: '**Permissão:** `stcpadmin.operator` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: operatorID
        required: true
        description: ID do operador.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Operador excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/operators/me:
    get:
      tags:
      - Operadores
      summary: Consultar o próprio perfil
      operationId: getMyProfile
      description: '**Permissão:** `stcpadmin.operator` ≥ 1 (leitura).'
      responses:
        '200':
          description: Perfil do operador autenticado.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Operator'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Operadores
      summary: Alterar o próprio perfil
      operationId: updateMyProfile
      description: '**Permissão:** `stcpadmin.operator` ≥ 15 (leitura e escrita).'
      requestBody:
        required: true
        description: Perfil alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Operator'
      responses:
        '200':
          description: Perfil alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/operators/me/password:
    put:
      tags:
      - Operadores
      summary: Trocar a própria senha
      operationId: updateMyPassword
      description: |-
        **Permissão:** `stcpadmin.operator` ≥ 15 (leitura e escrita).

        A nova senha é validada contra as políticas de senha do cadastro da API, incluindo o histórico de senhas.
      requestBody:
        required: true
        description: Nova senha.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewPasswordRequest'
            example:
              NewPassword: <nova-senha>
      responses:
        '200':
          description: Senha alterada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/groups:
    get:
      tags:
      - Grupos e permissões
      summary: Listar grupos
      operationId: listGroups
      description: |-
        **Permissão:** `stcpadmin.group` ≥ 1 (leitura).

        Os grupos definem as permissões dos operadores e as instâncias, operadores e usuários a que eles têm acesso.
      responses:
        '200':
          description: Grupos encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Group'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Grupos e permissões
      summary: Criar grupo
      operationId: createGroup
      description: |-
        **Permissão:** `stcpadmin.group` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      requestBody:
        required: true
        description: Grupo a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Group'
      responses:
        '200':
          description: Grupo criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/groups/id/{groupID}:
    get:
      tags:
      - Grupos e permissões
      summary: Consultar grupo
      operationId: getGroup
      description: '**Permissão:** `stcpadmin.group` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: groupID
        required: true
        description: ID do grupo.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Grupo encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/Group'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Grupos e permissões
      summary: Alterar grupo
      operationId: updateGroup
      description: |-
        **Permissão:** `stcpadmin.group` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: groupID
        required: true
        description: ID do grupo.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Grupo alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Group'
      responses:
        '200':
          description: Grupo alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Grupos e permissões
      summary: Excluir grupo
      operationId: deleteGroup
      description: '**Permissão:** `stcpadmin.group` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: groupID
        required: true
        description: ID do grupo.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Grupo excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/groups/id/{groupID}/operators:
    get:
      tags:
      - Grupos e permissões
      summary: Listar operadores do grupo
      operationId: listGroupOperators
      description: '**Permissão:** `stcpadmin.group` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: groupID
        required: true
        description: ID do grupo.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Operadores do grupo.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        ID:
                          type: integer
                        Name:
                          type: string
        '404':
          $ref: '#/components/responses/NotFound'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /stcpadmin/v2/settings:
    get:
      tags:
      - Cadastro da API
      summary: Listar cadastros da API
      operationId: listApiSettings
      description: |-
        **Permissão:** `stcpadmin.setting` ≥ 1 (leitura).

        O cadastro da API (API/Supervisão no Riversoft Console Portal) guarda TLS, endereço, 2FA, políticas de senha, provedores de SSO e os nós de supervisão. A API carrega, na inicialização, o cadastro cujo nome é igual ao `rest_name` do `config.json`.
      responses:
        '200':
          description: Cadastros da API encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/ApiSetting'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Cadastro da API
      summary: Criar cadastro da API
      operationId: createApiSetting
      description: |-
        **Permissão:** `stcpadmin.setting` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      requestBody:
        required: true
        description: Cadastro da API a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiSetting'
      responses:
        '200':
          description: Cadastro da API criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/settings/id/{apiID}:
    get:
      tags:
      - Cadastro da API
      summary: Consultar cadastro da API
      operationId: getApiSetting
      description: '**Permissão:** `stcpadmin.setting` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: apiID
        required: true
        description: ID do cadastro da API.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Cadastro da API encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/ApiSetting'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Cadastro da API
      summary: Alterar cadastro da API
      operationId: updateApiSetting
      description: |-
        **Permissão:** `stcpadmin.setting` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: apiID
        required: true
        description: ID do cadastro da API.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Cadastro da API alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiSetting'
      responses:
        '200':
          description: Cadastro da API alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Cadastro da API
      summary: Excluir cadastro da API
      operationId: deleteApiSetting
      description: '**Permissão:** `stcpadmin.setting` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: apiID
        required: true
        description: ID do cadastro da API.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Cadastro da API excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/api/policies:
    get:
      tags:
      - Cadastro da API
      summary: Consultar políticas de senha
      operationId: getPasswordPolicies
      description: '**Permissão:** `stcpadmin.operator` ≥ 15 (leitura e escrita).'
      responses:
        '200':
          description: Políticas de senha em vigor.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PoliciesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/error_events:
    get:
      tags:
      - Códigos de erro e evento
      summary: Listar códigos de erro e evento
      operationId: listErrorEvents
      description: |-
        **Permissão:** `stcpadmin.error_event` ≥ 1 (leitura).

        Descrição e procedimentos associados aos códigos de mensagem (`MSGnnnn`).
      responses:
        '200':
          description: Códigos de erro e evento encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/ErrorEvent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Códigos de erro e evento
      summary: Criar código de erro ou evento
      operationId: createErrorEvent
      description: |-
        **Permissão:** `stcpadmin.error_event` ≥ 15 (leitura e escrita).

        Envie a entidade sem o campo `ID`. O header `Content-Type` deve ser exatamente `application/json`.
      requestBody:
        required: true
        description: Código de erro ou evento a criar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ErrorEvent'
      responses:
        '200':
          description: Código de erro ou evento criado. `data` traz o nome da entidade.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadmin/v2/error_events/id/{eeID}:
    get:
      tags:
      - Códigos de erro e evento
      summary: Consultar código de erro ou evento
      operationId: getErrorEvent
      description: '**Permissão:** `stcpadmin.error_event` ≥ 1 (leitura).'
      parameters:
      - in: path
        name: eeID
        required: true
        description: ID do código de erro ou evento.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Código de erro ou evento encontrado.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ListEnvelope'
                - type: object
                  properties:
                    data:
                      type: array
                      items:
                        $ref: '#/components/schemas/ErrorEvent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Códigos de erro e evento
      summary: Alterar código de erro ou evento
      operationId: updateErrorEvent
      description: |-
        **Permissão:** `stcpadmin.error_event` ≥ 15 (leitura e escrita).

        Envie a entidade completa. Campos sensíveis mascarados (`****`) mantêm o valor gravado.
      parameters:
      - in: path
        name: eeID
        required: true
        description: ID do código de erro ou evento.
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        description: Código de erro ou evento alterado.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ErrorEvent'
      responses:
        '200':
          description: Código de erro ou evento alterado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Códigos de erro e evento
      summary: Excluir código de erro ou evento
      operationId: deleteErrorEvent
      description: '**Permissão:** `stcpadmin.error_event` ≥ 15 (leitura e escrita).'
      parameters:
      - in: path
        name: eeID
        required: true
        description: ID do código de erro ou evento.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Código de erro ou evento excluído.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WriteResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/monitor/nodes:
    post:
      tags:
      - Supervisão
      summary: Listar nós de supervisão
      operationId: listMonitorNodes
      description: |-
        **Permissão:** `stcpadminsvc.mon_console_info` ≥ 1 (leitura).

        Nós de supervisão habilitados no cadastro da API (Riversoft STCP Gemini Server e Riversoft STCP DirectLink).
      responses:
        '200':
          description: Nós habilitados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/SupervisionNode'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/instance/info:
    post:
      tags:
      - Supervisão
      summary: Informações da instância
      operationId: getInstanceInfo
      description: |-
        Estado e dados da instância em execução.

        **Permissão:** `stcpadminsvc.mon_inst_info` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/instance/restart:
    post:
      tags:
      - Supervisão
      summary: Reiniciar a instância
      operationId: restartInstance
      description: |-
        Reinicia a instância no nó informado.

        **Permissão:** `stcpadminsvc.mon_inst_restart` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/instance/debug:
    post:
      tags:
      - Supervisão
      summary: Alterar o nível de debug
      operationId: setDebugLevel
      description: |-
        Altera o nível de debug sem reiniciar o serviço. Informe o nível em `Level`.

        **Permissão:** `stcpadminsvc.main_set_level` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/instance/console:
    post:
      tags:
      - Supervisão
      summary: Mensagens do console
      operationId: getConsoleInfo
      description: |-
        Últimas mensagens do console da instância.

        **Permissão:** `stcpadminsvc.mon_console_info` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/user/info:
    post:
      tags:
      - Supervisão
      summary: Informações de usuários
      operationId: getUserInfo
      description: |-
        Situação das caixas postais e das conexões dos usuários. Informe `Name` para um usuário específico.

        **Permissão:** `stcpadminsvc.mon_user_info` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/user/start:
    post:
      tags:
      - Supervisão
      summary: Iniciar conexão de saída
      operationId: startUserConnection
      description: |-
        Inicia uma conexão de saída com o usuário informado em `Name`.

        **Permissão:** `stcpadminsvc.mon_user_start_conn` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/user/stop:
    post:
      tags:
      - Supervisão
      summary: Cancelar conexão
      operationId: stopUserConnection
      description: |-
        Cancela a conexão em andamento do usuário informado em `Name`.

        **Permissão:** `stcpadminsvc.mon_user_canc_conn` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/user/create_folder:
    post:
      tags:
      - Supervisão
      summary: Criar a estrutura de diretórios
      operationId: createUserFolders
      description: |-
        Cria a estrutura de diretórios da caixa postal do usuário informado em `Name`.

        **Permissão:** `stcpadminsvc.main_user_create_folders` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/schedule/start:
    post:
      tags:
      - Supervisão
      summary: Executar agenda
      operationId: startSchedule
      description: |-
        Executa na hora a agenda informada em `Name`.

        **Permissão:** `stcpadminsvc.mon_sched_exec` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/service/info:
    post:
      tags:
      - Supervisão
      summary: Informações dos serviços
      operationId: getServiceInfo
      description: |-
        Situação dos serviços de rede da instância.

        **Permissão:** `stcpadminsvc.mon_inst_serv` ≥ 1 (leitura).

        A API envia o comando aos nós de supervisão habilitados para a instância informada em `Instance`; com `Node`, somente ao nó indicado.
      requestBody:
        required: true
        description: Instância, nó e argumentos do comando.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionCommand'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              Node: ''
              Level: ''
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/sandbox:
    get:
      tags:
      - Arquivos da supervisão
      summary: Listar arquivos da caixa postal (sandbox)
      operationId: listSandboxFiles
      description: '**Permissão:** `stcpadminsvc.mon_sandbox_file_management` ≥ 1 (leitura).'
      parameters:
      - in: query
        name: instance
        required: true
        description: Instância.
        schema:
          type: string
      - in: query
        name: node
        required: false
        description: Nó de supervisão. Vazio envia a todos os nós da instância.
        schema:
          type: string
      - in: query
        name: user
        required: true
        description: Usuário dono da caixa postal.
        schema:
          type: string
      - in: query
        name: area
        required: false
        description: Área (diretório) a listar.
        schema:
          type: string
      - in: query
        name: filter
        required: false
        description: 'Filtro em JSON codificado em Base64: `{"Regex": "...", "Start": <unix>, "End": <unix>}`.'
        schema:
          type: string
          format: byte
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '404':
          $ref: '#/components/responses/NotFound'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Arquivos da supervisão
      summary: Enviar arquivo para a caixa postal (sandbox)
      operationId: addSandboxFile
      description: |-
        **Permissão:** `stcpadminsvc.mon_sandbox_file_management` ≥ 1 (leitura).

        O conteúdo do arquivo vai em `Data`, codificado em Base64.
      requestBody:
        required: true
        description: Arquivo a enviar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionFileRequest'
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Arquivos da supervisão
      summary: Excluir arquivo da caixa postal (sandbox)
      operationId: deleteSandboxFile
      description: '**Permissão:** `stcpadminsvc.mon_sandbox_file_management` ≥ 1 (leitura).'
      requestBody:
        required: true
        description: Arquivo a excluir.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionFileRequest'
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpmon/keystore:
    get:
      tags:
      - Arquivos da supervisão
      summary: Listar arquivos do keystore
      operationId: listKeystoreFiles
      description: '**Permissão:** `stcpadminsvc.mon_keystore_file_management` ≥ 1 (leitura).'
      parameters:
      - in: query
        name: instance
        required: true
        description: Instância.
        schema:
          type: string
      - in: query
        name: node
        required: false
        description: Nó de supervisão. Vazio envia a todos os nós da instância.
        schema:
          type: string
      - in: query
        name: area
        required: false
        description: Área (diretório) a listar.
        schema:
          type: string
      - in: query
        name: filter
        required: false
        description: 'Filtro em JSON codificado em Base64: `{"Regex": "...", "Start": <unix>, "End": <unix>}`.'
        schema:
          type: string
          format: byte
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '404':
          $ref: '#/components/responses/NotFound'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Arquivos da supervisão
      summary: Enviar chave ou certificado ao keystore
      operationId: addKeystoreFile
      description: |-
        **Permissão:** `stcpadminsvc.mon_keystore_file_management` ≥ 1 (leitura).

        O conteúdo do arquivo vai em `Data`, codificado em Base64.
      requestBody:
        required: true
        description: Arquivo a enviar.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionFileRequest'
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Arquivos da supervisão
      summary: Excluir arquivo do keystore
      operationId: deleteKeystoreFile
      description: '**Permissão:** `stcpadminsvc.mon_keystore_file_management` ≥ 1 (leitura).'
      requestBody:
        required: true
        description: Arquivo a excluir.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupervisionFileRequest'
      responses:
        '200':
          description: Respostas de cada nó.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupervisionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/reset/user/password:
    post:
      tags:
      - Manutenção
      summary: Redefinir a senha de um usuário
      operationId: resetUserPassword
      description: |-
        Define uma nova senha para o usuário, validada contra as políticas de senha da instância.

        **Permissão:** `stcpadminsvc.main_user_reset_pwd` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              NewPassword: <nova-senha>
              CurrentPassword: ''
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/change/user/password:
    post:
      tags:
      - Manutenção
      summary: Trocar a senha de um usuário
      operationId: changeUserPassword
      description: |-
        Troca a senha do usuário, informando a senha atual em `CurrentPassword`.

        **Permissão:** `stcpadminsvc.main_user_reset_pwd` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              NewPassword: <nova-senha>
              CurrentPassword: ''
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/reset/user/lock:
    post:
      tags:
      - Manutenção
      summary: Desbloquear um usuário
      operationId: resetUserLock
      description: |-
        Remove o bloqueio por falhas de login do usuário.

        **Permissão:** `stcpadminsvc.main_user_reset_lock` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              NewPassword: <nova-senha>
              CurrentPassword: ''
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/reset/user/hash:
    post:
      tags:
      - Manutenção
      summary: Redefinir o hash de autenticação de um usuário
      operationId: resetUserHash
      description: |-
        Recria o hash de autenticação do usuário.

        **Permissão:** `stcpadminsvc.main_user_reset_hash` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              NewPassword: <nova-senha>
              CurrentPassword: ''
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/reset/user/2fa:
    post:
      tags:
      - Manutenção
      summary: Redefinir o 2FA de um usuário
      operationId: resetUserOTP
      description: |-
        Apaga o segredo TOTP do usuário; um novo é gerado no próximo login.

        **Permissão:** `stcpadminsvc.main_user_reset_hash` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Instance: TESTE
              Name: PARCEIRO01
              NewPassword: <nova-senha>
              CurrentPassword: ''
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/reset/operator/password:
    post:
      tags:
      - Manutenção
      summary: Redefinir a senha de um operador
      operationId: resetOperatorPassword
      description: |-
        Define uma nova senha para o operador.

        **Permissão:** `stcpadminsvc.main_oper_reset_pwd` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Name: operador01
              NewPassword: <nova-senha>
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/change/operator/password:
    post:
      tags:
      - Manutenção
      summary: Trocar a senha de um operador
      operationId: changeOperatorPassword
      description: |-
        Troca a senha do operador, informando a senha atual em `CurrentPassword`.

        **Permissão:** `stcpadminsvc.main_oper_reset_pwd` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Name: operador01
              NewPassword: <nova-senha>
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/reset/operator/lock:
    post:
      tags:
      - Manutenção
      summary: Desbloquear um operador
      operationId: resetOperatorLock
      description: |-
        Remove o bloqueio por falhas de login do operador.

        **Permissão:** `stcpadminsvc.main_oper_reset_pwd` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Name: operador01
              NewPassword: <nova-senha>
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /stcpadminsvc/v2/supervision/stcpauth/reset/operator/2fa:
    post:
      tags:
      - Manutenção
      summary: Redefinir o 2FA de um operador
      operationId: resetOperatorOTP
      description: |-
        Apaga o segredo TOTP do operador; um novo é gerado no próximo login.

        **Permissão:** `stcpadminsvc.main_oper_reset_pwd` ≥ 1 (leitura).
      requestBody:
        required: true
        description: Entidade e senhas, quando aplicável.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MaintenanceRequest'
            example:
              Name: operador01
              NewPassword: <nova-senha>
      responses:
        '200':
          description: Operação concluída.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MaintenanceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /reports/v2/system:
    get:
      tags:
      - Relatórios
      summary: Eventos de sistema
      operationId: getSystemReport
      description: |-
        Eventos registrados pelos módulos dos produtos.

        **Permissão:** `stcpadminsvc.report_evt_sys` ≥ 1 (leitura).

        Se `start` ou `end` não forem informados ou não forem inteiros, a API responde `403`.
      parameters:
      - in: query
        name: instance
        required: false
        description: Instância.
        schema:
          type: string
      - in: query
        name: msg
        required: false
        description: Trecho do texto da mensagem.
        schema:
          type: string
      - in: query
        name: code
        required: false
        description: Código da mensagem, como `MSG0065`.
        schema:
          type: string
      - in: query
        name: start
        required: true
        description: Início do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: end
        required: true
        description: Fim do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: limit
        required: false
        description: Registros por página. Padrão 100; máximo 15000.
        schema:
          type: integer
          default: 100
          maximum: 15000
      - in: query
        name: index
        required: false
        description: Índice de paginação, informado na URI de `next`.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Registros encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ReportPage'
                - type: object
                  properties:
                    data:
                      type: array
                      nullable: true
                      items:
                        $ref: '#/components/schemas/MessageRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /reports/v2/users:
    get:
      tags:
      - Relatórios
      summary: Eventos de usuários
      operationId: getUsersReport
      description: |-
        Eventos das conexões dos usuários.

        **Permissão:** `stcpadminsvc.report_evt_sys` ≥ 1 (leitura).

        Se `start` ou `end` não forem informados ou não forem inteiros, a API responde `403`.
      parameters:
      - in: query
        name: instance
        required: false
        description: Instância.
        schema:
          type: string
      - in: query
        name: user
        required: false
        description: Usuário. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: msg
        required: false
        description: Trecho do texto da mensagem.
        schema:
          type: string
      - in: query
        name: code
        required: false
        description: Código da mensagem, como `MSG0065`.
        schema:
          type: string
      - in: query
        name: start
        required: true
        description: Início do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: end
        required: true
        description: Fim do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: limit
        required: false
        description: Registros por página. Padrão 100; máximo 15000.
        schema:
          type: integer
          default: 100
          maximum: 15000
      - in: query
        name: index
        required: false
        description: Índice de paginação, informado na URI de `next`.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Registros encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ReportPage'
                - type: object
                  properties:
                    data:
                      type: array
                      nullable: true
                      items:
                        $ref: '#/components/schemas/MessageRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /reports/v2/instance:
    get:
      tags:
      - Relatórios
      summary: Mensagens da instância
      operationId: getInstanceReport
      description: |-
        Todas as mensagens registradas para a instância.

        **Permissão:** `stcpadminsvc.report_evt_sys` ≥ 1 (leitura).

        Se `start` ou `end` não forem informados ou não forem inteiros, a API responde `403`.
      parameters:
      - in: query
        name: instance
        required: false
        description: Instância.
        schema:
          type: string
      - in: query
        name: user
        required: false
        description: Usuário. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: msg
        required: false
        description: Trecho do texto da mensagem.
        schema:
          type: string
      - in: query
        name: code
        required: false
        description: Código da mensagem, como `MSG0065`.
        schema:
          type: string
      - in: query
        name: start
        required: true
        description: Início do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: end
        required: true
        description: Fim do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: limit
        required: false
        description: Registros por página. Padrão 100; máximo 15000.
        schema:
          type: integer
          default: 100
          maximum: 15000
      - in: query
        name: index
        required: false
        description: Índice de paginação, informado na URI de `next`.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Registros encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ReportPage'
                - type: object
                  properties:
                    data:
                      type: array
                      nullable: true
                      items:
                        $ref: '#/components/schemas/MessageRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /reports/v2/operators:
    get:
      tags:
      - Relatórios
      summary: Atividades de operadores
      operationId: getOperatorsReport
      description: |-
        Ações executadas pelos operadores, inclusive pela API.

        **Permissão:** `stcpadminsvc.report_evt_sys` ≥ 1 (leitura).

        Se `start` ou `end` não forem informados ou não forem inteiros, a API responde `403`.
      parameters:
      - in: query
        name: operador
        required: false
        description: Operador.
        schema:
          type: string
      - in: query
        name: msg
        required: false
        description: Trecho do texto da mensagem.
        schema:
          type: string
      - in: query
        name: code
        required: false
        description: Código da mensagem, como `MSG0065`.
        schema:
          type: string
      - in: query
        name: start
        required: true
        description: Início do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: end
        required: true
        description: Fim do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: limit
        required: false
        description: Registros por página. Padrão 100; máximo 15000.
        schema:
          type: integer
          default: 100
          maximum: 15000
      - in: query
        name: index
        required: false
        description: Índice de paginação, informado na URI de `next`.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Registros encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ReportPage'
                - type: object
                  properties:
                    data:
                      type: array
                      nullable: true
                      items:
                        $ref: '#/components/schemas/OperatorRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /reports/v2/transfers:
    get:
      tags:
      - Relatórios
      summary: Histórico de transferências
      operationId: getTransfersReport
      description: |-
        Transmissões e recepções de arquivos.

        **Permissão:** `stcpadminsvc.report_evt_sys` ≥ 1 (leitura).

        Se `start` ou `end` não forem informados ou não forem inteiros, a API responde `403`.
      parameters:
      - in: query
        name: instance
        required: false
        description: Instância.
        schema:
          type: string
      - in: query
        name: user
        required: false
        description: Usuário. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: tags
        required: false
        description: Tag do tipo de arquivo. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: events
        required: false
        description: '`5` = transmissão; `7` = recepção. Pode ser repetido.'
        schema:
          type: array
          items:
            type: integer
            enum:
            - 5
            - 7
        explode: true
      - in: query
        name: results
        required: false
        description: '`0` = somente com sucesso; `-1` = somente com erro. Omita para todos.'
        schema:
          type: integer
          enum:
          - 0
          - -1
      - in: query
        name: filename
        required: false
        description: Nome do arquivo.
        schema:
          type: string
      - in: query
        name: msg
        required: false
        description: Trecho do texto da mensagem.
        schema:
          type: string
      - in: query
        name: code
        required: false
        description: Código da mensagem, como `MSG0065`.
        schema:
          type: string
      - in: query
        name: start
        required: true
        description: Início do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: end
        required: true
        description: Fim do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: limit
        required: false
        description: Registros por página. Padrão 100; máximo 15000.
        schema:
          type: integer
          default: 100
          maximum: 15000
      - in: query
        name: index
        required: false
        description: Índice de paginação, informado na URI de `next`.
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Registros encontrados.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/ReportPage'
                - type: object
                  properties:
                    data:
                      type: array
                      nullable: true
                      items:
                        $ref: '#/components/schemas/TransferRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /reports/v2/audit/transfers:
    get:
      tags:
      - Relatórios
      summary: Auditoria de transferências
      operationId: getAuditTransfers
      description: |-
        Transferências do período, sem paginação.

        **Permissão:** `stcpadminsvc.report_evt_sys` ≥ 1 (leitura).

        Se `start` ou `end` não forem informados ou não forem inteiros, a API responde `403`.
      parameters:
      - in: query
        name: instance
        required: false
        description: Instância.
        schema:
          type: string
      - in: query
        name: user
        required: false
        description: Usuário. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: filename
        required: false
        description: Nome do arquivo.
        schema:
          type: string
      - in: query
        name: tags
        required: false
        description: Tag do tipo de arquivo. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: start
        required: true
        description: Início do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: end
        required: true
        description: Fim do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: direction
        required: false
        description: '`in` = entrada; `out` = saída. Omita para as duas.'
        schema:
          type: string
          enum:
          - in
          - out
      - in: query
        name: status
        required: false
        description: '`error` = com erro; `all` = todos. Omita para somente com sucesso.'
        schema:
          type: string
          enum:
          - error
          - all
      responses:
        '200':
          description: Registros encontrados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    nullable: true
                    items:
                      $ref: '#/components/schemas/TransferRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /reports/v2/audit/sessions:
    get:
      tags:
      - Relatórios
      summary: Auditoria de sessões
      operationId: getAuditSessions
      description: |-
        Conexões de entrada e de saída do período, sem paginação.

        **Permissão:** `stcpadminsvc.report_evt_sys` ≥ 1 (leitura).

        Se `start` ou `end` não forem informados ou não forem inteiros, a API responde `403`.
      parameters:
      - in: query
        name: instance
        required: false
        description: Instância.
        schema:
          type: string
      - in: query
        name: user
        required: false
        description: Usuário. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: filename
        required: false
        description: Nome do arquivo.
        schema:
          type: string
      - in: query
        name: tags
        required: false
        description: Tag do tipo de arquivo. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: start
        required: true
        description: Início do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: end
        required: true
        description: Fim do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: direction
        required: false
        description: '`in` = entrada; `out` = saída. Omita para as duas.'
        schema:
          type: string
          enum:
          - in
          - out
      - in: query
        name: status
        required: false
        description: '`error` = com erro; `all` = todos. Omita para somente com sucesso.'
        schema:
          type: string
          enum:
          - error
          - all
      responses:
        '200':
          description: Registros encontrados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    nullable: true
                    items:
                      $ref: '#/components/schemas/TransferRow'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
  /reports/v2/audit/statistics:
    get:
      tags:
      - Relatórios
      summary: Estatísticas de transferências
      operationId: getAuditStatistics
      description: |-
        Totais de transferências agrupados por período.

        **Permissão:** `stcpadminsvc.report_evt_sys` ≥ 1 (leitura).

        Se `start` ou `end` não forem informados ou não forem inteiros, a API responde `403`. O parâmetro `instance` é obrigatório.
      parameters:
      - in: query
        name: instance
        required: true
        description: Instância. Obrigatório.
        schema:
          type: string
      - in: query
        name: user
        required: false
        description: Usuário. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: filename
        required: false
        description: Nome do arquivo.
        schema:
          type: string
      - in: query
        name: tags
        required: false
        description: Tag do tipo de arquivo. Pode ser repetido.
        schema:
          type: array
          items:
            type: string
        explode: true
      - in: query
        name: start
        required: true
        description: Início do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: end
        required: true
        description: Fim do período (Unix timestamp em milissegundos). Obrigatório.
        schema:
          type: integer
          format: int64
      - in: query
        name: statistics
        required: false
        description: 'Agrupamento: `year`, `month`, `week`, `dayofweek`, `day` ou `hour`. Omita para o total do período.'
        schema:
          type: string
          enum:
          - year
          - month
          - week
          - dayofweek
          - day
          - hour
      responses:
        '200':
          description: Totais encontrados.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    nullable: true
                    items:
                      type: object
                      additionalProperties: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Token de acesso emitido em `/oauth/token` ou `/oauth/v2/token`.
  schemas:
    Error:
      type: object
      properties:
        field:
          type: string
          description: Entidade ou área da operação.
        error:
          type: string
          description: Tipo do erro.
        error_description:
          type: string
          description: Descrição do erro.
      description: Formato dos erros da API.
    TokenRequest:
      type: object
      properties:
        grant_type:
          type: string
          description: Sempre `password`.
          enum:
          - password
        username:
          type: string
          description: Operador. Para LDAP (somente em `/oauth/v2/token`), use `<provedor>/<operador>`.
        password:
          type: string
          description: Senha do operador.
          format: password
      required:
      - grant_type
      - username
      - password
    TokenResponse:
      type: object
      properties:
        access_token:
          type: string
          description: Token de acesso. Vale o tempo definido em `session_duration` no `config.json` da API (padrão 60 minutos,
            máximo 720).
        scope:
          type: string
          description: Permissões do operador (JSON serializado em texto; veja `Permissions`).
        operator:
          type: string
          description: Operador autenticado.
        rest_name:
          type: string
          description: Nome do cadastro da API (`rest_name`).
        token_type:
          type: string
          description: Sempre `Bearer`.
          enum:
          - Bearer
      required:
      - access_token
      - token_type
    MFAChallengeResponse:
      type: object
      properties:
        URL:
          type: string
          description: 'Caminho para concluir o login: `/oauth/v2/token/mfa/{challengeID}`.'
        secret:
          type: string
          description: Segredo TOTP em Base32, retornado somente no primeiro acesso.
          format: password
        qrcode:
          type: string
          description: 'QR code do segredo TOTP, retornado somente no primeiro acesso: imagem PNG de 200 × 200 em Base64 padrão,
            para usar em `data:image/png;base64,`.'
      required:
      - URL
    MFARequest:
      type: object
      properties:
        Code:
          type: string
          description: Código TOTP de 6 dígitos.
        Operator:
          type: string
          description: 'Opcional e ignorado: a API usa o operador do desafio.'
      required:
      - Code
    DataMessage:
      type: object
      properties:
        data:
          type: string
          description: Resultado da operação.
    LogoutResponse:
      type: object
      properties:
        data:
          type: string
          description: Resultado da operação (`Logout successful`).
        redirect:
          type: string
          description: Endereço de logout no provedor de identidade. Presente somente com `sso_logout_end_session` habilitado
            e sessão SSO.
    WriteResult:
      type: object
      properties:
        data:
          type: string
          description: Nome da entidade gravada ou mensagem de confirmação.
        field:
          type: string
          description: Tipo da entidade.
    ListEnvelope:
      type: object
      properties:
        status:
          type: integer
          description: Status HTTP.
        field:
          type: string
          description: Tipo da entidade.
        data:
          type: array
          description: Entidades encontradas.
          items: {}
    VersionInfo:
      type: object
      properties:
        Name:
          type: string
          description: Nome do cadastro da API.
        Version:
          type: string
          description: Versão.
        Model:
          type: string
          description: Codinome da versão.
    ServiceStatus:
      type: object
      properties:
        name:
          type: string
          description: Conexão verificada.
        active:
          type: boolean
          description: Conexão ativa.
        status_time:
          type: string
          description: Horário da verificação.
          format: date-time
        check_error:
          type: string
          description: Erro da última verificação, quando houver.
        reconnect_error:
          type: string
          description: Erro da última reconexão, quando houver.
    LicenseStatus:
      type: object
      properties:
        status:
          type: string
          description: 'Sempre `active`: com a licença inválida ou vencida, a API não fica no ar.'
          enum:
          - active
        daysRemaining:
          type: integer
          description: Dias até o vencimento. `-1` quando a licença não tem vencimento.
        expiresAt:
          type: string
          description: Data de vencimento (RFC 3339). Vazio quando a licença não tem vencimento.
    LoginProvider:
      type: object
      properties:
        Name:
          type: string
          description: Nome do provedor.
        Type:
          type: string
          description: Tipo do provedor.
          enum:
          - oauth2
          - saml2
          - ldap
    Instance:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          allOf:
          - $ref: '#/components/schemas/CfgInstance'
          description: 'Configuração da entidade, no mesmo formato usado pelo Riversoft Console Portal. Na alteração (`PUT`),
            o `CONFIG_TXT` enviado substitui o gravado por inteiro: campos omitidos voltam ao valor vazio ou zero. Por isso,
            consulte a entidade, altere os campos e envie o objeto completo. Campos desconhecidos são ignorados sem erro.
            Senhas e segredos voltam mascarados nas consultas; ao reenviar o valor mascarado, a API mantém o gravado.'
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    InstanceMembers:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              ID:
                type: integer
                description: ID da instância.
              Name:
                type: string
                description: Instância.
              Users:
                type: array
                items:
                  type: object
                  properties:
                    ID:
                      type: integer
                      description: ID do usuário.
                    Name:
                      type: string
                      description: Usuário.
    User:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        INSTANCE_ID:
          type: integer
          description: ID da instância.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          allOf:
          - $ref: '#/components/schemas/CfgUser'
          description: 'Configuração da entidade, no mesmo formato usado pelo Riversoft Console Portal. Na alteração (`PUT`),
            o `CONFIG_TXT` enviado substitui o gravado por inteiro: campos omitidos voltam ao valor vazio ou zero. Por isso,
            consulte a entidade, altere os campos e envie o objeto completo. Campos desconhecidos são ignorados sem erro.
            Senhas e segredos voltam mascarados nas consultas; ao reenviar o valor mascarado, a API mantém o gravado.'
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    NetworkService:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        INSTANCE_ID:
          type: integer
          description: ID da instância.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          allOf:
          - $ref: '#/components/schemas/CfgService'
          description: 'Configuração da entidade, no mesmo formato usado pelo Riversoft Console Portal. Na alteração (`PUT`),
            o `CONFIG_TXT` enviado substitui o gravado por inteiro: campos omitidos voltam ao valor vazio ou zero. Por isso,
            consulte a entidade, altere os campos e envie o objeto completo. Campos desconhecidos são ignorados sem erro.
            Senhas e segredos voltam mascarados nas consultas; ao reenviar o valor mascarado, a API mantém o gravado.'
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    Schedule:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        INSTANCE_ID:
          type: integer
          description: ID da instância.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          allOf:
          - $ref: '#/components/schemas/CfgSchedule'
          description: 'Configuração da entidade, no mesmo formato usado pelo Riversoft Console Portal. Na alteração (`PUT`),
            o `CONFIG_TXT` enviado substitui o gravado por inteiro: campos omitidos voltam ao valor vazio ou zero. Por isso,
            consulte a entidade, altere os campos e envie o objeto completo. Campos desconhecidos são ignorados sem erro.
            Senhas e segredos voltam mascarados nas consultas; ao reenviar o valor mascarado, a API mantém o gravado.'
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    FileTypeGlobal:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        INSTANCE_ID:
          type: integer
          description: ID da instância.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          allOf:
          - $ref: '#/components/schemas/CfgFileType'
          description: 'Configuração da entidade, no mesmo formato usado pelo Riversoft Console Portal. Na alteração (`PUT`),
            o `CONFIG_TXT` enviado substitui o gravado por inteiro: campos omitidos voltam ao valor vazio ou zero. Por isso,
            consulte a entidade, altere os campos e envie o objeto completo. Campos desconhecidos são ignorados sem erro.
            Senhas e segredos voltam mascarados nas consultas; ao reenviar o valor mascarado, a API mantém o gravado.'
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    FileType:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        USER_ID:
          type: integer
          description: ID do usuário.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          allOf:
          - $ref: '#/components/schemas/CfgFileType'
          description: 'Configuração da entidade, no mesmo formato usado pelo Riversoft Console Portal. Na alteração (`PUT`),
            o `CONFIG_TXT` enviado substitui o gravado por inteiro: campos omitidos voltam ao valor vazio ou zero. Por isso,
            consulte a entidade, altere os campos e envie o objeto completo. Campos desconhecidos são ignorados sem erro.
            Senhas e segredos voltam mascarados nas consultas; ao reenviar o valor mascarado, a API mantém o gravado.'
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    Routing:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        INSTANCE_ID:
          type: integer
          description: ID da instância.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          allOf:
          - $ref: '#/components/schemas/CfgRouting'
          description: 'Configuração da entidade, no mesmo formato usado pelo Riversoft Console Portal. Na alteração (`PUT`),
            o `CONFIG_TXT` enviado substitui o gravado por inteiro: campos omitidos voltam ao valor vazio ou zero. Por isso,
            consulte a entidade, altere os campos e envie o objeto completo. Campos desconhecidos são ignorados sem erro.
            Senhas e segredos voltam mascarados nas consultas; ao reenviar o valor mascarado, a API mantém o gravado.'
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    Operator:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          type: object
          properties:
            Operator:
              type: object
              properties:
                IdOperador:
                  type: integer
                  description: Identificador interno.
                NomeCompleto:
                  type: string
                  description: Nome completo.
                Descricao:
                  type: string
                  description: Descrição.
                Email:
                  type: string
                  description: E-mail.
                  format: email
                Senha:
                  type: string
                  description: Senha. Volta mascarada nas consultas.
                  format: password
                Estado:
                  type: integer
                  description: '`1` = ativo; `0` = bloqueado.'
                IntervaloMonitoracao:
                  type: integer
                  description: Intervalo de atualização da supervisão, em segundos (mínimo 30).
                LinhasPorPagina:
                  type: integer
                  description: Linhas por página no Portal (mínimo 50).
                TempoInatividade:
                  type: integer
                  description: Tempo de inatividade da sessão, em segundos (mínimo 300).
                Expiration:
                  type: integer
                  description: Validade da sessão, em segundos (mínimo 300).
                Tipo:
                  type: integer
                  description: Tipo do operador.
                LoginFails:
                  type: integer
                  description: Falhas de login consecutivas.
                  readOnly: true
                DataUltimoAcesso:
                  type: string
                  description: Último acesso.
                  readOnly: true
                EnderecoIPUltimoAcesso:
                  type: string
                  description: IP do último acesso.
                  readOnly: true
              required:
              - NomeCompleto
              - Email
            Relations:
              type: object
              properties:
                Groups:
                  type: array
                  description: IDs dos grupos do operador.
                  items:
                    type: integer
              required:
              - Groups
            Entity:
              type: object
              properties:
                Name:
                  type: string
                Version:
                  type: integer
          required:
          - Operator
          - Relations
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    PermissionValue:
      type: integer
      enum:
      - 0
      - 1
      - 15
      description: '`0` = sem acesso; `1` = leitura; `15` = leitura e escrita.'
    Permissions:
      type: object
      properties:
        stcpcore:
          type: object
          properties:
            instance:
              $ref: '#/components/schemas/PermissionValue'
            user:
              $ref: '#/components/schemas/PermissionValue'
            service:
              $ref: '#/components/schemas/PermissionValue'
            schedule:
              $ref: '#/components/schemas/PermissionValue'
            routing:
              $ref: '#/components/schemas/PermissionValue'
            filetype:
              $ref: '#/components/schemas/PermissionValue'
            filetypeglobal:
              $ref: '#/components/schemas/PermissionValue'
        stcpadmin:
          type: object
          properties:
            operator:
              $ref: '#/components/schemas/PermissionValue'
            group:
              $ref: '#/components/schemas/PermissionValue'
            oper_group:
              $ref: '#/components/schemas/PermissionValue'
            error_event:
              $ref: '#/components/schemas/PermissionValue'
            logtransfer:
              $ref: '#/components/schemas/PermissionValue'
            logmessage:
              $ref: '#/components/schemas/PermissionValue'
            logsystem:
              $ref: '#/components/schemas/PermissionValue'
            setting:
              $ref: '#/components/schemas/PermissionValue'
        stcpauth:
          type: object
          properties:
            reset_hash:
              $ref: '#/components/schemas/PermissionValue'
            reset_password:
              $ref: '#/components/schemas/PermissionValue'
            reset_lock:
              $ref: '#/components/schemas/PermissionValue'
            check_status:
              $ref: '#/components/schemas/PermissionValue'
            change_password:
              $ref: '#/components/schemas/PermissionValue'
        stcpadminsvc:
          type: object
          properties:
            query_inst_sched:
              $ref: '#/components/schemas/PermissionValue'
            query_inst_users:
              $ref: '#/components/schemas/PermissionValue'
            query_reg_inst:
              $ref: '#/components/schemas/PermissionValue'
            query_reg_serv:
              $ref: '#/components/schemas/PermissionValue'
            query_reg_cod_err:
              $ref: '#/components/schemas/PermissionValue'
            query_reg_cod_evt:
              $ref: '#/components/schemas/PermissionValue'
            query_reg_group:
              $ref: '#/components/schemas/PermissionValue'
            query_reg_oper:
              $ref: '#/components/schemas/PermissionValue'
            query_rest_api:
              $ref: '#/components/schemas/PermissionValue'
            report_evt_inst:
              $ref: '#/components/schemas/PermissionValue'
            report_evt_oper:
              $ref: '#/components/schemas/PermissionValue'
            report_evt_sys:
              $ref: '#/components/schemas/PermissionValue'
            report_evt_user:
              $ref: '#/components/schemas/PermissionValue'
            report_freq_conn:
              $ref: '#/components/schemas/PermissionValue'
            report_freq_transf:
              $ref: '#/components/schemas/PermissionValue'
            report_transf_audit:
              $ref: '#/components/schemas/PermissionValue'
            report_transf_stat:
              $ref: '#/components/schemas/PermissionValue'
            report_transf_graph:
              $ref: '#/components/schemas/PermissionValue'
            report_transf_hist:
              $ref: '#/components/schemas/PermissionValue'
            report_transf_route:
              $ref: '#/components/schemas/PermissionValue'
            mon_sched_exec:
              $ref: '#/components/schemas/PermissionValue'
            mon_inst_restart:
              $ref: '#/components/schemas/PermissionValue'
            mon_inst_info:
              $ref: '#/components/schemas/PermissionValue'
            mon_inst_serv:
              $ref: '#/components/schemas/PermissionValue'
            mon_user_start_conn:
              $ref: '#/components/schemas/PermissionValue'
            mon_user_canc_conn:
              $ref: '#/components/schemas/PermissionValue'
            mon_user_info:
              $ref: '#/components/schemas/PermissionValue'
            mon_console_info:
              $ref: '#/components/schemas/PermissionValue'
            mon_sandbox_file_management:
              $ref: '#/components/schemas/PermissionValue'
            mon_keystore_file_management:
              $ref: '#/components/schemas/PermissionValue'
            main_set_level:
              $ref: '#/components/schemas/PermissionValue'
            main_sched_ch_state:
              $ref: '#/components/schemas/PermissionValue'
            main_oper_reset_pwd:
              $ref: '#/components/schemas/PermissionValue'
            main_user_ch_state:
              $ref: '#/components/schemas/PermissionValue'
            main_user_reset_pwd:
              $ref: '#/components/schemas/PermissionValue'
            main_user_reset_lock:
              $ref: '#/components/schemas/PermissionValue'
            main_user_reset_hash:
              $ref: '#/components/schemas/PermissionValue'
            main_user_create_folders:
              $ref: '#/components/schemas/PermissionValue'
        stcpmon:
          type: object
          description: Reservado. Sem permissões.
        stcpconfigs:
          type: object
          deprecated: true
          description: Obsoleto. Mantido somente para compatibilidade com versões antigas do Riversoft Console Portal.
          properties:
            config_instances:
              $ref: '#/components/schemas/PermissionValue'
            config_filetypeglobals:
              $ref: '#/components/schemas/PermissionValue'
            config_schedules:
              $ref: '#/components/schemas/PermissionValue'
            config_users:
              $ref: '#/components/schemas/PermissionValue'
            config_filetypes:
              $ref: '#/components/schemas/PermissionValue'
            config_services:
              $ref: '#/components/schemas/PermissionValue'
            config_settings:
              $ref: '#/components/schemas/PermissionValue'
            config_operators:
              $ref: '#/components/schemas/PermissionValue'
            config_groups:
              $ref: '#/components/schemas/PermissionValue'
            config_cod_errs_evts:
              $ref: '#/components/schemas/PermissionValue'
      description: Permissões por grupo de recursos. Quando o operador pertence a mais de um grupo, as permissões são somadas.
    Group:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
          format: int64
        NAME:
          type: string
          description: Nome.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          type: object
          properties:
            Permissions:
              $ref: '#/components/schemas/Permissions'
            Relations:
              type: object
              properties:
                Instances:
                  type: array
                  description: IDs das instâncias. `[0]` = todas.
                  items:
                    type: integer
                Operators:
                  type: array
                  description: IDs dos operadores. `[0]` = todos.
                  items:
                    type: integer
                Users:
                  type: array
                  description: IDs dos usuários. `[0]` = todos.
                  items:
                    type: integer
              required:
              - Instances
              - Operators
              - Users
            Entity:
              type: object
              properties:
                Name:
                  type: string
                Version:
                  type: integer
          required:
          - Relations
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - NAME
      - CONFIG_TXT
    SupervisionNode:
      type: object
      properties:
        Enable:
          type: boolean
          description: Nó habilitado.
        Instance:
          type: string
          description: Instância supervisionada.
        Nodename:
          type: string
          description: Nome do nó.
        Username:
          type: string
          description: 'Credencial de supervisão: usuário.'
        Password:
          type: string
          description: 'Credencial de supervisão: senha. Volta mascarada.'
          format: password
        Host:
          type: string
          description: Endereço do serviço de supervisão.
        Port:
          type: integer
          description: 'Porta: padrão 33050 (Riversoft STCP Gemini) ou 33060 (Riversoft STCP DirectLink).'
        Tls:
          type: boolean
          description: Conexão com TLS.
        Cert:
          type: string
          description: Certificado usado no TLS.
    PasswordPolicies:
      type: object
      properties:
        enabled:
          type: integer
          description: Políticas habilitadas (`1`) ou não (`0`).
        maxFails:
          type: integer
          description: Falhas de login até o bloqueio.
        maxDays:
          type: integer
          description: Validade da senha, em dias.
        minLen:
          type: integer
          description: Tamanho mínimo da senha.
        complexity:
          type: integer
          description: Nível de complexidade exigido.
        historyCount:
          type: integer
          description: Senhas anteriores que não podem ser reutilizadas.
    ApiSettingConfig:
      type: object
      properties:
        Monitor:
          type: array
          items:
            $ref: '#/components/schemas/SupervisionNode'
          description: Nós de supervisão.
        passwordPolicies:
          $ref: '#/components/schemas/PasswordPolicies'
        ssl:
          type: boolean
          description: TLS habilitado.
        cert:
          type: string
          description: Certificado TLS.
        key:
          type: string
          description: Chave privada TLS.
        passphrase:
          type: string
          description: Senha da chave privada. Volta mascarada.
          format: password
        host:
          type: string
          description: Interface da API.
        port:
          type: integer
          description: Porta da API.
        enable2FA:
          type: boolean
          description: Exige 2FA (TOTP) no login dos operadores.
        sso_login_redirect:
          type: string
          description: URL de retorno após o login SSO.
        sso_logout_end_session:
          type: boolean
          description: Encerra também a sessão no provedor de identidade no logout.
        ssoProviders:
          type: array
          description: Provedores de identidade (SSO).
          items:
            $ref: '#/components/schemas/SsoProvider'
        Entity:
          type: object
          properties:
            Name:
              type: string
            Version:
              type: integer
      description: Valores do `config.json` da API têm prioridade sobre os do cadastro.
    ApiSetting:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
        NAME:
          type: string
          description: Nome do cadastro; deve ser igual ao `rest_name` do `config.json` da API.
        DESCRIPTION:
          type: string
          description: Descrição.
        CONFIG_TXT:
          $ref: '#/components/schemas/ApiSettingConfig'
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
      required:
      - NAME
      - CONFIG_TXT
    PoliciesResponse:
      type: object
      properties:
        Name:
          type: string
          description: Nome do cadastro da API.
        Policies:
          $ref: '#/components/schemas/PasswordPolicies'
    ErrorEvent:
      type: object
      properties:
        ID:
          type: integer
          description: Identificador. Omitido na criação.
        CODE:
          type: string
          description: Código da mensagem, como `MSG0089`.
        DESCRIPTION:
          type: string
          description: Descrição.
        PROCEDURES:
          type: string
          description: Procedimentos recomendados.
        CREATED:
          type: string
          description: Data de criação.
          readOnly: true
        MODIFIED:
          type: string
          description: Data da última alteração.
          readOnly: true
        EXTRA_TXT:
          type: string
          description: Dados adicionais.
      required:
      - CODE
    NewPasswordRequest:
      type: object
      properties:
        NewPassword:
          type: string
          description: Nova senha.
          format: password
      required:
      - NewPassword
    SupervisionCommand:
      type: object
      properties:
        Instance:
          type: string
          description: Instância.
        Node:
          type: string
          description: Nó de supervisão. Vazio envia a todos os nós da instância.
        Name:
          type: string
          description: Usuário ou agenda, conforme o comando.
        Level:
          type: string
          description: Nível de debug, no comando `debug`.
      required:
      - Instance
    SupervisionFileRequest:
      type: object
      properties:
        Instance:
          type: string
          description: Instância.
        Node:
          type: string
          description: Nó de supervisão.
        User:
          type: string
          description: Usuário dono da caixa postal (somente sandbox).
        Area:
          type: string
          description: Área (diretório) de destino.
        Filename:
          type: string
          description: Nome do arquivo.
        Data:
          type: string
          description: Conteúdo do arquivo em Base64 (somente no envio).
          format: byte
      required:
      - Instance
      - Filename
    SupervisionResponse:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              Instance:
                type: string
                description: Instância.
              Nodename:
                type: string
                description: Nó que respondeu.
              Data:
                type: array
                description: 'Resposta do nó. Em falha de conexão, `{"error": "...", "Timestamp": <unix>}`.'
                items:
                  type: object
                  additionalProperties: true
    MaintenanceRequest:
      type: object
      properties:
        Instance:
          type: string
          description: Instância (somente para usuários).
        Name:
          type: string
          description: Usuário ou operador.
        NewPassword:
          type: string
          description: Nova senha (redefinição e troca de senha).
          format: password
        CurrentPassword:
          type: string
          description: Senha atual (troca de senha).
          format: password
      required:
      - Name
    MaintenanceResponse:
      type: object
      properties:
        data:
          description: Resultado da operação.
        redirect:
          type: string
          description: Endereço para o qual o Portal deve redirecionar, quando houver.
    ReportPage:
      type: object
      properties:
        data:
          type: array
          description: Registros. `null` quando não há registros.
          nullable: true
          items: {}
        next:
          type: string
          description: URI da próxima página. Vazia quando não há próxima página.
    MessageRow:
      type: object
      properties:
        DATAHORA:
          type: string
          description: Data e hora.
        INSTANCE:
          type: string
          description: Instância.
        USUARIO:
          type: string
          description: Usuário ou módulo.
        CODIGOMENSAGEM:
          type: string
          description: Código da mensagem.
        MENSAGEM:
          type: string
          description: Mensagem.
        IDMENSAGEM:
          type: integer
          description: Identificador da mensagem.
    OperatorRow:
      type: object
      properties:
        DATAHORA:
          type: string
          description: Data e hora.
        OPERADOR:
          type: string
          description: Operador.
        MODULO:
          type: string
          description: Módulo.
        CODIGOMENSAGEM:
          type: string
          description: Código da mensagem.
        MENSAGEM:
          type: string
          description: Detalhes da operação (serviço, operador, status, método e caminho).
    TransferRow:
      type: object
      properties:
        DATAHORA:
          type: string
          description: Data e hora.
        INSTANCE:
          type: string
          description: Instância.
        USUARIO:
          type: string
          description: Usuário ou módulo.
        CONEXAO:
          type: string
          description: Detalhes da conexão ou do roteamento.
        EVENTO:
          type: integer
          description: '`5` = transmissão; `7` = recepção; `1`/`3` = sessão de entrada/saída.'
        NOMEARQUIVO:
          type: string
          description: Nome do arquivo.
        TAMARQUIVO:
          type: integer
          description: Tamanho do arquivo.
        TAGS:
          type: string
          description: Tags do tipo de arquivo.
        RESULTADO:
          type: integer
          description: '`0` = sucesso; outro valor = código do erro.'
        MENSAGEM:
          type: string
          description: Mensagem.
        REDE:
          type: string
          description: Rede ou serviço utilizado.
    CfgInstance:
      type: object
      properties:
        Entity:
          $ref: '#/components/schemas/CfgEntity'
        Authentication:
          $ref: '#/components/schemas/CfgInstanceAuthentication'
        Log:
          $ref: '#/components/schemas/CfgInstanceLog'
        Startup:
          $ref: '#/components/schemas/CfgInstanceStartup'
      description: '`CONFIG_TXT` da instância.'
    CfgEntity:
      type: object
      properties:
        Version:
          type: integer
          format: int64
          description: Versão da estrutura. Use `2`.
        Name:
          type: string
          description: 'Tipo da entidade: `instance`, `user`, `service`, `schedule`, `filetypeglobal`, `filetype`, `routing`,
            `group`, `operator` ou `setting`.'
      description: Identificação da estrutura. `Version` = `2`.
    CfgInstanceAuthentication:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca de acesso ao banco de autenticação.
        DBName:
          type: string
          description: Nome do banco de autenticação.
        DBHost:
          type: string
          description: Servidor do banco de autenticação.
        DBPort:
          type: integer
          format: int64
          description: Porta do banco de autenticação.
        DBUser:
          type: string
          description: Usuário do banco de autenticação.
        DBPswd:
          type: string
          format: password
          description: 'Senha do banco de autenticação. Dado sensível: volta mascarado nas consultas.'
        AuthType:
          type: integer
          format: int64
          description: 'Tipo de autenticação: `0` sistema operacional, `1` STCP, `2` RSA SecurID, `3` LDAP.'
        AuthPrefix:
          type: string
        AuthDomain:
          type: string
        AuthMFAMethod:
          type: integer
          format: int64
          description: 'MFA dos usuários: `0` desabilitado, `1` aplicativo autenticador (TOTP), `2` código por e-mail, `3`
            código por SMS.'
        AuthPolicyEnabled:
          type: integer
          format: int64
          description: '`1` habilita as políticas de senha.'
        AuthPolicyPswdMinLen:
          type: integer
          format: int64
          description: Tamanho mínimo da senha.
        AuthPolicyPswdMaxDays:
          type: integer
          format: int64
          description: Validade da senha, em dias.
        AuthPolicyPswdMaxFails:
          type: integer
          format: int64
          description: Falhas até o bloqueio do usuário.
        AuthPolicyPswdHistoryCount:
          type: integer
          format: int64
          description: Senhas anteriores que não podem ser reutilizadas.
        AuthPolicyPswdComplex:
          type: integer
          format: int64
          description: 'Complexidade exigida, como soma: `1` letra minúscula, `2` letra maiúscula, `4` dígito, `8` símbolo
            (`15` = todas).'
        AuthSecurIdCfgFile:
          type: string
          description: Arquivo de configuração do RSA SecurID.
        AuthLDAPRemoteAddress:
          type: string
          description: Endereço do servidor LDAP.
        AuthLDAPRemotePort:
          type: integer
          format: int64
          description: Porta do servidor LDAP.
        AuthLDAPDomain:
          type: string
          description: Domínio LDAP.
        AuthLDAPBindMethod:
          type: string
          description: Método de bind no LDAP.
        AuthLDAPBindUser:
          type: string
          description: Usuário de bind no LDAP.
        AuthLDAPBindPswd:
          type: string
          format: password
          description: 'Senha de bind no LDAP. Dado sensível: volta mascarado nas consultas.'
        AuthLDAPTls:
          type: integer
          format: int64
          description: '`1` usa TLS na conexão com o LDAP.'
        AuthLDAPTlsCertVerify:
          type: integer
          format: int64
          description: '`1` valida o certificado do servidor LDAP.'
        AuthLDAPTlsCertCaFile:
          type: string
          description: Arquivo da CA do servidor LDAP.
      description: 'Autenticação dos usuários de transferência da instância: banco de autenticação, tipo de autenticação,
        MFA, políticas de senha e LDAP.'
    CfgInstanceLog:
      type: object
      properties:
        Verbose:
          type: integer
          format: int64
          description: Nível de detalhe do log.
        Console:
          type: integer
          format: int64
          description: '`1` também exibe as mensagens no console.'
        External:
          type: integer
          format: int64
          description: '`1` envia as mensagens para um programa externo.'
        ExecProg:
          type: string
          description: Programa externo que recebe as mensagens.
        DLLName:
          type: string
          description: Biblioteca de acesso ao banco de log.
        DBName:
          type: string
          description: Nome do banco de log.
        DBHost:
          type: string
          description: Servidor do banco de log.
        DBPort:
          type: integer
          format: int64
          description: Porta do banco de log.
        DBUser:
          type: string
          description: Usuário do banco de log.
        DBPswd:
          type: string
          format: password
          description: 'Senha do banco de log. Dado sensível: volta mascarado nas consultas.'
        FilterRegEx:
          type: string
          description: Expressão regular das mensagens registradas.
        FilterRegExNeg:
          type: string
          description: Expressão regular das mensagens ignoradas.
      description: 'Log da instância: banco de log, nível de detalhe e filtros.'
    CfgInstanceStartup:
      type: object
      properties:
        Version:
          type: string
          description: Versão da instância.
        OSType:
          type: string
          description: 'Sistema operacional: `LINUX`, `WINNT`, `WIN32` ou `MACOS`.'
        ServiceName:
          type: string
          description: Nome do serviço no sistema operacional.
        ServiceDescription:
          type: string
          description: Descrição do serviço no sistema operacional.
        SystemDirectory:
          type: string
          description: Diretório de sistema da instância.
        KeystoreDirectory:
          type: string
          description: Diretório das chaves e certificados.
        DataDirectory:
          type: string
          description: Diretório das caixas postais dos usuários.
        TempDirectoryName:
          type: string
          description: Nome do diretório temporário de cada caixa postal.
        ControlDirectoryName:
          type: string
          description: Nome do diretório de controle de cada caixa postal.
        FormatDirectoryName:
          type: string
          description: Nome do diretório de formatação de cada caixa postal.
        InboxDirectoryName:
          type: string
          description: Nome do diretório de entrada de cada caixa postal.
        RestartDirectoryName:
          type: string
          description: Nome do diretório de retomada de cada caixa postal.
        OutboxDirectoryName:
          type: string
          description: Nome do diretório de saída de cada caixa postal.
        PendingDirectoryName:
          type: string
          description: Nome do diretório de pendentes de cada caixa postal.
        BackupDirectoryName:
          type: string
          description: Nome do diretório de backup de cada caixa postal.
        LinkDirectoryName:
          type: string
          description: Nome do diretório de link de cada caixa postal.
        MaxSessions:
          type: integer
          format: int64
          description: Número máximo de sessões simultâneas da instância.
        IntervalSchedule:
          type: integer
          format: int64
          description: Intervalo de verificação das agendas.
        SerialNumber:
          type: string
          description: Número de série da licença.
        DisableSchedule:
          type: integer
          format: int64
          description: '`1` desabilita a execução das agendas.'
        ExternalLockEnable:
          type: integer
          format: int64
          description: '`1` habilita o lock externo.'
        ExternalLockTimeout:
          type: integer
          format: int64
          description: Tempo limite do lock externo.
        ExternalLockWait:
          type: integer
          format: int64
          description: Espera entre tentativas de obter o lock.
        ExternalLockRetries:
          type: integer
          format: int64
          description: Tentativas de obter o lock.
        ExternalLockType:
          type: string
          description: 'Provedor do lock externo: `in-memory`, `filesystem` ou `redis`.'
        ExternalLockAddress:
          type: string
          description: Endereço do serviço de lock externo (`host:porta`).
        MaximunConsoleMsgs:
          type: integer
          format: int64
          description: Número máximo de mensagens mantidas no console.
        MaximunAsyncProcesses:
          type: integer
          format: int64
          description: Número máximo de processos simultâneos.
        MaxMonitorSessions:
          type: integer
          format: int64
          description: Número máximo de sessões de supervisão.
        ssoProviders:
          type: array
          items:
            $ref: '#/components/schemas/SsoProvider'
          description: Provedores de identidade (SSO).
      description: 'Inicialização da instância: serviço, diretórios, sessões, lock externo e provedores SSO.'
    SsoProvider:
      type: object
      properties:
        ssoEnable:
          type: boolean
          description: Habilita o provedor.
        ssoName:
          type: string
          description: Nome do provedor. `google`, `microsoft` e `apple` têm tratamento específico.
        ssoType:
          type: string
          description: 'Tipo: `oauth2`, `saml2`, `jwt` ou `ldap`.'
        ssoClientId:
          type: string
          description: ID da aplicação (OAuth 2.0/SAML 2.0) ou usuário (LDAP).
        ssoClientSecret:
          type: string
          format: password
          description: 'Segredo da aplicação (OAuth 2.0/SAML 2.0) ou senha (LDAP). Dado sensível: volta mascarado nas consultas.'
        ssoTenantOrTeamId:
          type: string
          description: Tenant (Microsoft), Team ID (Apple) ou domínio (LDAP).
        ssoPrivateKeyFile:
          type: string
          description: Chave privada de assinatura (Apple, JWT ou SAML 2.0).
        ssoPrivateKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada. Dado sensível: volta mascarado nas consultas.'
        ssoPrivateKeyId:
          type: string
          description: ID da chave de assinatura (Apple ou JWT).
        ssoScope:
          type: string
          description: Escopos (OAuth 2.0), filtro de busca (LDAP) ou claim `scope` (JWT).
        ssoAudience:
          type: string
          description: Audience esperado ou emitido (SAML 2.0 ou JWT). Se omitido, usa `ssoTenantOrTeamId` (SAML 2.0) ou `ssoClientId`
            (JWT).
        ssoCertsUrl:
          type: string
          description: Certificados para validar o ID token (OAuth 2.0) ou a assinatura do JWT.
        ssoAuthUrl:
          type: string
          description: URL de autorização (OAuth 2.0) ou metadata do IdP (SAML 2.0).
        ssoTokenUrl:
          type: string
          description: URL de obtenção do token (OAuth 2.0).
        ssoLogoutUrl:
          type: string
          description: URL de logout/end session do IdP (OAuth 2.0).
        ssoRedirectUrlOrEndpoint:
          type: string
          description: Callback de login (OAuth 2.0), ACS (SAML 2.0) ou endpoint de conexão (LDAP).
        ssoRedirectLogoutUrl:
          type: string
          description: Callback de logout (OAuth 2.0, SAML 2.0). Obrigatório no OAuth 2.0 para provedores com retorno de logout,
            como a Microsoft.
        ssoAppRedirectUrl:
          type: string
          description: Destino do operador após o logout (OAuth 2.0, SAML 2.0).
        ssoMethodName:
          type: string
          description: Algoritmo de assinatura do JWT.
        ssoTokenExpirationTime:
          type: integer
          description: Validade padrão do JWT, em segundos.
      description: Provedor de identidade (SSO).
    CfgUser:
      type: object
      properties:
        Entity:
          $ref: '#/components/schemas/CfgEntity'
        General:
          $ref: '#/components/schemas/CfgUserGeneral'
        Token:
          $ref: '#/components/schemas/CfgUserToken'
        Net1:
          $ref: '#/components/schemas/CfgUserNet'
        Net2:
          $ref: '#/components/schemas/CfgUserNet'
        OFTP:
          $ref: '#/components/schemas/CfgUserOFTP'
        SFTP:
          $ref: '#/components/schemas/CfgUserSFTP'
        S3:
          $ref: '#/components/schemas/CfgUserS3'
        AzBlob:
          $ref: '#/components/schemas/CfgUserAzBlob'
        OciBlob:
          $ref: '#/components/schemas/CfgUserOciBlob'
        GcpBlob:
          $ref: '#/components/schemas/CfgUserGcpBlob'
        WhatsApp:
          $ref: '#/components/schemas/CfgUserWhatsApp'
        AS2:
          $ref: '#/components/schemas/CfgUserAS2'
        FTP:
          $ref: '#/components/schemas/CfgUserFTP'
        WebHook:
          $ref: '#/components/schemas/CfgUserWebHook'
      description: '`CONFIG_TXT` do usuário de transferência. Preencha a seção do protocolo indicado em `General.TransferProtocol`.'
    CfgUserGeneral:
      type: object
      properties:
        IdCodeProfile:
          type: string
          description: Identificação do usuário.
        Description:
          type: string
          description: Descrição.
        Email:
          type: string
          description: E-mail do usuário.
        Mobile:
          type: string
          description: Celular do usuário.
        Password:
          type: string
          format: password
          description: 'Senha do usuário. Dado sensível: volta mascarado nas consultas.'
        MaxSessions:
          type: integer
          format: int64
          description: Número máximo de sessões simultâneas.
        EnabledEERP:
          type: integer
          format: int64
          description: '`1` habilita o EERP (confirmação de entrega do OFTP).'
        Backup:
          type: integer
          format: int64
          description: '`1` mantém cópia dos arquivos transmitidos.'
        Locked:
          type: integer
          format: int64
          description: '`1` = bloqueado; `0` = liberado.'
        AuthPswdNeverExpire:
          type: integer
          format: int64
          description: '`1` = a senha não expira.'
        ConnectionBeforeCommand:
          type: string
          description: Comando executado antes da conexão.
        ConnectionStartCommand:
          type: string
          description: Comando executado no início da conexão.
        ConnectionStartCommandWait:
          type: integer
          format: int64
          description: '`1` aguarda o fim do comando.'
        ConnectionEndCommand:
          type: string
          description: Comando executado no fim da conexão.
        ConnectionEndCommandWait:
          type: integer
          format: int64
          description: '`1` aguarda o fim do comando.'
        ConnectionBeforeCommandWait:
          type: integer
          format: int64
          description: '`1` aguarda o fim do comando.'
        FileMinLenFilterTx:
          type: integer
          format: int64
          description: Tamanho mínimo dos arquivos transmitidos.
        FileMinLenFilterRx:
          type: integer
          format: int64
          description: Tamanho mínimo dos arquivos recebidos.
        FileTypeDefault:
          type: string
          description: Tipo de arquivo padrão.
        ConnectionFilter:
          type: string
          description: Filtro de endereços de origem aceitos na conexão.
        FileFilterTx:
          type: string
          description: Filtro (máscara) dos arquivos transmitidos.
        FileFilterRx:
          type: string
          description: Filtro (máscara) dos arquivos recebidos.
        FileLenFilterTx:
          type: integer
          format: int64
          description: Tamanho máximo dos arquivos transmitidos.
        FileLenFilterRx:
          type: integer
          format: int64
          description: Tamanho máximo dos arquivos recebidos.
        FileUserdataWithFileIdTx:
          type: integer
          format: int64
        CreateControlCompletedFileRx:
          type: integer
          format: int64
          description: 'Arquivo de controle de recepção concluída: `0` desabilitado, `1` habilitado com timestamp, `2` habilitado.'
        StartDateHour:
          type: integer
          format: int64
          description: Hora de início da janela de horário.
        StartDateMinute:
          type: integer
          format: int64
          description: Minuto de início da janela de horário.
        StartDateSecond:
          type: integer
          format: int64
          description: Segundo de início da janela de horário.
        EndDateHour:
          type: integer
          format: int64
          description: Hora de fim da janela de horário.
        EndDateMinute:
          type: integer
          format: int64
          description: Minuto de fim da janela de horário.
        EndDateSecond:
          type: integer
          format: int64
          description: Segundo de fim da janela de horário.
        WeekDayInterval:
          type: integer
          format: int64
          description: Dias da semana da janela de horário.
        TransferProtocol:
          type: integer
          format: int64
          description: 'Protocolo da conexão de saída: `0` desabilitado, `1` OFTP, `2` SFTP, `4` Amazon S3, `5` Azure Blob
            Storage, `6` OCI Object Storage, `7` Google Cloud Storage, `8` WhatsApp, `9` FTP, `10` AS2, `11` Webhook.'
        TxOptimized:
          type: integer
          format: int64
          description: '`1` habilita a transmissão otimizada.'
        AuthMFAMethod:
          type: integer
          format: int64
          description: 'MFA do usuário: `0` segue a instância; `128` desabilitado para este usuário.'
        TransferProtocolIn:
          type: integer
          format: int64
          description: 'Protocolos aceitos na conexão de entrada, como soma de `2^protocolo` (códigos de `TransferProtocol`).
            Exemplo: OFTP e SFTP = `2 + 4` = `6`.'
      description: 'Dados gerais do usuário: identificação, senha, protocolo, sessões, filtros de arquivo, comandos da conexão
        e janela de horário.'
    CfgUserToken:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        CheckTokenId:
          type: integer
          format: int64
          description: '`1` exige o token na autenticação do usuário.'
        SendTokenId:
          type: integer
          format: int64
          description: '`1` envia o token na conexão.'
        Token:
          type: string
          format: password
          description: 'Token do usuário. Dado sensível: volta mascarado nas consultas.'
      description: Token de autenticação do usuário.
    CfgUserNet:
      type: object
      properties:
        Enable:
          type: integer
          format: int64
          description: '`1` habilita a rede.'
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        DLLName:
          type: string
          description: Biblioteca do módulo.
        Type:
          type: string
        Mode:
          type: string
        FTPDownloadRemoteDir:
          type: string
          description: Diretório remoto de onde os arquivos são baixados.
        FTPDownloadRemoteFileMask:
          type: string
          description: Máscara dos arquivos baixados.
        FTPDownloadRemoteFileRemove:
          type: integer
          format: int64
          description: '`1` remove o arquivo remoto após o download.'
        FTPDownloadRemoteTmpDir:
          type: string
          description: Diretório remoto temporário usado no download.
        FTPDownloadRemoteTmpExt:
          type: string
          description: Extensão temporária usada no download.
        FTPMaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        FTPPassive:
          type: integer
          format: int64
          description: '`1` usa modo passivo. Ignorado no Riversoft STCP DirectLink, que sempre usa o modo passivo.'
        FTPProxyEnabled:
          type: integer
          format: int64
          description: '`1` usa proxy; `0` não usa.'
        FTPProxyType:
          type: integer
          format: int64
          description: '`0` SOCKS4, `1` SOCKS5, `2` HTTP, `3` HTTPS, `4` FTP.'
        FTPProxyAuth:
          type: integer
          format: int64
          description: 'Autenticação no proxy. HTTP: `0` Basic, `1` NTLM. FTP: `0` nenhuma, `1` SITE, `2` USER@SITE, `3` USER
            com login, `4` USER/PASS/ACCT, `5` OPEN, `6` firewall SITE.'
        FTPProxyRemoteAddress:
          type: string
          description: Endereço do proxy.
        FTPProxyRemotePort:
          type: integer
          format: int64
          description: Porta do proxy.
        FTPProxyUserName:
          type: string
          description: Usuário do proxy.
        FTPProxyUserPswd:
          type: string
          format: password
          description: 'Senha do proxy. Dado sensível: volta mascarado nas consultas.'
        FTPRemoteAddress:
          type: string
          description: Endereço do servidor remoto.
        FTPRemotePort:
          type: integer
          format: int64
          description: Porta do servidor remoto.
        FTPLocalAddress:
          type: string
          description: Endereço local de origem da conexão.
        FTPLocalPort:
          type: integer
          format: int64
          description: Porta local de origem da conexão.
        FTPSecurity:
          type: integer
          format: int64
          description: Nível de segurança (TLS) da conexão.
        FTPSSLCAField:
          type: string
          description: Ignorado no Riversoft STCP DirectLink.
        FTPSSLCAValue:
          type: string
          description: Ignorado no Riversoft STCP DirectLink.
        FTPSSLCAFile:
          type: string
          description: Arquivo da CA.
        FTPSSLCiphers:
          type: string
          description: Cifras TLS aceitas.
        FTPSSLVerifyCerts:
          type: integer
          format: int64
          description: '`1` valida o certificado do servidor.'
        FTPSSLCertFile:
          type: string
          description: Certificado do cliente.
        FTPSSLClientPrivKeyFile:
          type: string
          description: Chave privada do cliente.
        FTPSSLClientPrivKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada do cliente. Dado sensível: volta mascarado nas consultas.'
        FTPUploadRemoteDir:
          type: string
          description: Diretório remoto para onde os arquivos são enviados.
        FTPUploadRemoteTmpDir:
          type: string
          description: Diretório remoto temporário usado no envio.
        FTPUploadRemoteTmpExt:
          type: string
          description: Extensão temporária usada no envio.
        FTPDownloadCheckSizeDisabled:
          type: integer
          format: int64
        FTPDownloadType:
          type: string
        FTPDirSeparator:
          type: string
        SFTPDownloadRemoteDir:
          type: string
          description: Diretório remoto de onde os arquivos são baixados.
        SFTPDownloadRemoteFileMask:
          type: string
          description: Máscara dos arquivos baixados.
        SFTPDownloadRemoteFileRemove:
          type: integer
          format: int64
          description: '`1` remove o arquivo remoto após o download.'
        SFTPDownloadRemoteTmpDir:
          type: string
          description: Diretório remoto temporário usado no download.
        SFTPDownloadRemoteTmpExt:
          type: string
          description: Extensão temporária usada no download.
        SFTPMaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        SFTPProxyEnabled:
          type: integer
          format: int64
          description: '`1` usa proxy; `0` não usa.'
        SFTPProxyType:
          type: integer
          format: int64
          description: '`0` SOCKS4, `1` SOCKS5, `2` HTTP, `3` HTTPS, `4` FTP.'
        SFTPProxyAuth:
          type: integer
          format: int64
          description: 'Autenticação no proxy. HTTP: `0` Basic, `1` NTLM. FTP: `0` nenhuma, `1` SITE, `2` USER@SITE, `3` USER
            com login, `4` USER/PASS/ACCT, `5` OPEN, `6` firewall SITE.'
        SFTPProxyRemoteAddress:
          type: string
          description: Endereço do proxy.
        SFTPProxyRemotePort:
          type: integer
          format: int64
          description: Porta do proxy.
        SFTPProxyUserName:
          type: string
          description: Usuário do proxy.
        SFTPProxyUserPswd:
          type: string
          format: password
          description: 'Senha do proxy. Dado sensível: volta mascarado nas consultas.'
        SFTPRemoteAddress:
          type: string
          description: Endereço do servidor remoto.
        SFTPRemotePort:
          type: integer
          format: int64
          description: Porta do servidor remoto.
        SFTPLocalAddress:
          type: string
          description: Endereço local de origem da conexão.
        SFTPLocalPort:
          type: integer
          format: int64
          description: Porta local de origem da conexão.
        SFTPSecurity:
          type: integer
          format: int64
          description: Nível de segurança (TLS) da conexão.
        SFTPSSLClientPrivKeyFile:
          type: string
          description: Chave privada do cliente.
        SFTPSSLClientPrivKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada do cliente. Dado sensível: volta mascarado nas consultas.'
        SFTPSSLServerFingerPrint:
          type: string
          description: Fingerprint esperado da chave do servidor.
        SFTPUploadRemoteDir:
          type: string
          description: Diretório remoto para onde os arquivos são enviados.
        SFTPUploadRemoteTmpDir:
          type: string
          description: Diretório remoto temporário usado no envio.
        SFTPUploadRemoteTmpExt:
          type: string
          description: Extensão temporária usada no envio.
        SFTPCipher:
          type: string
          description: Cifras aceitas.
        TCPAuthentication:
          type: integer
          format: int64
        TCPCompress:
          type: integer
          format: int64
          description: '`1` habilita a compressão.'
        TCPCryptLevel:
          type: integer
          format: int64
        TCPLocalAddress:
          type: string
          description: Endereço local de origem da conexão.
        TCPLocalPort:
          type: integer
          format: int64
          description: Porta local de origem da conexão.
        TCPMaxRecvBuf:
          type: integer
          format: int64
          description: Tamanho do buffer de recepção.
        TCPMaxSendBuf:
          type: integer
          format: int64
          description: Tamanho do buffer de envio.
        TCPProxyEnabled:
          type: integer
          format: int64
          description: '`1` usa proxy; `0` não usa.'
        TCPProxyType:
          type: integer
          format: int64
          description: '`0` SOCKS4, `1` SOCKS5, `2` HTTP, `3` HTTPS, `4` FTP.'
        TCPProxyAuth:
          type: integer
          format: int64
          description: 'Autenticação no proxy. HTTP: `0` Basic, `1` NTLM. FTP: `0` nenhuma, `1` SITE, `2` USER@SITE, `3` USER
            com login, `4` USER/PASS/ACCT, `5` OPEN, `6` firewall SITE.'
        TCPProxyRemoteAddress:
          type: string
          description: Endereço do proxy.
        TCPProxyRemotePort:
          type: integer
          format: int64
          description: Porta do proxy.
        TCPProxyUserName:
          type: string
          description: Usuário do proxy.
        TCPProxyUserPswd:
          type: string
          format: password
          description: 'Senha do proxy. Dado sensível: volta mascarado nas consultas.'
        TCPRemoteAddress:
          type: string
          description: Endereço do servidor remoto.
        TCPRemotePort:
          type: integer
          format: int64
          description: Porta do servidor remoto.
        TCPRfc2204:
          type: integer
          format: int64
        TCPSecurity:
          type: integer
          format: int64
          description: Nível de segurança (TLS) da conexão.
        TCPSSLCAFile:
          type: string
          description: Arquivo da CA.
        TCPSSLCAPath:
          type: string
          description: Diretório das CAs.
        TCPSSLCertFile:
          type: string
          description: Certificado do cliente.
        TCPSSLCipher:
          type: string
          description: Cifras TLS aceitas.
        TCPSSLDebugDir:
          type: string
          description: Diretório do debug do TLS.
        TCPSSLDebugLevel:
          type: integer
          format: int64
          description: Nível de debug do TLS.
        TCPSSLPrivKeyFile:
          type: string
          description: Chave privada.
        TCPSSLPrivKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada. Dado sensível: volta mascarado nas consultas.'
        TCPIPv6:
          type: integer
          format: int64
          description: '`1` usa IPv6.'
        TCPMaxListen:
          type: integer
          format: int64
          description: Tamanho da fila de conexões pendentes.
        TCPMaxRecvTO:
          type: integer
          format: int64
          description: Tempo limite de recepção.
        TCPMaxSendTO:
          type: integer
          format: int64
          description: Tempo limite de envio.
        TCPSSLDHFile:
          type: string
          description: Arquivo de parâmetros Diffie-Hellman.
        TCPSSLVerifyCert:
          type: integer
          format: int64
          description: '`1` valida o certificado do servidor.'
        TCPSSLOldVersionsEnabled:
          type: integer
          format: int64
          description: '`1` aceita versões antigas do TLS.'
        S3Endpoint:
          type: string
          description: Endpoint do serviço.
        S3Region:
          type: string
          description: Região.
        S3DownloadBucket:
          type: string
          description: Bucket de onde os arquivos são baixados.
        S3DownloadPrefix:
          type: string
          description: Prefixo (pasta) dos objetos baixados.
        S3DownloadDelimiter:
          type: string
          description: Delimitador de pastas na listagem.
        S3DownloadRemoteFileMask:
          type: string
          description: Máscara dos arquivos baixados.
        S3DownloadRemoteFileRemove:
          type: integer
          format: int64
          description: '`1` remove o arquivo remoto após o download.'
        S3DownloadRemoteTmpDir:
          type: string
          description: Diretório remoto temporário usado no download.
        S3DownloadRemoteTmpExt:
          type: string
          description: Extensão temporária usada no download.
        S3UploadBucket:
          type: string
          description: Bucket para onde os arquivos são enviados.
        S3UploadPrefix:
          type: string
          description: Prefixo (pasta) dos objetos enviados.
        S3VerifyBuckets:
          type: integer
          format: int64
          description: '`1` verifica a existência dos buckets.'
        AzBlobEndpoint:
          type: string
          description: Endpoint do serviço.
        AzBlobDownloadContainer:
          type: string
          description: Container de onde os arquivos são baixados.
        AzBlobDownloadPrefix:
          type: string
          description: Prefixo (pasta) dos objetos baixados.
        AzBlobDownloadRemoteFileMask:
          type: string
          description: Máscara dos arquivos baixados.
        AzBlobDownloadRemoteFileRemove:
          type: integer
          format: int64
          description: '`1` remove o arquivo remoto após o download.'
        AzBlobDownloadRemoteTmpDir:
          type: string
          description: Diretório remoto temporário usado no download.
        AzBlobDownloadRemoteTmpExt:
          type: string
          description: Extensão temporária usada no download.
        AzBlobUploadContainer:
          type: string
          description: Container para onde os arquivos são enviados.
        AzBlobUploadPrefix:
          type: string
          description: Prefixo (pasta) dos objetos enviados.
        OciBlobEndpoint:
          type: string
          description: Endpoint do serviço.
        OciBlobTenancy:
          type: string
          description: Tenancy (OCID) da OCI.
        OciBlobRegion:
          type: string
          description: Região.
        OciBlobDownloadBucket:
          type: string
          description: Bucket de onde os arquivos são baixados.
        OciBlobDownloadPrefix:
          type: string
          description: Prefixo (pasta) dos objetos baixados.
        OciBlobDownloadDelimiter:
          type: string
          description: Delimitador de pastas na listagem.
        OciBlobDownloadRemoteFileMask:
          type: string
          description: Máscara dos arquivos baixados.
        OciBlobDownloadRemoteFileRemove:
          type: integer
          format: int64
          description: '`1` remove o arquivo remoto após o download.'
        OciBlobDownloadRemoteTmpDir:
          type: string
          description: Diretório remoto temporário usado no download.
        OciBlobDownloadRemoteTmpExt:
          type: string
          description: Extensão temporária usada no download.
        OciBlobUploadBucket:
          type: string
          description: Bucket para onde os arquivos são enviados.
        OciBlobUploadPrefix:
          type: string
          description: Prefixo (pasta) dos objetos enviados.
        GcpBlobEndpoint:
          type: string
          description: Endpoint do serviço.
        GcpBlobRegion:
          type: string
          description: Região.
        GcpBlobDownloadBucket:
          type: string
          description: Bucket de onde os arquivos são baixados.
        GcpBlobDownloadPrefix:
          type: string
          description: Prefixo (pasta) dos objetos baixados.
        GcpBlobDownloadDelimiter:
          type: string
          description: Delimitador de pastas na listagem.
        GcpBlobDownloadRemoteFileMask:
          type: string
          description: Máscara dos arquivos baixados.
        GcpBlobDownloadRemoteFileRemove:
          type: integer
          format: int64
          description: '`1` remove o arquivo remoto após o download.'
        GcpBlobDownloadRemoteTmpDir:
          type: string
          description: Diretório remoto temporário usado no download.
        GcpBlobDownloadRemoteTmpExt:
          type: string
          description: Extensão temporária usada no download.
        GcpBlobUploadBucket:
          type: string
          description: Bucket para onde os arquivos são enviados.
        GcpBlobUploadPrefix:
          type: string
          description: Prefixo (pasta) dos objetos enviados.
        WhatsAppEndpoint:
          type: string
          description: Endpoint do serviço.
        WhatsAppDownloadMode:
          type: integer
          format: int64
          description: 'Modo de download do documento: `0` ID do documento na Meta, `1` link da Meta, `2` link seguro sem
            senha, `3` link seguro com senha.'
        WhatsAppSecureLinkEndpoint:
          type: string
          description: Endpoint da API de link seguro.
        AS2PartnerUrl:
          type: string
          description: URL do parceiro.
        AS2ProxyEnabled:
          type: integer
          format: int64
          description: '`1` usa proxy; `0` não usa.'
        AS2ProxyType:
          type: integer
          format: int64
          description: '`0` SOCKS4, `1` SOCKS5, `2` HTTP, `3` HTTPS, `4` FTP.'
        AS2ProxyAuth:
          type: integer
          format: int64
          description: 'Autenticação no proxy. HTTP: `0` Basic, `1` NTLM. FTP: `0` nenhuma, `1` SITE, `2` USER@SITE, `3` USER
            com login, `4` USER/PASS/ACCT, `5` OPEN, `6` firewall SITE.'
        AS2ProxyRemoteAddress:
          type: string
          description: Endereço do proxy.
        AS2ProxyRemotePort:
          type: integer
          format: int64
          description: Porta do proxy.
        AS2ProxyUserName:
          type: string
          description: Usuário do proxy.
        AS2ProxyUserPswd:
          type: string
          format: password
          description: 'Senha do proxy. Dado sensível: volta mascarado nas consultas.'
        AS2LocalAddress:
          type: string
          description: Endereço local de origem da conexão.
        AS2LocalPort:
          type: integer
          format: int64
          description: Porta local de origem da conexão.
        AS2TLSClientPrivKeyFile:
          type: string
          description: Chave privada do cliente.
        AS2TLSClientPrivKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada do cliente. Dado sensível: volta mascarado nas consultas.'
        AS2TLSCertFile:
          type: string
          description: Certificado do cliente.
        AS2TLSCAFile:
          type: string
          description: Arquivo da CA.
        AS2TLSSCiphers:
          type: string
          description: Cifras TLS aceitas.
        AS2TLSVerifyCerts:
          type: integer
          format: int64
          description: '`1` valida o certificado do servidor.'
        WebHookPartnerUrl:
          type: string
          description: URL do parceiro.
        WebHookProxyEnabled:
          type: integer
          format: int64
          description: '`1` usa proxy; `0` não usa.'
        WebHookProxyType:
          type: integer
          format: int64
          description: '`0` SOCKS4, `1` SOCKS5, `2` HTTP, `3` HTTPS, `4` FTP.'
        WebHookProxyAuth:
          type: integer
          format: int64
          description: 'Autenticação no proxy. HTTP: `0` Basic, `1` NTLM. FTP: `0` nenhuma, `1` SITE, `2` USER@SITE, `3` USER
            com login, `4` USER/PASS/ACCT, `5` OPEN, `6` firewall SITE.'
        WebHookProxyRemoteAddress:
          type: string
          description: Endereço do proxy.
        WebHookProxyRemotePort:
          type: integer
          format: int64
          description: Porta do proxy.
        WebHookProxyUserName:
          type: string
          description: Usuário do proxy.
        WebHookProxyUserPswd:
          type: string
          format: password
          description: 'Senha do proxy. Dado sensível: volta mascarado nas consultas.'
        WebHookLocalAddress:
          type: string
          description: Endereço local de origem da conexão.
        WebHookLocalPort:
          type: integer
          format: int64
          description: Porta local de origem da conexão.
        WebHookTLSClientPrivKeyFile:
          type: string
          description: Chave privada do cliente.
        WebHookTLSClientPrivKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada do cliente. Dado sensível: volta mascarado nas consultas.'
        WebHookTLSCertFile:
          type: string
          description: Certificado do cliente.
        WebHookTLSCAFile:
          type: string
          description: Arquivo da CA.
        WebHookTLSSCiphers:
          type: string
          description: Cifras TLS aceitas.
        WebHookTLSVerifyCerts:
          type: integer
          format: int64
          description: '`1` valida o certificado do servidor.'
      description: 'Rede da conexão. Os campos têm o prefixo do protocolo (`TCP`, `FTP`, `SFTP`, `S3`, `AzBlob`, `OciBlob`,
        `GcpBlob`, `WhatsApp`, `AS2`, `WebHook`): preencha somente os do protocolo usado. `Net1` é a rede principal e `Net2`,
        a alternativa.'
    CfgUserOFTP:
      type: object
      properties:
        Idcode:
          type: string
          description: Identificação (login) no protocolo.
        Password:
          type: string
          format: password
          description: 'Senha. Dado sensível: volta mascarado nas consultas.'
        UserData:
          type: string
          description: Userdata do protocolo.
        Level:
          type: string
          description: Versão do protocolo OFTP.
        DLLName:
          type: string
          description: Biblioteca do módulo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        Compression:
          type: integer
          format: int64
          description: '`1` habilita a compressão.'
        SpecialLogic:
          type: integer
          format: int64
        Credits:
          type: integer
          format: int64
          description: Créditos (janela de mensagens) do OFTP.
        Restart:
          type: integer
          format: int64
          description: '`1` habilita a retomada de transferências interrompidas.'
        MaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        T1:
          type: integer
          format: int64
        T2:
          type: integer
          format: int64
        NumMaxRetry:
          type: integer
          format: int64
          description: Número máximo de tentativas.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        MaxLenDsn:
          type: integer
          format: int64
          description: Tamanho máximo do nome do arquivo (DSN).
        Authentication:
          type: integer
          format: int64
        LocalPrivateKeyFile:
          type: string
          description: Chave privada local (OFTP 2).
        LocalPrivateKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada local. Dado sensível: volta mascarado nas consultas.'
        LocalCertFile:
          type: string
          description: Certificado local (OFTP 2).
        RemoteCertFile:
          type: string
          description: Certificado do parceiro (OFTP 2).
      description: Protocolo OFTP do usuário.
    CfgUserSFTP:
      type: object
      properties:
        Idcode:
          type: string
          description: Identificação (login) no protocolo.
        Password:
          type: string
          format: password
          description: 'Senha. Dado sensível: volta mascarado nas consultas.'
        UserData:
          type: string
          description: Userdata do protocolo.
        DLLName:
          type: string
          description: Biblioteca do módulo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        MaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        MaxLenDsn:
          type: integer
          format: int64
          description: Tamanho máximo do nome do arquivo (DSN).
        SFTPSysdateFormat:
          type: string
          description: Formato da data usado nos nomes de arquivo.
        PublicKey:
          type: string
          description: Chave pública do usuário.
      description: Protocolo SFTP do usuário.
    CfgUserS3:
      type: object
      properties:
        Idcode:
          type: string
          description: Identificação (login) no protocolo.
        SecretCode:
          type: string
          format: password
          description: 'Segredo de acesso. Dado sensível: volta mascarado nas consultas.'
        AccessToken:
          type: string
          format: password
          description: 'Token de acesso. Dado sensível: volta mascarado nas consultas.'
        Userdata:
          type: string
          description: Userdata do protocolo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        MaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
      description: Armazenamento em nuvem Amazon S3.
    CfgUserAzBlob:
      type: object
      properties:
        Idcode:
          type: string
          description: Identificação (login) no protocolo.
        SecretCode:
          type: string
          format: password
          description: 'Segredo de acesso. Dado sensível: volta mascarado nas consultas.'
        AccessToken:
          type: string
          format: password
          description: 'Token de acesso. Dado sensível: volta mascarado nas consultas.'
        Userdata:
          type: string
          description: Userdata do protocolo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        MaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
      description: Armazenamento em nuvem Azure Blob Storage.
    CfgUserOciBlob:
      type: object
      properties:
        Idcode:
          type: string
          description: Identificação (login) no protocolo.
        PrivateKey:
          type: string
          format: password
          description: 'Chave privada da API OCI. Dado sensível: volta mascarado nas consultas.'
        PrivateKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada. Dado sensível: volta mascarado nas consultas.'
        Fingerprint:
          type: string
          description: Fingerprint da chave da API OCI.
        Userdata:
          type: string
          description: Userdata do protocolo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        MaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
      description: Armazenamento em nuvem OCI Object Storage.
    CfgUserGcpBlob:
      type: object
      properties:
        Idcode:
          type: string
          description: Identificação (login) no protocolo.
        AccessKey:
          type: string
          format: password
          description: 'Chave ou token de acesso. Dado sensível: volta mascarado nas consultas.'
        Userdata:
          type: string
          description: Userdata do protocolo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        MaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
      description: Armazenamento em nuvem Google Cloud Storage.
    CfgUserWhatsApp:
      type: object
      properties:
        Idcode:
          type: string
          description: ID do número de telefone no WhatsApp Business.
        AccessKey:
          type: string
          format: password
          description: 'Token da credencial de sistema da Meta. Dado sensível: volta mascarado nas consultas.'
        Userdata:
          type: string
          description: Userdata do protocolo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        MaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
      description: Envio pelo WhatsApp Business.
    CfgUserAS2:
      type: object
      properties:
        Idcode:
          type: string
          description: AS2 ID local.
        Userdata:
          type: string
          description: Userdata do protocolo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        Domain:
          type: string
          description: Domínio usado na geração do Message-ID.
        PartnerSignatureCert:
          type: string
          description: Certificado de assinatura do parceiro.
        PartnerEncryptCert:
          type: string
          description: Certificado de criptografia do parceiro.
        MyAlgId:
          type: integer
          description: Conjunto de algoritmos de hash, assinatura e criptografia.
        MySignatureKey:
          type: string
          description: Chave privada de assinatura.
        MySignatureCert:
          type: string
          description: Certificado de assinatura.
        MyEncryptKey:
          type: string
          description: Chave privada de criptografia.
        MyEncryptCert:
          type: string
          description: Certificado de criptografia.
        MDNOptions:
          type: integer
          format: int64
          description: 'Opções do MDN, como soma: `1` habilitado, `2` assinado, `4` assíncrono, `8` criptografado.'
        MDNAsyncURL:
          type: string
          description: URL de entrega do MDN assíncrono.
        AuthMode:
          type: integer
          description: 'Autenticação no parceiro: `0` nenhuma, `1` Basic, `2` Bearer.'
        AuthUsername:
          type: string
          description: Usuário da autenticação Basic.
        AuthPassword:
          type: string
          format: password
          description: 'Senha da autenticação Basic. Dado sensível: volta mascarado nas consultas.'
        SendDocumentOptions:
          type: integer
          description: 'Opções do documento enviado. Soma dos valores: `1` assinado (multipart), `2` assinado, `4` criptografado,
            `8` comprimido. `0` = nenhum.'
        RequiredDocumentOptions:
          type: integer
          description: 'Opções exigidas no documento recebido. Soma dos valores: `1` assinado (multipart), `2` assinado, `4`
            criptografado, `8` comprimido. `0` = nenhum.'
        BERCompatibility:
          type: boolean
          description: Compatibilidade com a codificação BER/DER.
      description: 'Protocolo AS2 do usuário: identificação, certificados, MDN e opções do documento.'
    CfgUserFTP:
      type: object
      properties:
        Idcode:
          type: string
          description: Identificação (login) no protocolo.
        Password:
          type: string
          format: password
          description: 'Senha. Dado sensível: volta mascarado nas consultas.'
        UserData:
          type: string
          description: Userdata do protocolo.
        DLLName:
          type: string
          description: Biblioteca do módulo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        MaxBufSize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        MLSD:
          type: integer
          format: int64
          description: '`1` usa o comando MLSD para listar diretórios.'
      description: Protocolo FTP/FTPS do usuário.
    CfgUserWebHook:
      type: object
      properties:
        Idcode:
          type: string
          description: Identificação local do Webhook.
        Userdata:
          type: string
          description: Userdata do protocolo.
        InitMode:
          type: string
          description: '`Both`, `Initiator` (inicia a conexão) ou `Responder` (aguarda a conexão).'
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        PartnerSignatureCert:
          type: string
          description: Certificado de assinatura do parceiro.
        PartnerEncryptCert:
          type: string
          description: Certificado de criptografia do parceiro.
        MyAlgId:
          type: integer
          description: Conjunto de algoritmos de hash, assinatura e criptografia.
        MySignatureKey:
          type: string
          description: Chave privada de assinatura.
        MySignatureCert:
          type: string
          description: Certificado de assinatura.
        MyEncryptKey:
          type: string
          description: Chave privada de criptografia.
        MyEncryptCert:
          type: string
          description: Certificado de criptografia.
        AuthMode:
          type: integer
          description: 'Autenticação no parceiro: `0` nenhuma, `1` Basic, `2` Bearer.'
        AuthUsername:
          type: string
          description: Usuário da autenticação Basic.
        AuthPassword:
          type: string
          format: password
          description: 'Senha da autenticação Basic. Dado sensível: volta mascarado nas consultas.'
        SendDocumentOptions:
          type: integer
          description: 'Opções do documento enviado. Soma dos valores: `1` assinado (multipart), `2` assinado, `4` criptografado,
            `8` comprimido. `0` = nenhum.'
        RequiredDocumentOptions:
          type: integer
          description: 'Opções exigidas no documento recebido. Soma dos valores: `1` assinado (multipart), `2` assinado, `4`
            criptografado, `8` comprimido. `0` = nenhum.'
        BERCompatibility:
          type: boolean
          description: Compatibilidade com a codificação BER/DER.
      description: 'Conector Webhook do usuário: identificação, certificados e opções do documento.'
    CfgService:
      type: object
      properties:
        Entity:
          $ref: '#/components/schemas/CfgEntity'
        Service:
          $ref: '#/components/schemas/CfgService'
        Net1:
          $ref: '#/components/schemas/CfgServiceNetwork'
        OFTP:
          $ref: '#/components/schemas/CfgServiceOFTP'
        SFTP:
          $ref: '#/components/schemas/CfgServiceSFTP'
        API:
          $ref: '#/components/schemas/CfgServiceAPI'
        WhatsApp:
          $ref: '#/components/schemas/CfgServiceWhatsApp'
        AS2:
          $ref: '#/components/schemas/CfgServiceAS2'
        WebHook:
          $ref: '#/components/schemas/CfgServiceWebHook'
        Monitor:
          $ref: '#/components/schemas/CfgServiceMonitor'
      description: '`CONFIG_TXT` do serviço de rede. Preencha a seção do tipo indicado em `Service.ServiceType`.'
    CfgServiceNetwork:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        Mode:
          type: string
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        TCPCompress:
          type: integer
          format: int64
          description: '`1` habilita a compressão.'
        TCPSSLDHParam:
          type: string
          description: Arquivo de parâmetros Diffie-Hellman.
        TCPLocalAddress:
          type: string
          description: Endereço em que o serviço escuta.
        TCPLocalPort:
          type: integer
          format: int64
          description: Porta em que o serviço escuta.
        TCPMaxRecvBuf:
          type: integer
          format: int64
          description: Tamanho do buffer de recepção.
        TCPMaxSendBuf:
          type: integer
          format: int64
          description: Tamanho do buffer de envio.
        TCPRfc2204:
          type: integer
          format: int64
        TCPSecurity:
          type: integer
          format: int64
          description: Nível de segurança (TLS) da conexão.
        TCPSSLCAFile:
          type: string
          description: Arquivo da CA.
        TCPSSLCAPath:
          type: string
          description: Diretório das CAs.
        TCPSSLCertFile:
          type: string
          description: Certificado do cliente.
        TCPSSLCertChainFile:
          type: string
          description: Cadeia de certificados.
        TCPSSLCipher:
          type: string
          description: Cifras TLS aceitas.
        TCPSSLDebugDir:
          type: string
          description: Diretório do debug do TLS.
        TCPSSLDebugLevel:
          type: integer
          format: int64
          description: Nível de debug do TLS.
        TCPSSLPrivKeyFile:
          type: string
          description: Chave privada.
        TCPSSLPrivKeyPswd:
          type: string
          format: password
          description: 'Senha da chave privada. Dado sensível: volta mascarado nas consultas.'
        TCPv6:
          type: integer
          format: int64
        TCPMaxListen:
          type: integer
          format: int64
          description: Tamanho da fila de conexões pendentes.
        TCPSSLVerifyCert:
          type: integer
          format: int64
          description: '`1` valida o certificado do servidor.'
        TCPSSLOldVersionsEnabled:
          type: integer
          format: int64
          description: '`1` aceita versões antigas do TLS.'
        TCPMaxRecvTO:
          type: integer
          format: int64
          description: Tempo limite de recepção.
        TCPMaxSendTO:
          type: integer
          format: int64
          description: Tempo limite de envio.
      description: Rede em que o serviço escuta (TCP e TLS).
    CfgServiceOFTP:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        Level:
          type: string
          description: Versão do protocolo OFTP.
        Compression:
          type: integer
          format: int64
          description: '`1` habilita a compressão.'
        Credits:
          type: integer
          format: int64
          description: Créditos (janela de mensagens) do OFTP.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        Maxbufsize:
          type: integer
          format: int64
          description: Tamanho máximo do buffer.
        Mode:
          type: string
          description: '`Both`, `Sender` (somente transmite) ou `Receiver` (somente recebe).'
        NumMaxRetry:
          type: integer
          format: int64
          description: Número máximo de tentativas.
        Restart:
          type: integer
          format: int64
          description: '`1` habilita a retomada de transferências interrompidas.'
        SpecialLogic:
          type: integer
          format: int64
        T1:
          type: integer
          format: int64
        T2:
          type: integer
          format: int64
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
      description: Serviço OFTP.
    CfgServiceSFTP:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        MaxConnections:
          type: integer
          format: int64
          description: Número máximo de conexões.
        MaxOpenFiles:
          type: integer
          format: int64
          description: Número máximo de arquivos abertos por conexão.
        MaxReadDirEntries:
          type: integer
          format: int64
          description: Número máximo de entradas por leitura de diretório.
        FileCreatePerms:
          type: integer
          format: int64
          description: Permissões dos arquivos criados.
        AuthMode:
          type: integer
          format: int64
          description: Modo de autenticação.
      description: Serviço SFTP.
    CfgServiceAPI:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        AuthMode:
          type: integer
          description: 'Modos de autenticação aceitos, como soma: `1` Basic, `2` Bearer, `4` token exchange (JWT), `8` password
            grant. `0` aceita todos os modos. O token Bearer é sempre exigido nas rotas que não são de autenticação.'
        StaticPagesPath:
          type: string
          description: Diretório das páginas estáticas.
        TemplatePagesPath:
          type: string
          description: Diretório dos templates de páginas.
        Uri:
          type: string
          description: URL pública do serviço.
        TLSMinVersion:
          type: string
          description: Versão mínima do TLS.
        TLSMaxVersion:
          type: string
          description: Versão máxima do TLS.
        LogEnable:
          type: integer
          format: int64
          description: '`1` habilita o log do serviço.'
        LogFile:
          type: string
          description: Arquivo de log do serviço.
        CustomHeaders:
          type: object
          additionalProperties:
            type: string
          description: Headers HTTP adicionais enviados nas respostas.
        RateLimiterMaxRequests:
          type: integer
          description: Máximo de requisições por cliente na janela. `0` ou menos desabilita o limite.
        RateLimiterWindowSeconds:
          type: integer
          description: Tamanho da janela do limite, em segundos (padrão 60).
        RateLimiterPartnerHeader:
          type: string
          description: Header que identifica o parceiro no limite de requisições (padrão `anonymous`).
        RateLimiterCleanupInterval:
          type: integer
          description: Intervalo de limpeza dos controles do limite, em segundos (padrão 60).
        RateLimiterMaxStates:
          type: integer
          description: Número máximo de clientes controlados pelo limite (padrão 10000).
      description: Serviço de API do Riversoft STCP DirectLink.
    CfgServiceWhatsApp:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        AppSecret:
          type: string
          format: password
          description: 'Segredo da aplicação na Meta. Obrigatório. Dado sensível: volta mascarado nas consultas.'
        CredentialToken:
          type: string
          format: password
          description: 'Token da credencial de sistema da Meta. Obrigatório. Dado sensível: volta mascarado nas consultas.'
        Endpoint:
          type: string
          description: Endpoint da WhatsApp Business API da Meta. Obrigatório.
        VerifyToken:
          type: string
          format: password
          description: 'Token de verificação do webhook. Obrigatório. Dado sensível: volta mascarado nas consultas.'
        Uri:
          type: string
          description: URL deste serviço (webhook). Obrigatório.
        TLSMinVersion:
          type: string
          description: Versão mínima do TLS.
        TLSMaxVersion:
          type: string
          description: Versão máxima do TLS.
        LogEnable:
          type: integer
          format: int64
          description: '`1` habilita o log do serviço.'
        LogFile:
          type: string
          description: Arquivo de log do serviço.
        CustomHeaders:
          type: object
          additionalProperties:
            type: string
          description: Headers HTTP adicionais enviados nas respostas.
        TemplateMessagesPath:
          type: string
          description: Diretório dos templates de mensagem.
      description: Serviço WhatsApp Business (webhook da Meta).
    CfgServiceAS2:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        AuthMode:
          type: integer
          description: 'Autenticação no parceiro: `0` nenhuma, `1` Basic, `2` Bearer.'
        Realm:
          type: string
          description: Realm da autenticação Basic.
        Host:
          type: string
          description: Host público do serviço.
        TLSMinVersion:
          type: string
          description: Versão mínima do TLS.
        TLSMaxVersion:
          type: string
          description: Versão máxima do TLS.
        LogEnable:
          type: integer
          format: int64
          description: '`1` habilita o log do serviço.'
        LogFile:
          type: string
          description: Arquivo de log do serviço.
        CustomHeaders:
          type: object
          additionalProperties:
            type: string
          description: Headers HTTP adicionais enviados nas respostas.
      description: Serviço AS2.
    CfgServiceWebHook:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        AuthMode:
          type: integer
          description: 'Autenticação no parceiro: `0` nenhuma, `1` Basic, `2` Bearer.'
        Realm:
          type: string
          description: Realm da autenticação Basic.
        Host:
          type: string
          description: Host público do serviço.
        TLSMinVersion:
          type: string
          description: Versão mínima do TLS.
        TLSMaxVersion:
          type: string
          description: Versão máxima do TLS.
        LogEnable:
          type: integer
          format: int64
          description: '`1` habilita o log do serviço.'
        LogFile:
          type: string
          description: Arquivo de log do serviço.
        CustomHeaders:
          type: object
          additionalProperties:
            type: string
          description: Headers HTTP adicionais enviados nas respostas.
        RateLimiterMaxRequests:
          type: integer
          description: Máximo de requisições por cliente na janela. `0` ou menos desabilita o limite.
        RateLimiterWindowSeconds:
          type: integer
          description: Tamanho da janela do limite, em segundos (padrão 60).
        RateLimiterPartnerHeader:
          type: string
          description: Header que identifica o parceiro no limite de requisições (padrão `anonymous`).
        RateLimiterCleanupInterval:
          type: integer
          description: Intervalo de limpeza dos controles do limite, em segundos (padrão 60).
        RateLimiterMaxStates:
          type: integer
          description: Número máximo de clientes controlados pelo limite (padrão 10000).
      description: Serviço Webhook.
    CfgServiceMonitor:
      type: object
      properties:
        DLLName:
          type: string
          description: Biblioteca do módulo.
        Debug:
          type: integer
          format: int64
          description: Nível de debug.
        ExternalCommand:
          type: string
          description: Comando externo executado pelo serviço.
        MaxRecvBuf:
          type: integer
          format: int64
        MaxSendBuf:
          type: integer
          format: int64
        Password:
          type: string
          format: password
          description: 'Senha da credencial de supervisão. Dado sensível: volta mascarado nas consultas.'
        ReqInterval:
          type: integer
          format: int64
          description: Intervalo entre requisições.
        Timeout:
          type: integer
          format: int64
          description: Tempo limite de inatividade.
        UserName:
          type: string
          description: Usuário da credencial de supervisão.
      description: Serviço de supervisão.
    CfgSchedule:
      type: object
      properties:
        Entity:
          $ref: '#/components/schemas/CfgEntity'
        Schedule:
          $ref: '#/components/schemas/CfgSchedule'
      description: '`CONFIG_TXT` do agendamento.'
    CfgFileType:
      type: object
      properties:
        Entity:
          $ref: '#/components/schemas/CfgEntity'
        FileConf:
          $ref: '#/components/schemas/CfgFileTypeFileConf'
      description: '`CONFIG_TXT` do tipo de arquivo (global ou do usuário).'
    CfgFileTypeFileConf:
      type: object
      properties:
        CRCharTX:
          type: integer
          format: int64
        CRCharRX:
          type: integer
          format: int64
        LFCharTX:
          type: integer
          format: int64
        LFCharRX:
          type: integer
          format: int64
        Name:
          type: string
          description: Nome.
        Description:
          type: string
          description: Descrição.
        FileMatch:
          type: integer
          format: int64
          description: 'Identificação do arquivo: `0` padrão, `1` prefixo/sufixo, `2` nome do arquivo, `3` expressão regular.'
        FileDirection:
          type: integer
          format: int64
          description: 'Sentido: `0` ambos, `1` transmissão desabilitada, `2` recepção desabilitada.'
        FileRegex:
          type: string
          description: Padrão de identificação do arquivo, conforme `FileMatch`.
        MaxRecSize:
          type: integer
          format: int64
          description: Tamanho máximo do registro.
        Originator:
          type: string
          description: Originador (OFTP).
        Destination:
          type: string
          description: Destino (OFTP).
        Format:
          type: string
          description: Formato do arquivo.
        TranslateTableIn:
          type: string
        TranslateTableOut:
          type: string
        InsertCRLF:
          type: integer
          format: int64
        SupressCRLF:
          type: integer
          format: int64
        TimeStampTx:
          type: integer
          format: int64
          description: '`1` inclui timestamp no nome do arquivo transmitido.'
        TimeStampRx:
          type: integer
          format: int64
          description: '`1` inclui timestamp no nome do arquivo recebido.'
        ConvFileNameTx:
          type: integer
          format: int64
        ConvFileNameRx:
          type: integer
          format: int64
        Overwrite:
          type: integer
          format: int64
          description: '`1` sobrescreve o arquivo existente na recepção.'
        CommandLineTx:
          type: string
          description: Comando executado após a transmissão.
        CommandLineTxWait:
          type: integer
          format: int64
          description: '`1` aguarda o fim do comando.'
        CommandLineRx:
          type: string
          description: Comando executado após a recepção.
        CommandLineRxWait:
          type: integer
          format: int64
          description: '`1` aguarda o fim do comando.'
        CommandLineRead:
          type: string
        CommandLineWrite:
          type: string
        CommandLineCheckTx:
          type: string
        CommandLineCheckRx:
          type: string
        CommandLinePreCheckTx:
          type: string
        CommandLinePreCheckRx:
          type: string
        Compressed:
          type: integer
          format: int64
          description: '`1` comprime o arquivo.'
        Envelloped:
          type: integer
          format: int64
          description: '`1` envelopa (assina/criptografa) o arquivo.'
        EERPSigned:
          type: integer
          format: int64
          description: '`1` exige EERP assinado.'
        EERPOffRx:
          type: integer
          format: int64
        FileTimeRx:
          type: integer
          format: int64
        BackupFileTx:
          type: integer
          format: int64
        SecurityLevel:
          type: integer
          format: int64
        CipherLevel:
          type: integer
          format: int64
        StartDateHour:
          type: integer
          format: int64
          description: Hora de início da janela de horário.
        StartDateMinute:
          type: integer
          format: int64
          description: Minuto de início da janela de horário.
        StartDateSecond:
          type: integer
          format: int64
          description: Segundo de início da janela de horário.
        EndDateHour:
          type: integer
          format: int64
          description: Hora de fim da janela de horário.
        EndDateMinute:
          type: integer
          format: int64
          description: Minuto de fim da janela de horário.
        EndDateSecond:
          type: integer
          format: int64
          description: Segundo de fim da janela de horário.
        WeekDayInterval:
          type: integer
          format: int64
          description: Dias da semana da janela de horário.
        DisableLogDupRx:
          type: integer
          format: int64
        Userdata:
          type: string
          description: Userdata do arquivo.
        Tags:
          type: string
          description: Tags do tipo de arquivo, usadas nos relatórios.
      description: Identificação do arquivo e tratamento na transmissão e na recepção.
    CfgRouting:
      type: object
      properties:
        Entity:
          $ref: '#/components/schemas/CfgEntity'
        Rules:
          $ref: '#/components/schemas/CfgRules'
      description: '`CONFIG_TXT` do roteamento (Riversoft STCP Gemini Rename).'
    CfgRules:
      type: object
      properties:
        General:
          $ref: '#/components/schemas/CfgRulesGeneral'
        FileMatching:
          type: array
          items:
            $ref: '#/components/schemas/CfgRulesFileMatching'
      description: Varredura e regras do roteamento.
    CfgRulesGeneral:
      type: object
      properties:
        Name:
          type: string
          description: Nome.
        Description:
          type: string
          description: Descrição.
        ScanDir:
          type: string
          description: Diretório monitorado.
        ScanSubDir:
          type: integer
          description: '`1` inclui os subdiretórios.'
        ScanDirRegEx:
          type: string
          description: Expressão regular dos diretórios incluídos.
        ScanDirRegExNeg:
          type: string
          description: Expressão regular dos diretórios ignorados.
        ScanFileRegEx:
          type: string
          description: Expressão regular dos arquivos incluídos.
        ScanFileRegExNeg:
          type: string
          description: Expressão regular dos arquivos ignorados.
        ScanFirstRule:
          type: integer
        ScanCheckFileInUse:
          type: integer
          description: '`1` ignora arquivos em uso.'
        ScanLockSem:
          type: string
        ScanLockSemTimeout:
          type: integer
        ScanLockSemOptions:
          type: integer
        LogErrorOption:
          type: integer
        LogLevelOnSuccess:
          type: integer
        LogLevelOnWarning:
          type: integer
        LogLevelOnInfo:
          type: integer
        LogLevelOnError:
          type: integer
        DelayRetry:
          type: integer
          description: Espera entre novas tentativas.
        MaxRetries:
          type: integer
          description: Número máximo de novas tentativas.
        LastModified:
          type: string
      description: 'Varredura: diretório, filtros, lock, novas tentativas e níveis de log.'
    CfgRulesFileMatching:
      type: object
      properties:
        Index:
          type: integer
          description: Ordem da regra.
        Name:
          type: string
          description: Nome.
        Description:
          type: string
          description: Descrição.
        Locked:
          type: integer
          description: '`1` = bloqueado; `0` = liberado.'
        FileRegEx:
          type: string
          description: Expressão regular do nome do arquivo.
        DirRegEx:
          type: string
          description: Expressão regular do diretório.
        SrcRegEx:
          type: string
        ContentRegEx:
          type: string
          description: Expressão regular do conteúdo do arquivo.
        General:
          $ref: '#/components/schemas/CfgFileMatchingGeneral'
        Filename:
          $ref: '#/components/schemas/CfgFileMatchingFilename'
        Copy:
          $ref: '#/components/schemas/CfgFileMatchingCopy'
        Backup:
          $ref: '#/components/schemas/CfgFileMatchingBackup'
      description: Regra aplicada aos arquivos que atendem aos filtros.
    CfgFileMatchingGeneral:
      type: object
      properties:
        SourceUser:
          type: string
          description: Usuário de origem.
        DestinationUser:
          type: string
          description: Usuário de destino.
        ExecProg:
          type: string
          description: Comando executado após o processamento.
        ExecProgBefore:
          type: string
          description: Comando executado antes do processamento.
        ExecProgError:
          type: string
          description: Comando executado em caso de erro.
        CheckLockUnlockFileName:
          type: string
        CreateLockUnlockFileName:
          type: string
        CheckLockUnlockOption:
          type: integer
        RemoveAfterCopy:
          type: integer
          description: '`1` remove o arquivo de origem após a cópia.'
        RemoveAfterHours:
          type: integer
          description: Remove o arquivo após este número de horas.
        ProcessAfterSeconds:
          type: integer
          description: Processa o arquivo após este número de segundos sem alteração.
        Overwrite:
          type: integer
          description: '`1` sobrescreve o arquivo existente no destino.'
        InsertTimestamp:
          type: integer
        InsertTimestampPart:
          type: integer
        InsertTimestampFormat:
          type: string
          description: Formato do timestamp inserido.
        DelayNextFileProcess:
          type: integer
        StartDateHour:
          type: integer
          description: Hora de início da janela de horário.
        StartDateMinute:
          type: integer
          description: Minuto de início da janela de horário.
        StartDateSecond:
          type: integer
          description: Segundo de início da janela de horário.
        EndDateHour:
          type: integer
          description: Hora de fim da janela de horário.
        EndDateMinute:
          type: integer
          description: Minuto de fim da janela de horário.
        EndDateSecond:
          type: integer
          description: Segundo de fim da janela de horário.
        WeekDayInterval:
          type: integer
          description: Dias da semana da janela de horário.
        FileLenOption:
          type: integer
        FileLenMin:
          type: integer
          description: Tamanho mínimo do arquivo.
        FileLenMax:
          type: integer
          description: Tamanho máximo do arquivo.
        ReplaceFromFileOption:
          type: integer
        ContentLinesToRead:
          type: integer
        OtherOption:
          type: integer
        LastModified:
          type: string
        NextSection:
          type: string
          description: Próxima regra a aplicar.
      description: 'Ações gerais da regra: usuários de origem e destino, comandos, remoção, timestamp e janela de horário.'
    CfgFileMatchingFilename:
      type: object
      properties:
        RenameFileTo:
          type: string
          description: Novo nome do arquivo.
        Replaces:
          type: array
          items:
            $ref: '#/components/schemas/CfgFileMatchingReplace'
        ReplacesFromFile:
          type: array
          items:
            $ref: '#/components/schemas/CfgFileMatchingReplaceByFileContent'
        ReplacesByRegEx:
          type: array
          items:
            $ref: '#/components/schemas/CfgFileMatchingReplaceByRegEx'
      description: Renomeação do arquivo.
    CfgFileMatchingReplace:
      type: object
      properties:
        ReplaceFileDesc:
          type: string
        ReplaceFileNamePosFrom:
          type: integer
        ReplaceFileNamePosTo:
          type: integer
        ReplaceFileNameLen:
          type: integer
        ReplaceFileNameFromPathPosFrom:
          type: integer
        ReplaceFileNameFromPathPosTo:
          type: integer
        ReplaceFileNameFromPathLen:
          type: integer
        InsertTimestampPosFrom:
          type: integer
        InsertTimestampPosTo:
          type: integer
        InsertTimestampLen:
          type: integer
        InsertSeqNumberTo:
          type: integer
        InsertSeqNumberLen:
          type: integer
        InsertSeqNumberMin:
          type: integer
        InsertSeqNumberMax:
          type: integer
        InsertSeqNumberSeq:
          type: integer
        VarReplaceFileNamePosFrom:
          type: integer
        VarReplaceFileNamePosTo:
          type: integer
        VarReplaceFileNameLen:
          type: integer
        VarReplaceFileNameValue:
          type: string
      description: Substituição por posição no nome do arquivo.
    CfgFileMatchingReplaceByFileContent:
      type: object
      properties:
        ReplaceFromFileDesc:
          type: string
        ReplaceFromFileRegEx:
          type: string
        ReplaceFromFilePosFrom:
          type: integer
        ReplaceFromFilePosTo:
          type: integer
        ReplaceFromFileLen:
          type: integer
        ReplaceFromFileNext:
          type: integer
      description: Substituição com dados do conteúdo do arquivo.
    CfgFileMatchingReplaceByRegEx:
      type: object
      properties:
        RegExReplaceDesc:
          type: string
        RegExReplaceFrom:
          type: string
          description: Expressão regular procurada.
        RegExReplaceTo:
          type: string
          description: Texto de substituição.
        RegExReplaceOcorr:
          type: integer
          description: Ocorrências substituídas.
      description: Substituição por expressão regular.
    CfgFileMatchingCopy:
      type: object
      properties:
        CopyToDir:
          type: string
          description: Diretório de destino da cópia.
        CopyFileOption:
          type: integer
        CopyTempExtension:
          type: string
          description: Extensão temporária durante a cópia.
        CopyFileRecSize:
          type: integer
        Replaces:
          type: array
          items:
            $ref: '#/components/schemas/CfgFileMatchingReplaceByPath'
        ReplacesByRegEx:
          type: array
          items:
            $ref: '#/components/schemas/CfgFileMatchingReplaceByRegEx'
      description: Cópia do arquivo.
    CfgFileMatchingReplaceByPath:
      type: object
      properties:
        PathDesc:
          type: string
        PathReplacePosFrom:
          type: integer
        PathReplacePosTo:
          type: integer
        PathReplaceLen:
          type: integer
        PathInsertTimestampPosFrom:
          type: integer
        PathInsertTimestampPosTo:
          type: integer
        PathInsertTimestampLen:
          type: integer
        PathReplaceFromFileNamePosFrom:
          type: integer
        PathReplaceFromFileNamePosTo:
          type: integer
        PathReplaceFromFileNameLen:
          type: integer
        PathVarReplacePosFrom:
          type: integer
        PathVarReplacePosTo:
          type: integer
        PathVarReplaceLen:
          type: integer
        PathVarReplaceValue:
          type: string
      description: Substituição por posição no caminho de destino.
    CfgFileMatchingBackup:
      type: object
      properties:
        BkpToDir:
          type: string
          description: Diretório de backup.
        BkpFileOption:
          type: integer
        Replaces:
          type: array
          items:
            $ref: '#/components/schemas/CfgFileMatchingReplaceByPath'
        ReplacesByRegEx:
          type: array
          items:
            $ref: '#/components/schemas/CfgFileMatchingReplaceByRegEx'
      description: Backup do arquivo.
  responses:
    BadRequest:
      description: 'Requisição inválida: corpo vazio, `Content-Type` diferente de `application/json`, JSON inválido, validação
        da entidade ou header `Authorization` malformado (este último responde em texto).'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            field: instance
            error: instance error
            error_description: NAME is required
    Unauthorized:
      description: 'Token ausente, inválido ou expirado. Resposta em texto: `Unauthorized`.'
      content:
        text/plain:
          schema:
            type: string
    AuthUnauthorized:
      description: Credenciais não aceitas, operador bloqueado ou código 2FA inválido.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: authentication error
            error_description: Unauthorized
    AuthForbidden:
      description: Operador sem acesso ou bloqueado após exceder o limite de falhas.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: O operador não tem a permissão exigida ou acesso à entidade (grupos).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            field: log report
            error: log report error
            error_description: Forbidden
    NotFound:
      description: Entidade não encontrada.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnsupportedMediaType:
      description: '`Content-Type` diferente de `application/x-www-form-urlencoded`.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalError:
      description: Erro interno.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
