> ## 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 Serviço (NFS-e)

> Emissão **assíncrona**: a nota é persistida e o RPS correspondente é
enfileirado para envio em lote à prefeitura. Retorna `201` com
`rps.situacao: "pendente"` e `nfse.situacao: "pendente"`; o `id` já
volta estável nessa resposta. Acompanhe o resultado por polling em
`GET /notas/:id` até `nfse.situacao` virar `emitida` (com
`nfse.numero` e `codigo_verificacao`) ou o RPS falhar
(`rps.situacao: "processado_com_erro"`) — a NFS-e não emite webhooks.
O `servico` é resolvido na prefeitura da empresa por `codigo_cnae` +
`codigo_item_lista`; o `tomador` é reaproveitado por `cpf_cnpj`
(criado no primeiro uso).




## OpenAPI

````yaml /openapi-nfse.json post /notas
openapi: 3.0.1
info:
  title: Invo API Docs — NFS-e
  version: v1
servers:
  - url: https://invo.work/api/nfse/v1
security: []
tags:
  - name: Notas de Serviço
paths:
  /notas:
    post:
      tags:
        - Notas de Serviço
      summary: Emitir Nota de Serviço (NFS-e)
      description: |
        Emissão **assíncrona**: a nota é persistida e o RPS correspondente é
        enfileirado para envio em lote à prefeitura. Retorna `201` com
        `rps.situacao: "pendente"` e `nfse.situacao: "pendente"`; o `id` já
        volta estável nessa resposta. Acompanhe o resultado por polling em
        `GET /notas/:id` até `nfse.situacao` virar `emitida` (com
        `nfse.numero` e `codigo_verificacao`) ou o RPS falhar
        (`rps.situacao: "processado_com_erro"`) — a NFS-e não emite webhooks.
        O `servico` é resolvido na prefeitura da empresa por `codigo_cnae` +
        `codigo_item_lista`; o `tomador` é reaproveitado por `cpf_cnpj`
        (criado no primeiro uso).
      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
                valor_servicos:
                  description: >-
                    * Número decimal codificado como texto. Por exemplo:
                    '123.45'

                    * Mínimo: 0
                  type: string
                  pattern: ^\d*\.?\d*$
                  format: decimal number
                descricao:
                  type: string
                observacoes:
                  type: string
                nbs_codigo:
                  description: '* Não pode ser vazio'
                  type: string
                  minLength: 1
                nbs_cst:
                  description: '* Não pode ser vazio'
                  type: string
                  minLength: 1
                nbs_ct:
                  description: '* Não pode ser vazio'
                  type: string
                  minLength: 1
                nbs_indop:
                  description: '* Não pode ser vazio'
                  type: string
                  minLength: 1
                servico:
                  type: object
                  properties:
                    codigo_cnae:
                      description: '* Não pode ser vazio'
                      type: string
                      minLength: 1
                    codigo_item_lista:
                      description: '* Não pode ser vazio'
                      type: string
                      minLength: 1
                    descricao:
                      type: string
                  required:
                    - codigo_cnae
                    - codigo_item_lista
                  additionalProperties: false
                tomador:
                  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
                    inscricao_municipal:
                      type: string
                    telefone:
                      type: string
                    email:
                      type: string
                    codigo_municipio:
                      type: string
                    endereco:
                      type: object
                      properties:
                        cep:
                          description: '* Não pode ser vazio'
                          type: string
                          minLength: 1
                        municipio:
                          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
                        uf:
                          description: '* Não pode ser vazio'
                          type: string
                          minLength: 1
                      required:
                        - cep
                        - municipio
                        - logradouro
                        - numero
                        - bairro
                        - uf
                      additionalProperties: false
                  required:
                    - razao_social
                    - cpf_cnpj
                  additionalProperties: false
              required:
                - codigo_externo
                - valor_servicos
                - nbs_codigo
                - nbs_cst
                - nbs_ct
                - nbs_indop
                - servico
                - tomador
              additionalProperties: false
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                  codigo_externo:
                    type: string
                  descricao:
                    type: string
                  observacoes:
                    type: string
                  valor_servicos:
                    description: >-
                      * Número decimal codificado como texto. Por exemplo:
                      '123.45'
                    type: string
                    pattern: ^\d*\.?\d*$
                    format: decimal number
                  iss:
                    type: object
                    properties:
                      valor_liquido:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      base_calculo:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      aliquota_iss:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                      valor_iss:
                        description: >-
                          * Número decimal codificado como texto. Por exemplo:
                          '123.45'
                        type: string
                        pattern: ^\d*\.?\d*$
                        format: decimal number
                    required:
                      - valor_liquido
                      - base_calculo
                      - valor_iss
                    additionalProperties: false
                  rps:
                    type: object
                    properties:
                      situacao:
                        type: string
                      numero:
                        type: integer
                      serie:
                        type: string
                      tipo:
                        type: string
                      data_emissao:
                        type: string
                    additionalProperties: false
                  nfse:
                    type: object
                    properties:
                      situacao:
                        type: string
                      numero:
                        type: string
                      codigo_verificacao:
                        type: string
                      data_emissao:
                        type: string
                    required:
                      - situacao
                    additionalProperties: false
                  tomador:
                    type: object
                    properties:
                      razao_social:
                        type: string
                      cpf_cnpj:
                        type: string
                      email:
                        type: string
                      telefone:
                        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
                  servico:
                    type: object
                    properties:
                      descricao:
                        type: string
                      codigo_cnae:
                        type: string
                      codigo_item_lista:
                        type: string
                    required:
                      - codigo_cnae
                      - codigo_item_lista
                    additionalProperties: false
                  nbs:
                    type: object
                    properties:
                      codigo:
                        type: string
                      cst:
                        type: string
                      ct:
                        type: string
                      indop:
                        type: string
                    additionalProperties: false
                required:
                  - id
                  - codigo_externo
                  - valor_servicos
                  - iss
                  - rps
                  - nfse
                  - tomador
                  - servico
                  - nbs
                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:
                          - Serviço não encontrado
                    required:
                      - error
                    additionalProperties: false
                  - type: object
                    properties:
                      error:
                        type: string
                        enum:
                          - Tomador não encontrado
                    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 fiscal
                    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:
                          - 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

````