> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invo.work/llms.txt
> Use this file to discover all available pages before exploring further.

# Emitir Nota de Produto (NF-e)

> Emissão **assíncrona**: a nota é persistida e enfileirada para
autorização junto à SEFAZ. Retorna `201` com `situacao: "pendente"`;
o `uuid` e a `chave_acesso` já voltam estáveis nessa resposta.
Acompanhe o resultado consultando `GET /notas/:uuid` ou via
webhooks — o próximo webhook após `nfe_solicitacao_autorizacao` é o
**veredito terminal** (`nfe_autorizada`/`nfe_rejeitada`/`nfe_denegada`),
sem evento intermediário `em_processamento`. Veja a seção
**Integração** para o contrato completo.

**Itens por mercadoria cadastrada:** informe `codigo_produto` num
item para referenciar uma mercadoria já cadastrada pelo seu código.
Os campos fiscais (`descricao`, `ncm`, `cfop`, `unidade_comercial`,
`valor_unitario`, CST/CSOSN, etc.) são pré-preenchidos a partir do
cadastro e podem ser sobrescritos enviando o campo na requisição.
`quantidade` é sempre obrigatória. Um `codigo_produto` que não
corresponde a nenhuma mercadoria da empresa retorna `422`.

Observações sobre os campos do item: enviar um campo com valor
`null` **não limpa** um valor pré-preenchido — omita o campo para
manter o do cadastro ou envie um novo valor para sobrescrever.
`aliquota_icms` é uma **fração decimal** (ex.: `0.18` para 18%),
não um percentual.




## OpenAPI

````yaml /openapi-nfe.json post /notas
openapi: 3.0.1
info:
  title: Invo API Docs — NF-e
  version: v1
servers:
  - url: https://invo.work/api/nfe/v1
security: []
tags:
  - name: Notas de Produto
  - name: Inutilizações
  - name: Mercadorias
  - name: Empresa
paths:
  /notas:
    post:
      tags:
        - Notas de Produto
      summary: Emitir Nota de Produto (NF-e)
      description: |
        Emissão **assíncrona**: a nota é persistida e enfileirada para
        autorização junto à SEFAZ. Retorna `201` com `situacao: "pendente"`;
        o `uuid` e a `chave_acesso` já voltam estáveis nessa resposta.
        Acompanhe o resultado consultando `GET /notas/:uuid` ou via
        webhooks — o próximo webhook após `nfe_solicitacao_autorizacao` é o
        **veredito terminal** (`nfe_autorizada`/`nfe_rejeitada`/`nfe_denegada`),
        sem evento intermediário `em_processamento`. Veja a seção
        **Integração** para o contrato completo.

        **Itens por mercadoria cadastrada:** informe `codigo_produto` num
        item para referenciar uma mercadoria já cadastrada pelo seu código.
        Os campos fiscais (`descricao`, `ncm`, `cfop`, `unidade_comercial`,
        `valor_unitario`, CST/CSOSN, etc.) são pré-preenchidos a partir do
        cadastro e podem ser sobrescritos enviando o campo na requisição.
        `quantidade` é sempre obrigatória. Um `codigo_produto` que não
        corresponde a nenhuma mercadoria da empresa retorna `422`.

        Observações sobre os campos do item: enviar um campo com valor
        `null` **não limpa** um valor pré-preenchido — omita o campo para
        manter o do cadastro ou envie um novo valor para sobrescrever.
        `aliquota_icms` é uma **fração decimal** (ex.: `0.18` para 18%),
        não um percentual.
      parameters:
        - name: X-Empresa-CNPJ
          in: header
          required: false
          schema:
            description: >-
              CNPJ da empresa emitente. Ausente, usa a primeira empresa da
              conta.
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                codigo_externo:
                  description: '* Não pode ser vazio'
                  type: string
                  minLength: 1
                natureza_operacao:
                  description: '* Não pode ser vazio'
                  type: string
                  minLength: 1
                serie:
                  type: integer
                tipo_operacao:
                  type: integer
                finalidade:
                  type: integer
                indicador_consumidor_final:
                  type: boolean
                indicador_presenca:
                  type: integer
                informacoes_complementares:
                  type: string
                data_saida:
                  type: string
                destinatario:
                  type: object
                  properties:
                    razao_social:
                      description: '* Não pode ser vazio'
                      type: string
                      minLength: 1
                    cpf_cnpj:
                      description: '* Não pode ser vazio'
                      type: string
                      minLength: 1
                    indicador_ie:
                      type: integer
                    inscricao_estadual:
                      type: string
                    email:
                      type: string
                    telefone:
                      type: string
                    codigo_municipio:
                      type: string
                    endereco:
                      type: object
                      properties:
                        cep:
                          description: '* Não pode ser vazio'
                          type: string
                          minLength: 1
                        logradouro:
                          description: '* Não pode ser vazio'
                          type: string
                          minLength: 1
                        numero:
                          description: '* Não pode ser vazio'
                          type: string
                          minLength: 1
                        complemento:
                          type: string
                        bairro:
                          description: '* Não pode ser vazio'
                          type: string
                          minLength: 1
                        municipio:
                          description: '* Não pode ser vazio'
                          type: string
                          minLength: 1
                        uf:
                          description: '* Não pode ser vazio'
                          type: string
                          minLength: 1
                      required:
                        - cep
                        - logradouro
                        - numero
                        - bairro
                        - municipio
                        - uf
                      additionalProperties: false
                  required:
                    - razao_social
                    - cpf_cnpj
                    - indicador_ie
                    - endereco
                  additionalProperties: false
                itens:
                  type: array
                  items:
                    type: object
                    properties:
                      codigo_produto:
                        type: string
                      codigo:
                        type: string
                      descricao:
                        type: string
                      ncm:
                        type: string
                      cest:
                        type: string
                      cfop:
                        type: string
                      unidade_comercial:
                        type: string
                      quantidade:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'

                          * Mínimo: 0
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_unitario:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_desconto:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      origem:
                        type: integer
                      cst_icms:
                        type: string
                      csosn:
                        type: string
                      aliquota_icms:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      cst_pis:
                        type: string
                      cst_cofins:
                        type: string
                      cst_ipi:
                        type: string
                      aliquota_ipi:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                    required:
                      - quantidade
                    additionalProperties: false
                  minItems: 1
              required:
                - codigo_externo
                - natureza_operacao
                - destinatario
                - itens
              additionalProperties: false
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                type: object
                properties:
                  uuid:
                    type: string
                  codigo_externo:
                    type: string
                  numero:
                    type: integer
                  serie:
                    type: integer
                  modelo:
                    type: string
                  natureza_operacao:
                    type: string
                  situacao:
                    type: string
                  data_emissao:
                    type: string
                  data_saida:
                    type: string
                  data_autorizacao:
                    type: string
                  data_cancelamento:
                    type: string
                  finalidade:
                    type: integer
                  tipo_operacao:
                    type: string
                  indicador_presenca:
                    type: integer
                  indicador_consumidor_final:
                    type: boolean
                  informacoes_complementares:
                    type: string
                  chave_acesso:
                    type: string
                  protocolo_autorizacao:
                    type: string
                  protocolo_cancelamento:
                    type: string
                  motivo_cancelamento:
                    type: string
                  totais:
                    type: object
                    properties:
                      valor_produtos:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_frete:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_seguro:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_desconto:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_outras_despesas:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_bc_icms:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_icms:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_bc_icms_st:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_icms_st:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_ipi:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_pis:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_cofins:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_ii:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_total:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                    required:
                      - valor_produtos
                      - valor_frete
                      - valor_seguro
                      - valor_desconto
                      - valor_outras_despesas
                      - valor_bc_icms
                      - valor_icms
                      - valor_bc_icms_st
                      - valor_icms_st
                      - valor_ipi
                      - valor_pis
                      - valor_cofins
                      - valor_ii
                      - valor_total
                    additionalProperties: false
                  itens:
                    type: array
                    items:
                      type: object
                      properties:
                        numero_item:
                          type: integer
                        codigo:
                          type: string
                        descricao:
                          type: string
                        ncm:
                          type: string
                        cest:
                          type: string
                        cfop:
                          type: string
                        unidade_comercial:
                          type: string
                        quantidade:
                          description: >-
                            * Número decimal codificado como texto. Por exemplo:
                            '123.45'
                          type: string
                          pattern: ^\d*\.?\d*$
                          format: decimal number
                        valor_unitario:
                          description: >-
                            * Número decimal codificado como texto. Por exemplo:
                            '123.45'
                          type: string
                          pattern: ^\d*\.?\d*$
                          format: decimal number
                        valor_total:
                          description: >-
                            * Número decimal codificado como texto. Por exemplo:
                            '123.45'
                          type: string
                          pattern: ^\d*\.?\d*$
                          format: decimal number
                        valor_desconto:
                          description: >-
                            * Número decimal codificado como texto. Por exemplo:
                            '123.45'
                          type: string
                          pattern: ^\d*\.?\d*$
                          format: decimal number
                        origem:
                          type: integer
                        cst_icms:
                          type: string
                        csosn:
                          type: string
                        aliquota_icms:
                          description: >-
                            * Número decimal codificado como texto. Por exemplo:
                            '123.45'
                          type: string
                          pattern: ^\d*\.?\d*$
                          format: decimal number
                        cst_pis:
                          type: string
                        cst_cofins:
                          type: string
                        cst_ipi:
                          type: string
                        aliquota_ipi:
                          description: >-
                            * Número decimal codificado como texto. Por exemplo:
                            '123.45'
                          type: string
                          pattern: ^\d*\.?\d*$
                          format: decimal number
                      required:
                        - numero_item
                        - descricao
                        - ncm
                        - cfop
                        - unidade_comercial
                        - quantidade
                        - valor_unitario
                        - valor_total
                        - valor_desconto
                      additionalProperties: false
                    minItems: 0
                  destinatario:
                    type: object
                    properties:
                      razao_social:
                        type: string
                      cpf_cnpj:
                        type: string
                      email:
                        type: string
                      telefone:
                        type: string
                      indicador_ie:
                        type: integer
                      inscricao_estadual:
                        type: string
                      endereco:
                        type: object
                        properties:
                          cep:
                            type: string
                          logradouro:
                            type: string
                          numero:
                            type: string
                          complemento:
                            type: string
                          bairro:
                            type: string
                          municipio:
                            type: string
                          uf:
                            type: string
                        required:
                          - cep
                          - logradouro
                          - numero
                          - bairro
                          - municipio
                          - uf
                        additionalProperties: false
                    required:
                      - razao_social
                      - cpf_cnpj
                      - endereco
                    additionalProperties: false
                  links:
                    type: object
                    properties:
                      xml:
                        type: string
                      danfe:
                        type: string
                    required:
                      - xml
                      - danfe
                    additionalProperties: false
                  reemitida_uuid:
                    type: string
                  reemitida_de_uuid:
                    type: string
                required:
                  - uuid
                  - codigo_externo
                  - modelo
                  - natureza_operacao
                  - situacao
                  - chave_acesso
                  - totais
                  - itens
                  - destinatario
                  - links
                additionalProperties: false
          description: Created
        '401':
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                      - 'HTTP Basic: Access denied.'
                required:
                  - error
                additionalProperties: false
          description: Unauthorized
        '422':
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      error:
                        type: string
                        enum:
                          - Empresa não está apta a emitir NF-e
                    required:
                      - error
                    additionalProperties: false
                  - type: object
                    properties:
                      error:
                        type: string
                        enum:
                          - Código externo já está em uso
                    required:
                      - error
                    additionalProperties: false
                  - type: object
                    properties:
                      error:
                        type: string
                        enum:
                          - Mercadoria com código 'X' não encontrada
                    required:
                      - error
                    additionalProperties: false
                  - type: object
                    properties:
                      error:
                        type: string
                        enum:
                          - Município 'X' (UF) não encontrado
                    required:
                      - error
                    additionalProperties: false
                  - type: object
                    properties:
                      error:
                        type: string
                        enum:
                          - Código de município 'X' não encontrado
                    required:
                      - error
                    additionalProperties: false
                  - type: object
                    properties:
                      error:
                        type: string
                        enum:
                          - Erro ao salvar nota de produto
                    required:
                      - error
                    additionalProperties: false
                  - type: object
                    properties:
                      error:
                        type: string
                        enum:
                          - invalid_params
                      params:
                        description: >-
                          An object containing error messages for all invalid
                          params
                        type: object
                        additionalProperties:
                          type: string
                    required:
                      - error
                      - params
                    additionalProperties: false
          description: Unprocessable Content
      security:
        - basicAuth: []
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic

````