---
title: "Valida uma NFS-e sem emitir"
method: POST
path: "/v1/nfse/validacoes"
tags: ["Emissão de NFS-e"]
---

# Valida uma NFS-e sem emitir

`POST /v1/nfse/validacoes`

## Request

- Base URL: `https://api.sudrel.com.br/api`
- URL: `https://api.sudrel.com.br/api/v1/nfse/validacoes`
- Auth: HTTP bearer

Exatamente a mesma validação e normalização de `POST /v1/nfse`,
sem criar nota, sem reservar número de DPS e sem transmitir. Devolve
a nota como ela seria emitida, os `ajustes`, todos os erros e a
prontidão da empresa. `valida` só é `true` se não houver erro nem
item de prontidão com `bloqueio`.

## Request body

- NfseEntrada: O mesmo conjunto de campos da planilha de emissão, em JSON. Só `tomador.documento` e `valor` são sempre obrigatórios; `descricao` e `codigo_nacional` vêm da configuração da empresa quando omitidos. Campo desconhecido é erro (422 `campo_desconhecido`).
  - `empresa_id` string: Empresa emissora. Dispensado quando a chave de API é restrita a uma empresa.
  - `referencia` string: Seu identificador para esta nota (pedido, contrato). Único por empresa; repetido é 409 com o id da nota existente.
  - `modelo` string: Nome ou id de um modelo de emissão salvo no painel. Preenche descrição, código de serviço e competência quando não enviados.
  - `substituicao` object: Esta nota SUBSTITUI uma NFS-e autorizada (grupo `subst` da DPS). Informe `nfse_id` (nota emitida pela Sudrel) ou `chave_acesso` (NFS-e emitida em outro sistema, do mesmo prestador). Veja "Substituir uma NFS-e" acima. Só em `POST /v1/nfse`: o lote recusa (`substituicao_fora_do_lote`).
    - `nfse_id` string: Id da nota a substituir (de `GET /v1/nfse`).
    - `chave_acesso` string: Ou a chave de acesso da NFS-e a substituir, 50 dígitos.
    - `codigo_motivo` '01' | '02' | '03' | '04' | '05' | '99', required: 01 desenquadramento do Simples Nacional; 02 enquadramento no Simples Nacional; 03 inclusão retroativa de imunidade ou isenção; 04 exclusão retroativa de imunidade ou isenção; 05 rejeição da NFS-e pelo tomador ou intermediário; 99 outros.
    - `motivo` string: Descrição do motivo. Obrigatória com `codigo_motivo` 99 (E0078).
  - `tomador` object, required
    - `documento` string, required: CPF (11 dígitos) ou CNPJ (14 posições, numérico ou alfanumérico), com ou sem pontuação.
    - `razao_social` string: Obrigatório para CPF. Para CNPJ, consultamos automaticamente.
    - `email` string: Obrigatório só quando o sistema do município da empresa precisa dele para cancelar a nota (hoje, o WebISS). Nos outros casos, opcional; quando vier, o PDF da nota vai para ele.
    - `endereco` object: Para CPF, opcional: CPF e nome bastam, menos quando o serviço tributa no domicílio do tomador (o `cIndOp` aponta para o endereço dele, ou mão de obra, 17.05.01), e aí a validação devolve `tomador_endereco_obrigatorio`. Quando vier, CEP e número vão juntos e o resto sai do CEP. Para CNPJ, não precisa.
      - `cep` string
      - `numero` string
      - `complemento` string
      - `municipio` string: Só para sobrescrever o município resolvido. Nome com UF ou código IBGE.
  - `valor` string, required: Texto decimal com ponto, sem separador de milhar. Número JSON é recusado (422 `tipo_invalido`).
  - `servico` object
    - `descricao` string
    - `codigo_nacional` string: Código de tributação nacional (cTribNac), 6 dígitos.
    - `competencia` string: AAAA-MM. Padrão, o mês atual.
    - `nbs` string: Código NBS do serviço (9 dígitos, com ou sem pontos), declarado junto do IBS e da CBS. Tem de ser um dos admitidos para o código de serviço (veja `GET /v1/servicos/{codigo}/nbs`); cada NBS leva a sua classificação tributária. Padrão: o NBS padrão da empresa, e na falta dele o padrão da tabela oficial.
    - `obra` ObraEntrada: Dados da obra (grupo `serv/obra` da DPS). Obrigatório nos códigos de construção civil (E0370) e proibido nos demais, menos o 99.01.01 (E0372). Identifique a obra por UM destes: `cno`, `cib` ou `endereco` (CEP e número); com mais de um, vai o CNO, depois o CIB. O município da obra é o local da prestação: vem do CEP, quando há CEP, ou de `municipio`.
      - `cno` string: Número da obra no Cadastro Nacional de Obras (ou CEI), com ou sem máscara.
      - `cib` string: Código do Cadastro Imobiliário Brasileiro do imóvel, 8 caracteres.
      - `inscricao_imobiliaria` string: Inscrição imobiliária fiscal (a do IPTU), opcional.
      - `endereco` object: Rua e bairro vêm do CEP.
        - `cep` string
        - `numero` string
        - `complemento` string
      - `municipio` string: Nome com UF (`Salvador - BA`) ou código IBGE. Dispensado quando o CEP foi informado; com os dois, têm de concordar (E0380).
  - `retencoes` object: O que o TOMADOR retém.
    - `iss` boolean: ISS retido pelo tomador.
    - `pis` Tributo: Informe o valor OU a alíquota. Com a alíquota, calculamos o valor sobre o valor do serviço.
      - `valor` string: Texto decimal com ponto, sem separador de milhar. Número JSON é recusado (422 `tipo_invalido`).
      - `aliquota` string: Percentual como texto, com ponto e sem "%".
    - `cofins` Tributo: Informe o valor OU a alíquota. Com a alíquota, calculamos o valor sobre o valor do serviço.
      - `valor` string: Texto decimal com ponto, sem separador de milhar. Número JSON é recusado (422 `tipo_invalido`).
      - `aliquota` string: Percentual como texto, com ponto e sem "%".
    - `csll` Tributo: Informe o valor OU a alíquota. Com a alíquota, calculamos o valor sobre o valor do serviço.
      - `valor` string: Texto decimal com ponto, sem separador de milhar. Número JSON é recusado (422 `tipo_invalido`).
      - `aliquota` string: Percentual como texto, com ponto e sem "%".
    - `irrf` Tributo: Informe o valor OU a alíquota. Com a alíquota, calculamos o valor sobre o valor do serviço.
      - `valor` string: Texto decimal com ponto, sem separador de milhar. Número JSON é recusado (422 `tipo_invalido`).
      - `aliquota` string: Percentual como texto, com ponto e sem "%".
    - `inss` Tributo: Informe o valor OU a alíquota. Com a alíquota, calculamos o valor sobre o valor do serviço.
      - `valor` string: Texto decimal com ponto, sem separador de milhar. Número JSON é recusado (422 `tipo_invalido`).
      - `aliquota` string: Percentual como texto, com ponto e sem "%".
  - `apuracao_propria` object: PIS/COFINS da apuração da SUA empresa (não é retenção).
    - `pis` Tributo: Informe o valor OU a alíquota. Com a alíquota, calculamos o valor sobre o valor do serviço.
      - `valor` string: Texto decimal com ponto, sem separador de milhar. Número JSON é recusado (422 `tipo_invalido`).
      - `aliquota` string: Percentual como texto, com ponto e sem "%".
    - `cofins` Tributo: Informe o valor OU a alíquota. Com a alíquota, calculamos o valor sobre o valor do serviço.
      - `valor` string: Texto decimal com ponto, sem separador de milhar. Número JSON é recusado (422 `tipo_invalido`).
      - `aliquota` string: Percentual como texto, com ponto e sem "%".
  - `iss` object
    - `aliquota` string: Percentual como texto, com ponto e sem "%".

## Response `200`

Resultado da validação (válida ou não).

- object
  - `valida` boolean
  - `empresa_id` string, nullable
  - `referencia` string, nullable
  - `nota` object, nullable: Mesmas seções de conteúdo de `Nfse` (valor, tomador, serviço, retenções, apuração própria, ISS).
  - `ajustes` Ajuste[]
    - `campo` string: JSON Pointer.
    - `acao` 'preenchido' | 'omitido' | 'derivado' | 'exigido'
    - `motivo` string
    - `regra` string: Identificador estável da regra.
  - `erros` ErroCampo[]
    - `type` string: `https://sudrel.com.br/docs/erros/<codigo>`. Não vem nos itens de `erros` do 422 de `POST /v1/lotes`.
    - `codigo` string: Estável: programe em cima dele.
    - `codigo_oficial` string, nullable: Regra do Sistema Nacional antecipada, quando houver (ex.: E0202).
    - `campo` string, nullable: JSON Pointer no payload.
    - `mensagem` string
    - `correcao` string, nullable
    - `retentavel` boolean: Repetir a MESMA requisição pode dar certo?
  - `prontidao` object, nullable
    - `situacao` 'ok' | 'aviso' | 'bloqueio'
    - `itens` ItemProntidao[]
      - `item` 'certificado' | 'convenio_municipio' | 'regime_tributario' | 'regime_apuracao_simples' | 'municipio_emissao' | 'serie_dps' | 'padroes_emissao' | 'plano_emissao' | 'parametros_municipais' | 'sandbox_municipio_proprio' | 'nbs' | 'reducao_ibs_cbs' | 'token_municipio': Estável. Novos itens podem aparecer.
      - `situacao` 'ok' | 'aviso' | 'bloqueio'
      - `mensagem` string
      - `correcao` string, nullable

## Other responses

- `401`: `nao_autenticado`: chave de API ausente, inválida ou revogada.
- `429`: `limite_de_requisicoes` (`retentavel: true`): 120 requisições por minuto por chave, janela fixa de 60 s. Sem `Retry-After`: espere a virada do minuto e repita a MESMA requisição (com a mesma `Idempotency-Key`).

---

[API](https://skmtc.dev/sudrel/apis/api-publica-sudrel-nfs-e-nf-e-e-ct-e.md) · [All operations](https://skmtc.dev/sudrel/apis/api-publica-sudrel-nfs-e-nf-e-e-ct-e/llms.txt) · [OpenAPI document](https://skmtc.dev/sudrel/apis/api-publica-sudrel-nfs-e-nf-e-e-ct-e/revisions/efd7baba9e37?raw)
