# GERADO POR scripts/build-spec.mjs — NÃO EDITE À MÃO.
# Fonte: specs/_source/monitoramento.raw.json
openapi: 3.0.4
info:
  title: Monitoramento de Notas Fiscais
  version: 4.0.0-draft
  description: |-
    A API de Monitoramento acompanha, de forma contínua, os documentos fiscais
    emitidos **contra** um CNPJ — notas em que a empresa aparece como tomadora
    ou destinatária, e que portanto nunca passaram pelo sistema de emissão dela.

    O modelo é simples: você ativa o **monitoramento** por empresa, a Nota Gateway
    executa **consultas** periódicas avançando um contador sequencial (NSU), e cada
    consulta devolve os **documentos** encontrados naquele intervalo.
paths:
  /v4/empresas/{empresaId}/nfs-e/monitoramento:
    post:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ActivateNFSeSubscriptionRequest.NFSeSubscriptionData"
        required: true
      responses:
        "200":
          description: Monitoramento ativado. Sem corpo de resposta.
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "409":
          description: >-
            O monitoramento já está ativo. Desative-o antes de alterar o NSU inicial ou outras
            configurações.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: ativarMonitoramentoNfse
      summary: Ativar monitoramento
      description: >-
        Ativa o monitoramento de NFS-e da empresa e agenda a primeira consulta.


        Se o monitoramento já estiver ativo, a API retorna `409 Conflict` e não altera o
        `nsuInicial`.


        Para alterar essa configuração, desative o monitoramento e ative-o novamente.
    delete:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
      responses:
        "200":
          description: Monitoramento desativado. Sem corpo de resposta.
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: desativarMonitoramentoNfse
      summary: Desativar monitoramento
      description: |-
        Desativa o monitoramento e interrompe as próximas consultas agendadas.

        As consultas já realizadas, as notas e os eventos encontrados permanecem acessíveis.
    get:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveNFSeSubscriptionResponse"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: consultarStatusMonitoramentoNfse
      summary: Consultar monitoramento
      description: >-
        Devolve a configuração e o estado atual do monitoramento, incluindo o NSU já processado e o
        horário da próxima consulta.
  /v4/empresas/{empresaId}/nfs-e/monitoramento/consultas:
    get:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: dtIni
          in: query
          required: true
          schema:
            type: string
            format: date-time
          description: Início do intervalo em ISO 8601. Obrigatório.
        - name: dtFim
          in: query
          required: true
          schema:
            type: string
            format: date-time
          description: Fim do intervalo em ISO 8601. Obrigatório.
        - name: status
          in: query
          required: false
          schema:
            $ref: "#/components/schemas/MonitoringRunStatus"
          description: Filtra pelo estado da consulta. Ver `MonitoringRunStatus`.
        - name: ContinuationToken
          in: query
          schema:
            type: string
          description: Token devolvido pela página anterior. Omita na primeira chamada.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListNFSeRunsResponse"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: listarConsultasNfse
      summary: Listar consultas
      description: >-
        Lista as execuções do monitoramento em um intervalo de datas, com paginação por
        `continuationToken`.
  /v4/empresas/{empresaId}/nfs-e/monitoramento/consultas/{runId}:
    get:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: runId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da consulta, obtido em `GET /consultas`.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NFSeMonitoringRun"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: obterConsultaNfse
      summary: Consultar execução
      description: "Detalha uma execução: intervalo de NSU lido, status e quantidade de documentos."
  /v4/empresas/{empresaId}/nfs-e/monitoramento/consultas/{runId}/documentos:
    get:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: runId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da consulta, obtido em `GET /consultas`.
        - name: Page
          in: query
          schema:
            type: integer
            format: int32
          description: Página, começando em 1.
      responses:
        "200":
          description: Notas e eventos encontrados na consulta.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListNFSeRunDocumentsResponse"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: listarDocumentosDaConsultaNfse
      summary: Listar documentos da consulta
      description: Lista as notas e os eventos encontrados na consulta, com paginação por `continuationToken`.
  /v4/empresas/{empresaId}/nfs-e/monitoramento/{chaveAcesso}:
    get:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: chaveAcesso
          in: path
          required: true
          schema:
            maxLength: 50
            minLength: 50
            type: string
          description: Chave de acesso do documento (50 dígitos).
      responses:
        "200":
          description: NFS-e encontrada pelo monitoramento.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NFSeMonitorada"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: obterNfse
      summary: Consultar documento
      description: >-
        Devolve uma NFS-e encontrada em uma consulta de monitoramento, com seus dados normalizados,
        emitente, serviço, valores e eventos.
  /v4/empresas/{empresaId}/nfs-e/monitoramento/{chaveAcesso}/xml:
    get:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: chaveAcesso
          in: path
          required: true
          schema:
            type: string
            pattern: ^([0-9]{50}|[0-9]{59})$
          description: Chave de acesso do documento (50 dígitos) **ou** de um evento (59 dígitos).
      responses:
        "200":
          description: XML do documento.
          content:
            application/xml:
              schema:
                type: string
                format: binary
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: obterXmlNfse
      summary: Baixar XML
      description: |-
        Devolve o XML original da NFS-e ou Evento.

        Aceita **chave de 50 dígitos** (a NFS-e) ou **de 59 dígitos** (um evento da NFS-e). 
  /v4/empresas/{empresaId}/nfs-e/monitoramento/{chaveAcesso}/pdf:
    get:
      tags:
        - NFS-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: chaveAcesso
          in: path
          required: true
          schema:
            maxLength: 50
            minLength: 50
            type: string
          description: Chave de acesso do documento (50 dígitos).
      responses:
        "200":
          description: PDF do documento.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: obterPdfNfse
      summary: Baixar PDF
      description: Devolve a DANFSE em PDF da NFS-e.
  /v4/empresas/{empresaId}/nf-e/monitoramento:
    post:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ActivateNFeSubscriptionRequest.NFeSubscriptionData"
        required: true
      responses:
        "200":
          description: Monitoramento ativado. Sem corpo de resposta.
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "409":
          description: >-
            O monitoramento já está ativo. Desative-o antes de alterar o NSU inicial ou outras
            configurações.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: ativarMonitoramentoNfe
      summary: Ativar monitoramento
      description: >-
        Ativa o monitoramento de NF-e e agenda a primeira consulta.


        Se o monitoramento já estiver ativo, a API retorna `409 Conflict` e não altera o
        `nsuInicial` nem a configuração de manifestação automática.


        Para alterar qualquer uma dessas configurações, desative o monitoramento e ative-o
        novamente.
    delete:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
      responses:
        "200":
          description: Monitoramento desativado. Sem corpo de resposta.
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: desativarMonitoramentoNfe
      summary: Desativar monitoramento
      description: >-
        Desativa o monitoramento e interrompe as próximas consultas.


        As consultas já realizadas, as notas e os eventos encontrados permanecem acessíveis. A
        manifestação automática deixa de ser executada para novos documentos.
    get:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RetrieveNFeSubscriptionResponse"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: consultarStatusMonitoramentoNfe
      summary: Consultar monitoramento
      description: Devolve configuração, estado, NSU processado e ajuste de manifestação automática.
  /v4/empresas/{empresaId}/nf-e/monitoramento/consultas:
    get:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: dtIni
          in: query
          required: true
          schema:
            type: string
            format: date-time
          description: Início do intervalo em ISO 8601. Obrigatório.
        - name: dtFim
          in: query
          required: true
          schema:
            type: string
            format: date-time
          description: Fim do intervalo em ISO 8601. Obrigatório.
        - name: status
          in: query
          required: false
          schema:
            $ref: "#/components/schemas/MonitoringRunStatus"
          description: Filtra pelo estado da consulta. Ver `MonitoringRunStatus`.
        - name: ContinuationToken
          in: query
          schema:
            type: string
          description: Token devolvido pela página anterior. Omita na primeira chamada.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListNFeRunsResponse"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: listarConsultasNfe
      summary: Listar consultas
      description: Lista as execuções do monitoramento em um intervalo de datas.
  /v4/empresas/{empresaId}/nf-e/monitoramento/consultas/{runId}:
    get:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: runId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da consulta, obtido em `GET /consultas`.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NFeMonitoringRun"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: obterConsultaNfe
      summary: Consultar execução
      description: >-
        Detalha uma execução. O campo `maxNSU` mostra o maior NSU disponível na SEFAZ, permitindo
        medir o atraso do monitoramento.
  /v4/empresas/{empresaId}/nf-e/monitoramento/consultas/{runId}/documentos:
    get:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: runId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da consulta, obtido em `GET /consultas`.
        - name: Page
          in: query
          schema:
            type: integer
            format: int32
          description: Página, começando em 1.
      responses:
        "200":
          description: Notas e eventos encontrados na consulta.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListNFeRunDocumentsResponse"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: listarDocumentosDaConsultaNfe
      summary: Listar documentos da consulta
      description: Lista as notas e os eventos encontrados na consulta, com paginação por `continuationToken`.
  /v4/empresas/{empresaId}/nf-e/monitoramento/{chaveAcesso}:
    get:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: chaveAcesso
          in: path
          required: true
          schema:
            maxLength: 44
            minLength: 44
            type: string
          description: Chave de acesso do documento (44 dígitos).
      responses:
        "200":
          description: NF-e encontrada pelo monitoramento.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: "#/components/schemas/NFeMonitorada"
                  - $ref: "#/components/schemas/NFeResumidaMonitorada"
                discriminator:
                  propertyName: tipo
                  mapping:
                    NFe: "#/components/schemas/NFeMonitorada"
                    NFeResumida: "#/components/schemas/NFeResumidaMonitorada"
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: obterNfe
      summary: Consultar documento
      description: Devolve a NF-e capturada, identificada pela chave de 44 dígitos.
  /v4/empresas/{empresaId}/nf-e/monitoramento/{chaveAcesso}/xml:
    get:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: chaveAcesso
          in: path
          required: true
          schema:
            type: string
            pattern: ^([0-9]{44}|[0-9]{52})$
          description: Chave de acesso do documento (44 dígitos) **ou** de um evento (52 dígitos).
      responses:
        "200":
          description: XML do documento.
          content:
            application/xml:
              schema:
                type: string
                format: binary
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: obterXmlNfe
      summary: Baixar XML
      description: |-
        Devolve o XML original.

        Aceita **chave de 44 dígitos** (a NF-e) ou **de 52 dígitos** (um evento da NF-e).
  /v4/empresas/{empresaId}/nf-e/monitoramento/{chaveAcesso}/pdf:
    get:
      tags:
        - NF-e
      parameters:
        - name: empresaId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
        - name: chaveAcesso
          in: path
          required: true
          schema:
            maxLength: 44
            minLength: 44
            type: string
          description: Chave de acesso do documento (44 dígitos).
      responses:
        "200":
          description: PDF do documento.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
      operationId: obterPdfNfe
      summary: Baixar PDF
      description: Devolve a DANFE em PDF da NF-e.
  /v4/empresas/{empresaId}/nf-e/monitoramento/{chaveAcesso}/manifestacao:
    post:
      tags:
        - NF-e
      operationId: registrarManifestacaoNfe
      summary: Registrar manifestação
      description: >-
        Registra de forma síncrona uma manifestação do destinatário sobre a NF-e. Quando a chamada
        retorna com sucesso, o evento já foi processado.
      parameters:
        - name: empresaId
          in: path
          required: true
          description: Identificador da empresa na Nota Gateway (UUID). Não é o CNPJ.
          schema:
            type: string
            format: uuid
        - name: chaveAcesso
          in: path
          required: true
          description: Chave de acesso da NF-e (44 dígitos).
          schema:
            type: string
            pattern: ^[0-9]{44}$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ManifestacaoRequest"
            example:
              tipo: CienciaDaOperacao
              justificativa: null
      responses:
        "200":
          description: Manifestação registrada com sucesso.
        "400":
          description: Requisição inválida. Array de erros de validação.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ErrorDto"
        "401":
          description: >-
            Token ausente, inválido, ou sem acesso à empresa informada. A API não distingue "não
            autenticado" de "não autorizado".
        "404":
          description: Empresa, monitoramento ou documento não encontrado.
        "429":
          description: Limite de requisições excedido. **Limites a confirmar.**
components:
  schemas:
    ActivateNFSeSubscriptionRequest.NFSeSubscriptionData:
      required:
        - nsuInicial
      type: object
      properties:
        nsuInicial:
          type: integer
          format: int64
          description: >-
            NSU inicial. `0` começa do início do histórico disponível no provedor; um valor maior
            começa dali para frente. Define a janela de retroatividade da primeira carga.
      additionalProperties: false
      description: Dados para ativar o monitoramento de NFS-e de uma empresa.
    ActivateNFeSubscriptionRequest.ManifestacaoData:
      required:
        - automatica
      type: object
      properties:
        automatica:
          type: boolean
          description: >-
            Quando `true`, a Nota Gateway registra automaticamente a manifestação de ciência da
            operação para cada NF-e encontrada pelo monitoramento.
      additionalProperties: false
      description: Manifestação automática do destinatário.
    ActivateNFeSubscriptionRequest.NFeSubscriptionData:
      required:
        - nsuInicial
      type: object
      properties:
        nsuInicial:
          type: integer
          format: int64
          description: NSU inicial. `0` começa do início do histórico disponível na SEFAZ.
        manifestacao:
          allOf:
            - $ref: "#/components/schemas/ActivateNFeSubscriptionRequest.ManifestacaoData"
          description: Configuração de manifestação automática do destinatário.
      additionalProperties: false
      description: Dados para ativar o monitoramento de NF-e de uma empresa.
    ErrorDto:
      required:
        - codigo
        - mensagem
      type: object
      properties:
        codigo:
          type: string
          description: Código estável do erro, para tratamento programático.
        mensagem:
          type: string
          description: "Mensagem legível. Não use para lógica: o texto pode mudar."
      additionalProperties: false
      description: >-
        Erro de negócio ou validação. As respostas de erro são **arrays** deste objeto — um item por
        problema encontrado.
    ListNFSeRunsResponse:
      type: object
      required:
        - hasMorePages
        - continuationToken
        - consultas
      example:
        hasMorePages: false
        continuationToken: null
        consultas:
          - id: 019f8154-a17b-7ed1-9353-757627b488e8
            status: Concluída
            motivoStatus: null
            dataInicio: "2026-07-20T21:02:24.875612Z"
            dataFim: "2026-07-20T21:05:21.817662Z"
            nsuInicial: 0
            nsuFinal: 50
            totalItensEncontrados: 50
            dataHoraCriacao: "2026-07-20T21:00:35.06745Z"
            dataHoraUltimaAlteracao: "2026-07-20T21:05:39.579851Z"
      properties:
        hasMorePages:
          type: boolean
          description: Indica se existem mais páginas de consultas.
        continuationToken:
          type: string
          description: Token opaco da próxima página. `null` indica o fim da listagem.
          nullable: true
        consultas:
          type: array
          description: Consultas da página atual.
          items:
            $ref: "#/components/schemas/ConsultaMonitoramento"
    ListNFeRunsResponse:
      type: object
      required:
        - hasMorePages
        - continuationToken
        - consultas
      example:
        hasMorePages: false
        continuationToken: null
        consultas:
          - id: 019f8154-a17b-7ed1-9353-757627b488e8
            status: Concluída
            motivoStatus: null
            dataInicio: "2026-07-20T21:02:24.875612Z"
            dataFim: "2026-07-20T21:05:21.817662Z"
            nsuInicial: 0
            nsuFinal: 50
            totalItensEncontrados: 50
            dataHoraCriacao: "2026-07-20T21:00:35.06745Z"
            dataHoraUltimaAlteracao: "2026-07-20T21:05:39.579851Z"
      properties:
        hasMorePages:
          type: boolean
          description: Indica se existem mais páginas de consultas.
        continuationToken:
          type: string
          description: Token opaco da próxima página. `null` indica o fim da listagem.
          nullable: true
        consultas:
          type: array
          description: Consultas da página atual.
          items:
            $ref: "#/components/schemas/ConsultaMonitoramento"
    MonitoringRun:
      required:
        - createdAt
        - empresaId
        - id
        - initialNSU
        - lastModifiedAt
        - status
      type: object
      properties:
        id:
          type: string
          format: uuid
        empresaId:
          type: string
          format: uuid
        status:
          $ref: "#/components/schemas/MonitoringRunStatus"
        statusReason:
          type: string
          nullable: true
        startedAt:
          type: string
          format: date-time
          nullable: true
        finishedAt:
          type: string
          format: date-time
          nullable: true
        initialNSU:
          type: integer
          format: int64
        finalNSU:
          type: integer
          format: int64
          nullable: true
        totalItems:
          type: integer
          format: int32
          nullable: true
        pageSize:
          type: integer
          format: int32
          nullable: true
        totalPages:
          type: integer
          format: int32
          nullable: true
          readOnly: true
        createdAt:
          type: string
          format: date-time
        lastModifiedAt:
          type: string
          format: date-time
      additionalProperties: false
      description: >-
        Resumo de uma consulta, no formato devolvido pela listagem. Note que a listagem devolve este
        tipo genérico, sem os campos específicos de NF-e.
    MonitoringRunStatus:
      type: string
      enum:
        - Pendente
        - Em execução
        - Concluída
        - Falhou
        - Sem novos itens
        - Cancelada
      description: |-
        Estado de uma consulta de monitoramento.

        | Valor | Significado |
        | --- | --- |
        | `Pendente` | Consulta criada e ainda não iniciada. |
        | `Em execução` | Consulta em andamento. |
        | `Concluída` | Consulta concluída com itens encontrados. |
        | `Falhou` | Não foi possível concluir a consulta. |
        | `Sem novos itens` | Consulta concluída sem novos itens. |
        | `Cancelada` | Consulta cancelada. |
    NFSeEventoModel:
      type: object
      properties:
        tipo:
          type: string
          readOnly: true
        chaveAcesso:
          type: string
          readOnly: true
          description: Chave do próprio evento (59 dígitos), distinta da chave da NFS-e.
        sequencia:
          type: integer
          format: int32
          readOnly: true
          description: Ordem do evento para a mesma nota.
        ambienteEmissao:
          type: string
          readOnly: true
        dataProcessamento:
          type: string
          format: date-time
          readOnly: true
        autor:
          $ref: "#/components/schemas/NFSeEventoModel.AutorEventoModel"
        chaveAcessoNFSe:
          type: string
          readOnly: true
          description: Chave da NFS-e (50 dígitos) a que o evento se refere.
        cancelamento:
          $ref: "#/components/schemas/NFSeEventoModel.CancelamentoEventoModel"
        manifestacao:
          $ref: "#/components/schemas/NFSeEventoModel.ManifestacaoEventoModel"
        outros:
          $ref: "#/components/schemas/NFSeEventoModel.OutrosEventoModel"
      additionalProperties: false
      description: Evento associado a uma NFS-e.
    NFSeEventoModel.AutorEventoModel:
      type: object
      properties:
        tipoPessoa:
          type: string
          readOnly: true
        cpfCnpj:
          type: string
          nullable: true
          readOnly: true
      additionalProperties: false
    NFSeEventoModel.CancelamentoEventoModel:
      type: object
      properties:
        codigoEvento:
          type: string
        descricao:
          type: string
        motivo:
          $ref: "#/components/schemas/NFSeEventoModel.MotivoEventoModel"
      additionalProperties: false
    NFSeEventoModel.ManifestacaoEventoModel:
      type: object
      properties:
        codigoEvento:
          type: string
        descricao:
          type: string
        motivoRejeicao:
          $ref: "#/components/schemas/NFSeEventoModel.MotivoEventoModel"
      additionalProperties: false
    NFSeEventoModel.MotivoEventoModel:
      type: object
      properties:
        codigo:
          type: string
          nullable: true
        descricao:
          type: string
          nullable: true
      additionalProperties: false
    NFSeEventoModel.OutrosEventoModel:
      type: object
      properties:
        codigoEvento:
          type: string
        descricao:
          type: string
      additionalProperties: false
    NFSeModel.BeneficioMunicipalModel:
      type: object
      properties:
        codigo:
          type: string
          readOnly: true
        valorReducaoBaseCalculo:
          type: number
          format: double
          nullable: true
          readOnly: true
        percentualReducaoBaseCalculo:
          type: number
          format: double
          nullable: true
          readOnly: true
      additionalProperties: false
    NFSeModel.ClienteModel:
      type: object
      properties:
        tipoPessoa:
          type: string
          readOnly: true
        nome:
          type: string
          nullable: true
          readOnly: true
        email:
          type: string
          nullable: true
          readOnly: true
        cpfCnpj:
          type: string
          nullable: true
          readOnly: true
        inscricaoMunicipal:
          type: string
          nullable: true
          readOnly: true
        telefone:
          type: string
          nullable: true
          readOnly: true
        endereco:
          $ref: "#/components/schemas/NFSeModel.EnderecoModel"
      additionalProperties: false
    NFSeModel.ComercioExteriorModel:
      type: object
      properties:
        modalidadePrestacaoServico:
          type: string
          nullable: true
          readOnly: true
        vinculoPrestador:
          type: string
          nullable: true
          readOnly: true
        moeda:
          type: string
          nullable: true
          readOnly: true
        valorServicoMoeda:
          type: number
          format: double
          readOnly: true
        codigoMecanismoApoioPrestador:
          type: string
          nullable: true
          readOnly: true
        codigoMecanismoApoioTomador:
          type: string
          nullable: true
          readOnly: true
        movimentacaoTemporariaBens:
          type: string
          nullable: true
          readOnly: true
        numeroDeclaracaoImportacao:
          type: string
          nullable: true
          readOnly: true
        numeroRegistroExportacao:
          type: string
          nullable: true
          readOnly: true
        compartilharNFSeComMDIC:
          type: boolean
          readOnly: true
      additionalProperties: false
    NFSeModel.ConstrucaoCivilModel:
      type: object
      properties:
        codigoObra:
          type: string
          nullable: true
          readOnly: true
        inscricaoImobiliariaFiscal:
          type: string
          nullable: true
          readOnly: true
        codigoCIB:
          type: string
          nullable: true
          readOnly: true
        enderecoObra:
          $ref: "#/components/schemas/NFSeModel.EnderecoModel"
      additionalProperties: false
    NFSeModel.DestinatarioModel:
      type: object
      properties:
        tipoPessoa:
          type: string
          readOnly: true
        nome:
          type: string
          nullable: true
          readOnly: true
        email:
          type: string
          nullable: true
          readOnly: true
        cpfCnpj:
          type: string
          nullable: true
          readOnly: true
        telefone:
          type: string
          nullable: true
          readOnly: true
        endereco:
          $ref: "#/components/schemas/NFSeModel.EnderecoModel"
      additionalProperties: false
    NFSeModel.DetalhesEventoModel:
      type: object
      properties:
        identificador:
          type: string
          nullable: true
          readOnly: true
        nome:
          type: string
          nullable: true
          readOnly: true
        dataInicio:
          type: string
          format: date
          readOnly: true
        dataFim:
          type: string
          format: date
          readOnly: true
        endereco:
          $ref: "#/components/schemas/NFSeModel.EnderecoModel"
      additionalProperties: false
    NFSeModel.EmitenteModel:
      type: object
      properties:
        tipoPessoa:
          type: string
          readOnly: true
        cpfCnpj:
          type: string
          nullable: true
          readOnly: true
        razaoSocial:
          type: string
          nullable: true
          readOnly: true
        nomeFantasia:
          type: string
          nullable: true
          readOnly: true
        inscricaoMunicipal:
          type: string
          nullable: true
          readOnly: true
        endereco:
          $ref: "#/components/schemas/NFSeModel.EnderecoModel"
      additionalProperties: false
    NFSeModel.EnderecoModel:
      type: object
      properties:
        pais:
          type: string
        uf:
          type: string
        cidade:
          type: string
        cidadeCodigoIBGE:
          type: string
          nullable: true
        logradouro:
          type: string
        numero:
          type: string
        complemento:
          type: string
          nullable: true
        bairro:
          type: string
        cep:
          type: string
      additionalProperties: false
    NFSeModel.ExigibilidadeSuspensaModel:
      type: object
      properties:
        tipo:
          type: string
          readOnly: true
        numeroProcesso:
          type: string
          readOnly: true
      additionalProperties: false
    NFSeModel.IbsCbsModel:
      type: object
      properties:
        situacaoTributaria:
          type: string
          nullable: true
          readOnly: true
        classificacaoTributaria:
          type: string
          nullable: true
          readOnly: true
        codigoIndicadorOperacao:
          type: string
          nullable: true
          readOnly: true
        tipoOperacao:
          type: string
          nullable: true
          readOnly: true
        tributacaoRegular:
          $ref: "#/components/schemas/NFSeModel.TributacaoRegularModel"
        indicadorDestinatario:
          type: string
          nullable: true
          readOnly: true
        destinatario:
          $ref: "#/components/schemas/NFSeModel.DestinatarioModel"
        imovel:
          $ref: "#/components/schemas/NFSeModel.ImovelModel"
      additionalProperties: false
    NFSeModel.ImovelModel:
      type: object
      properties:
        inscricaoImobiliariaFiscal:
          type: string
          nullable: true
        codigoCIB:
          type: string
          nullable: true
        endereco:
          $ref: "#/components/schemas/NFSeModel.EnderecoModel"
      additionalProperties: false
    NFSeModel.IntermediarioModel:
      type: object
      properties:
        tipoPessoa:
          type: string
          readOnly: true
        cpfCnpj:
          type: string
          nullable: true
          readOnly: true
        razaoSocial:
          type: string
          nullable: true
          readOnly: true
        inscricaoMunicipal:
          type: string
          nullable: true
          readOnly: true
        endereco:
          $ref: "#/components/schemas/NFSeModel.EnderecoModel"
      additionalProperties: false
    NFSeModel.PisCofinsApuracaoPropriaModel:
      type: object
      properties:
        baseCalculo:
          type: number
          format: double
          nullable: true
        aliquotaPis:
          type: number
          format: double
          nullable: true
        valorPis:
          type: number
          format: double
          nullable: true
        aliquotaCofins:
          type: number
          format: double
          nullable: true
        valorCofins:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    NFSeModel.ServicoModel:
      type: object
      properties:
        descricao:
          type: string
          nullable: true
        aliquotaIss:
          type: number
          format: double
          nullable: true
        issRetidoFonte:
          type: boolean
        tributacaoIss:
          type: string
          nullable: true
        codigoTributacaoNacional:
          type: string
          nullable: true
        codigoTributacaoMunicipal:
          type: string
          nullable: true
        codigoNBS:
          type: string
          nullable: true
        codigoMunicipioPrestacaoServico:
          type: string
          nullable: true
        municipioPrestacaoServico:
          type: string
          nullable: true
        ufPrestacaoServico:
          type: string
          nullable: true
        paisPrestacaoServico:
          type: string
          nullable: true
        regimeEspecialTributacao:
          type: string
          nullable: true
        ibsCbs:
          $ref: "#/components/schemas/NFSeModel.IbsCbsModel"
        exigibilidadeSuspensa:
          $ref: "#/components/schemas/NFSeModel.ExigibilidadeSuspensaModel"
        situacaoTributariaPisCofins:
          type: string
          nullable: true
        tipoRetencaoPisCofins:
          type: string
          nullable: true
        pisCofinsApuracaoPropria:
          $ref: "#/components/schemas/NFSeModel.PisCofinsApuracaoPropriaModel"
        valorCsll:
          type: number
          format: double
          nullable: true
        valorInss:
          type: number
          format: double
          nullable: true
        valorIr:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    NFSeModel.TributacaoRegularModel:
      type: object
      properties:
        situacaoTributaria:
          type: string
          nullable: true
        classificacaoTributaria:
          type: string
          nullable: true
      additionalProperties: false
    NFSeMonitoringRun:
      required:
        - createdAt
        - empresaId
        - id
        - initialNSU
        - lastModifiedAt
        - status
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Identificador da consulta. É o `runId` usado nas rotas de detalhe e de documentos.
        empresaId:
          type: string
          format: uuid
        status:
          allOf:
            - $ref: "#/components/schemas/MonitoringRunStatus"
          description: Estado da consulta. Ver `MonitoringRunStatus`.
        statusReason:
          type: string
          nullable: true
          description: Motivo, quando a consulta não terminou bem. `null` em caso de sucesso.
        startedAt:
          type: string
          format: date-time
          nullable: true
          description: Início da execução. `null` enquanto a consulta está apenas agendada.
        finishedAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            Fim da execução. Enquanto for `null`, a consulta não terminou — é o sinal de conclusão
            mais confiável hoje.
        initialNSU:
          type: integer
          format: int64
          description: Primeiro NSU do intervalo lido nesta consulta.
        finalNSU:
          type: integer
          format: int64
          nullable: true
          description: Último NSU efetivamente lido. `null` enquanto a consulta não termina.
        totalItems:
          type: integer
          format: int32
          nullable: true
          description: >-
            Documentos encontrados no intervalo. `0` é resultado normal: significa que nada foi
            emitido contra a empresa naquela janela.
        pageSize:
          type: integer
          format: int32
          nullable: true
        totalPages:
          type: integer
          format: int32
          nullable: true
          readOnly: true
        createdAt:
          type: string
          format: date-time
        lastModifiedAt:
          type: string
          format: date-time
      additionalProperties: false
      description: >-
        Uma execução do monitoramento de NFS-e: a janela de NSU lida, o resultado e o momento de
        início e fim.
    NFeMonitoringRun:
      required:
        - createdAt
        - empresaId
        - id
        - initialNSU
        - lastModifiedAt
        - status
      type: object
      properties:
        id:
          type: string
          format: uuid
        empresaId:
          type: string
          format: uuid
        status:
          $ref: "#/components/schemas/MonitoringRunStatus"
        statusReason:
          type: string
          nullable: true
        startedAt:
          type: string
          format: date-time
          nullable: true
        finishedAt:
          type: string
          format: date-time
          nullable: true
        initialNSU:
          type: integer
          format: int64
        finalNSU:
          type: integer
          format: int64
          nullable: true
        totalItems:
          type: integer
          format: int32
          nullable: true
        pageSize:
          type: integer
          format: int32
          nullable: true
        totalPages:
          type: integer
          format: int32
          nullable: true
          readOnly: true
        createdAt:
          type: string
          format: date-time
        lastModifiedAt:
          type: string
          format: date-time
        maxNSU:
          type: integer
          format: int64
          nullable: true
          description: >-
            Maior NSU disponível no provedor no momento da consulta. Comparado com `finalNSU`,
            indica o quanto ainda falta processar — é a métrica de atraso do monitoramento.
      additionalProperties: false
      description: Uma execução do monitoramento de NF-e. Idêntico ao de NFS-e, com o acréscimo de `maxNSU`.
    RetrieveNFSeDocumentResponse:
      type: object
      properties:
        tipo:
          type: string
          readOnly: true
        papel:
          type: string
          readOnly: true
          description: >-
            Papel da empresa monitorada no documento (tomador, intermediário). **Sem enum
            declarado** — valores a confirmar.
        numero:
          type: string
          nullable: true
          readOnly: true
        chaveAcesso:
          type: string
          readOnly: true
          description: Chave de acesso de 50 dígitos da NFS-e nacional.
        status:
          type: string
          readOnly: true
          description: Situação do documento. **Sem enum declarado** — valores a confirmar.
        ambienteEmissao:
          type: string
          readOnly: true
        numeroDps:
          type: integer
          format: int64
          readOnly: true
        serieDps:
          type: string
          readOnly: true
        dataCompetencia:
          type: string
          format: date
          readOnly: true
        dataCriacao:
          type: string
          format: date-time
          readOnly: true
        dataUltimaAlteracao:
          type: string
          format: date-time
          readOnly: true
        dataAutorizacao:
          type: string
          format: date-time
          readOnly: true
        linkDownloadPDF:
          type: string
          nullable: true
          readOnly: true
          description: Link público para download do PDF.
        linkDownloadXML:
          type: string
          nullable: true
          readOnly: true
          description: Link público para download do XML.
        emitente:
          $ref: "#/components/schemas/NFSeModel.EmitenteModel"
        intermediario:
          $ref: "#/components/schemas/NFSeModel.IntermediarioModel"
        cliente:
          $ref: "#/components/schemas/NFSeModel.ClienteModel"
        consumidorFinal:
          type: boolean
          readOnly: true
        servico:
          $ref: "#/components/schemas/NFSeModel.ServicoModel"
        construcaoCivil:
          $ref: "#/components/schemas/NFSeModel.ConstrucaoCivilModel"
        detalhesEvento:
          $ref: "#/components/schemas/NFSeModel.DetalhesEventoModel"
        comercioExterior:
          $ref: "#/components/schemas/NFSeModel.ComercioExteriorModel"
        beneficioMunicipal:
          $ref: "#/components/schemas/NFSeModel.BeneficioMunicipalModel"
        deducoes:
          type: number
          format: double
          nullable: true
          readOnly: true
        descontoIncondicionado:
          type: number
          format: double
          nullable: true
          readOnly: true
        descontoCondicionado:
          type: number
          format: double
          nullable: true
          readOnly: true
        outrasRetencoes:
          type: number
          format: double
          nullable: true
          readOnly: true
        valorTotal:
          type: number
          format: double
          readOnly: true
        observacoes:
          type: string
          nullable: true
          readOnly: true
        eventos:
          type: array
          items:
            $ref: "#/components/schemas/NFSeEventoModel"
          readOnly: true
          description: "Eventos associados ao documento: cancelamento, manifestação e outros."
      additionalProperties: false
      description: >-
        Uma NFS-e capturada pelo monitoramento, já normalizada — incluindo emitente, serviço,
        valores e o histórico de eventos.
    RetrieveNFSeSubscriptionResponse:
      type: object
      properties:
        status:
          $ref: "#/components/schemas/MonitoramentoStatus"
        dataCriacao:
          type: string
          format: date-time
          readOnly: true
        dataUltimaAlteracao:
          type: string
          format: date-time
          readOnly: true
        proximaExecucao:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: >-
            Quando a próxima consulta está agendada. É o que permite ao cliente saber quando vale a
            pena consultar de novo.
        ultimaExecucao:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: Quando a última consulta rodou.
        nsuInicial:
          type: integer
          format: int64
          readOnly: true
          description: NSU a partir do qual o monitoramento começou.
        nsuAtual:
          type: integer
          format: int64
          readOnly: true
          description: >-
            NSU já processado. A diferença em relação ao NSU do provedor é o atraso do
            monitoramento.
      additionalProperties: false
      description: Configuração e estado atual do monitoramento de NFS-e da empresa.
    RetrieveNFeSubscriptionResponse:
      type: object
      properties:
        status:
          $ref: "#/components/schemas/MonitoramentoStatus"
        dataCriacao:
          type: string
          format: date-time
          readOnly: true
        dataUltimaAlteracao:
          type: string
          format: date-time
          readOnly: true
        proximaExecucao:
          type: string
          format: date-time
          nullable: true
          readOnly: true
        ultimaExecucao:
          type: string
          format: date-time
          nullable: true
          readOnly: true
        nsuInicial:
          type: integer
          format: int64
          readOnly: true
        nsuAtual:
          type: integer
          format: int64
          readOnly: true
        nsuFinal:
          type: integer
          format: int64
          description: Último NSU processado pelo monitoramento.
        manifestacao:
          allOf:
            - $ref: "#/components/schemas/RetrieveNFeSubscriptionResponse.ManifestacaoData"
          description: Configuração de manifestação automática do destinatário.
      additionalProperties: false
      description: Configuração e estado atual do monitoramento de NF-e da empresa.
    RetrieveNFeSubscriptionResponse.ManifestacaoData:
      required:
        - automatica
      type: object
      properties:
        automatica:
          type: boolean
      additionalProperties: false
      description: Estado da configuração de manifestação automática.
    MonitoramentoStatus:
      type: string
      enum:
        - Ativado
        - Desativado
      description: Estado atual do monitoramento.
    ConsultaMonitoramento:
      type: object
      required:
        - id
        - status
        - motivoStatus
        - dataInicio
        - dataFim
        - nsuInicial
        - nsuFinal
        - totalItensEncontrados
        - dataHoraCriacao
        - dataHoraUltimaAlteracao
      properties:
        id:
          type: string
          format: uuid
          description: Identificador da consulta.
        status:
          $ref: "#/components/schemas/MonitoringRunStatus"
        motivoStatus:
          type: string
          description: Motivo associado ao status, quando houver.
          nullable: true
        dataInicio:
          type: string
          format: date-time
          description: Data e hora de início da consulta.
        dataFim:
          type: string
          format: date-time
          description: Data e hora de término da consulta.
        nsuInicial:
          type: integer
          format: int64
          description: Primeiro NSU processado pela consulta.
        nsuFinal:
          type: integer
          format: int64
          description: Último NSU processado pela consulta.
        totalItensEncontrados:
          type: integer
          format: int32
          description: Quantidade de notas e eventos encontrados.
        dataHoraCriacao:
          type: string
          format: date-time
          description: Data e hora de criação da consulta.
        dataHoraUltimaAlteracao:
          type: string
          format: date-time
          description: Data e hora da última alteração da consulta.
    EnderecoDocumentoFiscal:
      type: object
      properties:
        pais:
          type: string
          description: País.
          nullable: true
        uf:
          type: string
          description: Sigla da unidade federativa.
          nullable: true
        cidade:
          type: string
          description: Nome do município.
          nullable: true
        cidadeCodigoIBGE:
          type: string
          description: Código IBGE do município.
          nullable: true
        logradouro:
          type: string
          description: Logradouro.
          nullable: true
        numero:
          type: string
          description: Número.
          nullable: true
        complemento:
          type: string
          description: Complemento.
          nullable: true
        bairro:
          type: string
          description: Bairro.
          nullable: true
        cep:
          type: string
          description: CEP sem formatação.
          nullable: true
    ParteDocumentoFiscal:
      type: object
      properties:
        tipoPessoa:
          type: string
          enum:
            - F
            - J
          description: Tipo de pessoa.
          nullable: true
        cpfCnpj:
          type: string
          description: CPF ou CNPJ sem formatação.
          nullable: true
        cnpj:
          type: string
          description: CNPJ sem formatação, quando exposto neste formato.
          nullable: true
        nome:
          type: string
          description: Nome ou razão social.
          nullable: true
        razaoSocial:
          type: string
          description: Razão social.
          nullable: true
        nomeFantasia:
          type: string
          description: Nome fantasia.
          nullable: true
        email:
          type: string
          description: E-mail.
          nullable: true
        inscricaoMunicipal:
          type: string
          description: Inscrição municipal.
          nullable: true
        inscricaoEstadual:
          type: string
          description: Inscrição estadual.
          nullable: true
        indicadorContribuinteICMS:
          type: string
          description: Indicador de contribuinte do ICMS.
          nullable: true
        telefone:
          type: string
          description: Telefone.
          nullable: true
        endereco:
          $ref: "#/components/schemas/EnderecoDocumentoFiscal"
          nullable: true
    DocumentoFiscalBase:
      type: object
      required:
        - tipo
        - papel
        - numero
        - chaveAcesso
        - status
        - ambienteEmissao
        - dataCriacao
        - dataUltimaAlteracao
      properties:
        tipo:
          type: string
          enum:
            - NFSe
            - NFe
            - NFeResumida
          description: Tipo do documento fiscal.
        papel:
          type: string
          enum:
            - Prestador
            - Intermediario
            - Tomador
          description: Papel da empresa monitorada no documento.
        numero:
          oneOf:
            - type: integer
              format: int64
            - type: string
          description: Número do documento.
        chaveAcesso:
          type: string
          description: Chave de acesso do documento.
        status:
          type: string
          example: Autorizada
          description: Situação do documento.
        ambienteEmissao:
          type: string
          enum:
            - Homologacao
            - Producao
          description: Ambiente em que o documento foi autorizado.
        dataCriacao:
          type: string
          format: date-time
          description: Data de criação do registro.
        dataUltimaAlteracao:
          type: string
          format: date-time
          description: Data da última alteração do registro.
        dataAutorizacao:
          type: string
          format: date-time
          description: Data de autorização do documento.
          nullable: true
        linkDownloadPDF:
          type: string
          format: uri
          description: Link público para download do PDF, quando disponível.
          nullable: true
        linkDownloadXML:
          type: string
          format: uri
          description: Link público para download do XML, quando disponível.
          nullable: true
    FormaPagamentoNFe:
      type: object
      properties:
        tipo:
          type: string
          description: Código da forma de pagamento.
          nullable: true
        valor:
          type: number
          format: double
          description: Valor pago nesta forma.
          nullable: true
    PagamentoNFe:
      type: object
      properties:
        tipo:
          type: string
          description: Indicador da forma de pagamento.
          nullable: true
        formas:
          type: array
          items:
            $ref: "#/components/schemas/FormaPagamentoNFe"
        troco:
          type: number
          format: double
          description: Valor do troco.
          nullable: true
    PedidoNFe:
      type: object
      properties:
        presencaConsumidor:
          type: string
          description: Indicador de presença do consumidor.
          nullable: true
        pagamento:
          $ref: "#/components/schemas/PagamentoNFe"
          nullable: true
    TransporteNFe:
      type: object
      properties:
        frete:
          type: object
          properties:
            modalidade:
              type: string
              description: Modalidade do frete.
              nullable: true
          nullable: true
    ProtocoloNFe:
      type: object
      properties:
        numero:
          type: string
          description: Número do protocolo de autorização.
          nullable: true
        digestValue:
          type: string
          description: Digest do documento autorizado.
          nullable: true
    TributoNFe:
      type: object
      properties:
        situacaoTributaria:
          type: string
          description: Código de situação tributária.
          nullable: true
        baseCalculo:
          type: number
          format: double
          description: Base de cálculo.
          nullable: true
        aliquota:
          type: number
          format: double
          description: Alíquota.
          nullable: true
        valor:
          type: number
          format: double
          description: Valor do tributo.
          nullable: true
    AliquotaIbsCbs:
      type: object
      properties:
        aliquota:
          type: number
          format: double
          description: Alíquota nominal.
          nullable: true
        percentualDiferimento:
          type: number
          format: double
          description: Percentual de diferimento.
          nullable: true
        valorDiferimento:
          type: number
          format: double
          description: Valor diferido.
          nullable: true
        percentualReducaoAliquota:
          type: number
          format: double
          description: Percentual de redução da alíquota.
          nullable: true
        aliquotaEfetiva:
          type: number
          format: double
          description: Alíquota efetiva.
          nullable: true
        valor:
          type: number
          format: double
          description: Valor calculado.
          nullable: true
    IbsCbsItemNFe:
      type: object
      properties:
        situacaoTributaria:
          type: string
          description: Situação tributária do IBS/CBS.
          nullable: true
        classificacaoTributaria:
          type: string
          description: Classificação tributária do IBS/CBS.
          nullable: true
        baseCalculo:
          type: number
          format: double
          description: Base de cálculo do IBS/CBS.
          nullable: true
        ibs:
          type: object
          properties:
            uf:
              $ref: "#/components/schemas/AliquotaIbsCbs"
              nullable: true
            municipio:
              $ref: "#/components/schemas/AliquotaIbsCbs"
              nullable: true
          nullable: true
        cbs:
          $ref: "#/components/schemas/AliquotaIbsCbs"
          nullable: true
    ImpostosItemNFe:
      type: object
      properties:
        percentualAproximadoTributos:
          type: object
          properties:
            simplificado:
              type: object
              properties:
                valor:
                  type: number
                  format: double
                  description: Valor aproximado dos tributos.
                  nullable: true
              nullable: true
          nullable: true
        icms:
          allOf:
            - $ref: "#/components/schemas/TributoNFe"
          properties:
            origem:
              type: integer
              format: int32
              nullable: true
            modalidadeBaseCalculo:
              type: integer
              format: int32
              nullable: true
          nullable: true
        pis:
          $ref: "#/components/schemas/TributoNFe"
          nullable: true
        cofins:
          $ref: "#/components/schemas/TributoNFe"
          nullable: true
        ibsCbs:
          $ref: "#/components/schemas/IbsCbsItemNFe"
          nullable: true
    ItemNFe:
      type: object
      properties:
        numeroItem:
          type: integer
          format: int32
        cfop:
          type: string
          description: CFOP do item.
          nullable: true
        codigo:
          type: string
          description: Código do produto.
          nullable: true
        descricao:
          type: string
          description: Descrição do produto.
          nullable: true
        ncm:
          type: string
          description: NCM.
          nullable: true
        cest:
          type: string
          description: CEST.
          nullable: true
        extipi:
          type: string
          description: EX TIPI.
          nullable: true
        ean:
          type: string
          description: EAN comercial.
          nullable: true
        eanTributavel:
          type: string
          description: EAN tributável.
          nullable: true
        codigoBeneficioFiscal:
          type: string
          description: Código do benefício fiscal.
          nullable: true
        quantidade:
          type: number
          format: double
          description: Quantidade comercial.
          nullable: true
        quantidadeTributavel:
          type: number
          format: double
          description: Quantidade tributável.
          nullable: true
        sku:
          type: string
          description: SKU.
          nullable: true
        unidadeMedida:
          type: string
          description: Unidade comercial.
          nullable: true
        unidadeMedidaTributavel:
          type: string
          description: Unidade tributável.
          nullable: true
        valorUnitario:
          type: number
          format: double
          description: Valor unitário.
          nullable: true
        valorTotal:
          type: number
          format: double
          description: Valor total do item.
          nullable: true
        descontos:
          type: number
          format: double
          description: Descontos.
          nullable: true
        outrasDespesas:
          type: number
          format: double
          description: Outras despesas.
          nullable: true
        seguro:
          type: number
          format: double
          description: Seguro.
          nullable: true
        frete:
          type: number
          format: double
          description: Frete.
          nullable: true
        impostos:
          $ref: "#/components/schemas/ImpostosItemNFe"
          nullable: true
        informacoesAdicionais:
          type: string
          description: Informações adicionais do item.
          nullable: true
    NFeMonitorada:
      allOf:
        - $ref: "#/components/schemas/DocumentoFiscalBase"
        - type: object
          required:
            - tipo
            - serie
            - dataEmissao
            - emitente
            - cliente
            - itens
            - valorTotal
          properties:
            tipo:
              type: string
              enum:
                - NFe
            numero:
              type: integer
              format: int64
            serie:
              type: string
            dataEmissao:
              type: string
              format: date-time
            naturezaOperacao:
              type: string
              description: Natureza da operação.
              nullable: true
            tipoOperacao:
              type: string
              enum:
                - Entrada
                - Saida
              nullable: true
            finalidade:
              type: string
              description: Finalidade da NF-e.
              nullable: true
            pedido:
              $ref: "#/components/schemas/PedidoNFe"
              nullable: true
            emitente:
              $ref: "#/components/schemas/ParteDocumentoFiscal"
            cliente:
              $ref: "#/components/schemas/ParteDocumentoFiscal"
            transporte:
              $ref: "#/components/schemas/TransporteNFe"
              nullable: true
            protocolo:
              $ref: "#/components/schemas/ProtocoloNFe"
              nullable: true
            itens:
              type: array
              items:
                $ref: "#/components/schemas/ItemNFe"
            valorTotal:
              type: number
              format: double
              description: Valor total da NF-e.
            valorTotalProdutos:
              type: number
              format: double
              description: Valor total dos produtos.
            informacoesAdicionais:
              type: string
              description: Informações adicionais.
              nullable: true
            informacoesAdicionaisFisco:
              type: string
              description: Informações adicionais de interesse do fisco.
              nullable: true
    NFeResumidaMonitorada:
      allOf:
        - $ref: "#/components/schemas/DocumentoFiscalBase"
        - type: object
          description: >-
            Resumo de uma NF-e disponibilizado antes da obtenção do documento completo. Os campos
            disponíveis podem ser menores que os da NF-e completa.
          required:
            - tipo
          properties:
            tipo:
              type: string
              enum:
                - NFeResumida
            numero:
              type: integer
              format: int64
            serie:
              type: string
              description: Série da NF-e.
              nullable: true
            dataEmissao:
              type: string
              format: date-time
              nullable: true
            emitente:
              $ref: "#/components/schemas/ParteDocumentoFiscal"
              nullable: true
            valorTotal:
              type: number
              format: double
              description: Valor total da NF-e.
              nullable: true
    PisCofinsApuracaoPropria:
      type: object
      properties:
        baseCalculo:
          type: number
          format: double
          description: Base de cálculo.
          nullable: true
        aliquotaPis:
          type: number
          format: double
          description: Alíquota de PIS.
          nullable: true
        valorPis:
          type: number
          format: double
          description: Valor de PIS.
          nullable: true
        aliquotaCofins:
          type: number
          format: double
          description: Alíquota de COFINS.
          nullable: true
        valorCofins:
          type: number
          format: double
          description: Valor de COFINS.
          nullable: true
    ServicoNFSe:
      type: object
      properties:
        descricao:
          type: string
          description: Descrição do serviço.
          nullable: true
        aliquotaIss:
          type: number
          format: double
          description: Alíquota do ISS.
          nullable: true
        issRetidoFonte:
          type: boolean
          description: Indica retenção do ISS na fonte.
          nullable: true
        tributacaoIss:
          type: string
          description: Código de tributação do ISS.
          nullable: true
        codigoTributacaoNacional:
          type: string
          description: Código de tributação nacional.
          nullable: true
        codigoTributacaoMunicipal:
          type: string
          description: Código de tributação municipal.
          nullable: true
        codigoNBS:
          type: string
          description: Código NBS.
          nullable: true
        codigoMunicipioPrestacaoServico:
          type: string
          description: Código IBGE do município da prestação.
          nullable: true
        municipioPrestacaoServico:
          type: string
          description: Município da prestação.
          nullable: true
        ufPrestacaoServico:
          type: string
          description: UF da prestação.
          nullable: true
        paisPrestacaoServico:
          type: string
          description: País da prestação.
          nullable: true
        regimeEspecialTributacao:
          type: string
          description: Regime especial de tributação.
          nullable: true
        ibsCbs:
          type: object
          additionalProperties: true
          description: Dados de IBS/CBS do serviço.
          nullable: true
        exigibilidadeSuspensa:
          type: object
          properties:
            tipo:
              type: string
              description: Tipo de suspensão.
              nullable: true
            numeroProcesso:
              type: string
              description: Número do processo.
              nullable: true
          nullable: true
        situacaoTributariaPisCofins:
          type: string
          description: Situação tributária de PIS/COFINS.
          nullable: true
        tipoRetencaoPisCofins:
          type: string
          description: Tipo de retenção de PIS/COFINS.
          nullable: true
        pisCofinsApuracaoPropria:
          $ref: "#/components/schemas/PisCofinsApuracaoPropria"
          nullable: true
        valorCsll:
          type: number
          format: double
          description: Valor de CSLL.
          nullable: true
        valorInss:
          type: number
          format: double
          description: Valor de INSS.
          nullable: true
        valorIr:
          type: number
          format: double
          description: Valor de IR.
          nullable: true
    NFSeMonitorada:
      allOf:
        - $ref: "#/components/schemas/DocumentoFiscalBase"
        - type: object
          required:
            - tipo
            - numeroDps
            - serieDps
            - dataCompetencia
            - emitente
            - cliente
            - servico
            - valorTotal
          properties:
            tipo:
              type: string
              enum:
                - NFSe
            numero:
              type: string
            numeroDps:
              type: integer
              format: int64
            serieDps:
              type: string
            dataCompetencia:
              type: string
              format: date-time
            emitente:
              $ref: "#/components/schemas/ParteDocumentoFiscal"
            intermediario:
              $ref: "#/components/schemas/ParteDocumentoFiscal"
              nullable: true
            cliente:
              $ref: "#/components/schemas/ParteDocumentoFiscal"
            consumidorFinal:
              type: boolean
              nullable: true
            servico:
              $ref: "#/components/schemas/ServicoNFSe"
            construcaoCivil:
              type: object
              additionalProperties: true
              nullable: true
            detalhesEvento:
              type: object
              additionalProperties: true
              nullable: true
            comercioExterior:
              type: object
              additionalProperties: true
              nullable: true
            beneficioMunicipal:
              type: object
              additionalProperties: true
              nullable: true
            deducoes:
              type: number
              format: double
              description: Deduções da da NFS-e.
              nullable: true
            descontoIncondicionado:
              type: number
              format: double
              description: Desconto incondicionado.
              nullable: true
            descontoCondicionado:
              type: number
              format: double
              description: Desconto condicionado.
              nullable: true
            outrasRetencoes:
              type: number
              format: double
              description: Outras retenções.
              nullable: true
            valorTotal:
              type: number
              format: double
              description: Valor total da NFS-e.
            observacoes:
              type: string
              description: Observações.
              nullable: true
    AutorEvento:
      type: object
      required:
        - tipoPessoa
        - cpfCnpj
      properties:
        tipoPessoa:
          type: string
          enum:
            - F
            - J
          description: Tipo de pessoa do autor do evento.
        cpfCnpj:
          type: string
          description: CPF ou CNPJ do autor, sem formatação.
    EventoMonitorado:
      type: object
      required:
        - tipo
        - chaveAcesso
      properties:
        tipo:
          type: string
          description: Tipo do evento fiscal.
          example: Cancelamento
        chaveAcesso:
          type: string
          description: Chave de acesso do evento.
        sequencial:
          type: integer
          format: int32
          nullable: true
        ambienteEmissao:
          type: string
          enum:
            - Homologacao
            - Producao
          nullable: true
        dataProcessamento:
          type: string
          format: date-time
          nullable: true
        autor:
          $ref: "#/components/schemas/AutorEvento"
          nullable: true
      additionalProperties: true
    ListNFSeRunDocumentsResponse:
      type: object
      required:
        - hasMorePages
        - continuationToken
        - notas
        - eventos
      properties:
        hasMorePages:
          type: boolean
          description: Indica se existem mais páginas de documentos para recuperar.
        continuationToken:
          type: string
          description: Token opaco da próxima página. Quando for `null`, a listagem terminou.
          nullable: true
        notas:
          type: array
          description: Notas encontradas na consulta.
          items:
            $ref: "#/components/schemas/NFSeMonitorada"
        eventos:
          type: array
          description: Eventos encontrados na consulta.
          items:
            $ref: "#/components/schemas/EventoMonitorado"
    ListNFeRunDocumentsResponse:
      type: object
      required:
        - hasMorePages
        - continuationToken
        - notas
        - eventos
      properties:
        hasMorePages:
          type: boolean
          description: Indica se existem mais páginas de documentos para recuperar.
        continuationToken:
          type: string
          description: Token opaco da próxima página. Quando for `null`, a listagem terminou.
          nullable: true
        notas:
          type: array
          description: Notas encontradas na consulta.
          items:
            oneOf:
              - $ref: "#/components/schemas/NFeMonitorada"
              - $ref: "#/components/schemas/NFeResumidaMonitorada"
            discriminator:
              propertyName: tipo
              mapping:
                NFe: "#/components/schemas/NFeMonitorada"
                NFeResumida: "#/components/schemas/NFeResumidaMonitorada"
        eventos:
          type: array
          description: Eventos encontrados na consulta.
          items:
            $ref: "#/components/schemas/EventoMonitorado"
    ManifestacaoRequest:
      type: object
      required:
        - tipo
      description: Manifestação do destinatário sobre uma NF-e.
      properties:
        tipo:
          type: string
          enum:
            - CienciaDaOperacao
            - ConfirmacaoDaOperacao
            - DesconhecimentoDaOperacao
            - OperacaoNaoRealizada
          description: |-
            Tipo da manifestação:

            | Valor | Significado |
            | --- | --- |
            | `CienciaDaOperacao` | Registra que a empresa tomou conhecimento da NF-e. |
            | `ConfirmacaoDaOperacao` | Confirma que a operação ocorreu. |
            | `DesconhecimentoDaOperacao` | Informa que a empresa não reconhece a operação. |
            | `OperacaoNaoRealizada` | Informa que a operação não foi concluída. |
        justificativa:
          type: string
          description: Justificativa da manifestação. Obrigatória quando `tipo` for `OperacaoNaoRealizada`.
          nullable: true
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: |-
        Chave de API estática da conta, gerada no painel.

        Envie a chave **crua** (sem base64) no header `Authorization`, com o prefixo
        `Basic ` — ou seja, o valor do header é `Basic {API_KEY}`. No "Try it out",
        cole o valor completo, incluindo o prefixo `Basic `.
security:
  - apiKeyAuth: []
servers:
  - url: https://api.notagateway.com.br
    description: Produção
  - url: https://sandbox.api.notagateway.com.br
    description: Sandbox
tags:
  - name: NFS-e
    description: Ative o monitoramento, acompanhe consultas e acesse as NFS-e encontradas.
  - name: NF-e
    description: Ative o monitoramento, acompanhe consultas, acesse documentos e registre manifestações.
