Serviços
Simular uma nota (sem emitir)
POST https://apifiscal.weesy.com.br/v1/empresas/{cnpj}/servicos/{id}/previa
Abrir na referência interativaMostra como a nota vai ficar — impostos, valores e códigos — sem emitir nada. Use para conferir um serviço novo antes da primeira nota. O corpo é o mesmo de Emitir NFS-e; idIntegracao e ambiente são opcionais aqui.
Parâmetros
| Nome | Onde | Tipo | Descrição |
|---|---|---|---|
| cnpj obrigatório | caminho | string | CNPJ da empresa, só números. |
| id obrigatório | caminho | integer | O |
Exemplo de chamada
cURL
curl --request POST \
--url "https://apifiscal.weesy.com.br/v1/empresas/21664333000195/servicos/<id>/previa" \
--header "Authorization: Bearer $WEESY_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"valorServico": 100,
"discriminacao": "Suporte técnico — outubro/2026",
"tomador": {
"tipoPessoa": "J",
"cpfCnpj": "11222333000181",
"nome": "EMPRESA EXEMPLO LTDA",
"endereco": {
"cep": "01001000",
"logradouro": "Rua Exemplo",
"numero": "100",
"bairro": "Centro",
"codigoIbge": "3550308"
}
}
}'Node.js
const resposta = await fetch("https://apifiscal.weesy.com.br/v1/empresas/21664333000195/servicos/<id>/previa", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WEESY_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"valorServico": 100,
"discriminacao": "Suporte técnico — outubro/2026",
"tomador": {
"tipoPessoa": "J",
"cpfCnpj": "11222333000181",
"nome": "EMPRESA EXEMPLO LTDA",
"endereco": {
"cep": "01001000",
"logradouro": "Rua Exemplo",
"numero": "100",
"bairro": "Centro",
"codigoIbge": "3550308"
}
}
}),
});
console.log(resposta.status, await resposta.text());Python
import os
import requests
resposta = requests.post(
"https://apifiscal.weesy.com.br/v1/empresas/21664333000195/servicos/<id>/previa",
headers={"Authorization": f"Bearer {os.environ['WEESY_TOKEN']}"},
json={
"valorServico": 100,
"discriminacao": "Suporte técnico — outubro/2026",
"tomador": {
"tipoPessoa": "J",
"cpfCnpj": "11222333000181",
"nome": "EMPRESA EXEMPLO LTDA",
"endereco": {
"cep": "01001000",
"logradouro": "Rua Exemplo",
"numero": "100",
"bairro": "Centro",
"codigoIbge": "3550308",
},
},
},
timeout=30,
)
print(resposta.status_code, resposta.text)PHP
<?php
$corpo = <<<'JSON'
{
"valorServico": 100,
"discriminacao": "Suporte técnico — outubro/2026",
"tomador": {
"tipoPessoa": "J",
"cpfCnpj": "11222333000181",
"nome": "EMPRESA EXEMPLO LTDA",
"endereco": {
"cep": "01001000",
"logradouro": "Rua Exemplo",
"numero": "100",
"bairro": "Centro",
"codigoIbge": "3550308"
}
}
}
JSON;
$contexto = stream_context_create(["http" => [
"method" => "POST",
"header" => implode("\r\n", ["Authorization: Bearer " . getenv("WEESY_TOKEN"), "Content-Type: application/json"]),
"content" => $corpo,
"ignore_errors" => true, // lê o corpo também nas respostas de erro
]]);
$resposta = file_get_contents("https://apifiscal.weesy.com.br/v1/empresas/21664333000195/servicos/<id>/previa", false, $contexto);
echo $http_response_header[0], PHP_EOL, $resposta, PHP_EOL;C#
using System.Net.Http.Headers;
using System.Text;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("WEESY_TOKEN"));
var corpo = """
{
"valorServico": 100,
"discriminacao": "Suporte técnico — outubro/2026",
"tomador": {
"tipoPessoa": "J",
"cpfCnpj": "11222333000181",
"nome": "EMPRESA EXEMPLO LTDA",
"endereco": {
"cep": "01001000",
"logradouro": "Rua Exemplo",
"numero": "100",
"bairro": "Centro",
"codigoIbge": "3550308"
}
}
}
""";
using var resposta = await http.PostAsync(
"https://apifiscal.weesy.com.br/v1/empresas/21664333000195/servicos/<id>/previa",
new StringContent(corpo, Encoding.UTF8, "application/json"));
Console.WriteLine($"{(int)resposta.StatusCode} {await resposta.Content.ReadAsStringAsync()}");Corpo da requisição
| Campo | Tipo | Descrição | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cnpjEmitente | string | CNPJ da empresa responsável pela NFS-e. Precisa ser uma empresa da sua conta. | ||||||||||||||||||||
| servico | object | Um dos dois — | ||||||||||||||||||||
| servico. | integer | |||||||||||||||||||||
| servico. | string | Código do integrador no cadastro, quando ele usa a própria codificação de serviços (ex.: | ||||||||||||||||||||
| valorServico obrigatório | number | Valor bruto do serviço prestado. | ||||||||||||||||||||
| discriminacao | string | Padrão = discriminação do serviço. Limite do padrão do município (1000 em Barueri e Nacional, 2000 nos outros) — acima disso é recusada, não truncada. | ||||||||||||||||||||
| competencia | string (date) | Padrão = data da emissão. | ||||||||||||||||||||
| municipioPrestacao | string | Município em que o serviço foi prestado, quando informado. | ||||||||||||||||||||
| tomador obrigatório | object | Dados de identificação do tomador do serviço. | ||||||||||||||||||||
| tomador. obrigatório | string | Indica o tipo de pessoa do tomador. Valores: | ||||||||||||||||||||
| tomador. obrigatório | string | CPF ou CNPJ do tomador, sem pontuação. | ||||||||||||||||||||
| tomador. obrigatório | string | Nome completo ou razão social do tomador. | ||||||||||||||||||||
| tomador. | string | Inscrição municipal do tomador, quando aplicável. | ||||||||||||||||||||
| tomador. | string (email) | E-mail do tomador. | ||||||||||||||||||||
| tomador. | string | Telefone de contato do tomador. | ||||||||||||||||||||
| tomador. obrigatório | object | Endereço do tomador. | ||||||||||||||||||||
| tomador. obrigatório | string | CEP do endereço, sem pontuação. | ||||||||||||||||||||
| tomador. obrigatório | string | Tipo e nome do logradouro. | ||||||||||||||||||||
| tomador. obrigatório | string | Número do endereço. Sem número? Mande | ||||||||||||||||||||
| tomador. | string | Complemento do endereço, quando aplicável. | ||||||||||||||||||||
| tomador. obrigatório | string | Bairro do endereço. | ||||||||||||||||||||
| tomador. obrigatório | string | Código IBGE do município do endereço. | ||||||||||||||||||||
| destinatario | object | Quando diferente do tomador (indDest = 1). | ||||||||||||||||||||
| destinatario. obrigatório | string | Indica o tipo de pessoa do tomador. Valores: | ||||||||||||||||||||
| destinatario. obrigatório | string | CPF ou CNPJ do tomador, sem pontuação. | ||||||||||||||||||||
| destinatario. obrigatório | string | Nome completo ou razão social do tomador. | ||||||||||||||||||||
| destinatario. | string | Inscrição municipal do tomador, quando aplicável. | ||||||||||||||||||||
| destinatario. | string (email) | E-mail do tomador. | ||||||||||||||||||||
| destinatario. | string | Telefone de contato do tomador. | ||||||||||||||||||||
| destinatario. obrigatório | object | Endereço do tomador. | ||||||||||||||||||||
| destinatario. obrigatório | string | CEP do endereço, sem pontuação. | ||||||||||||||||||||
| destinatario. obrigatório | string | Tipo e nome do logradouro. | ||||||||||||||||||||
| destinatario. obrigatório | string | Número do endereço. Sem número? Mande | ||||||||||||||||||||
| destinatario. | string | Complemento do endereço, quando aplicável. | ||||||||||||||||||||
| destinatario. obrigatório | string | Bairro do endereço. | ||||||||||||||||||||
| destinatario. obrigatório | string | Código IBGE do município do endereço. | ||||||||||||||||||||
| imovel | object | Imóvel da operação — obrigatório com cIndOp | ||||||||||||||||||||
| imovel. obrigatório | string | Código do Cadastro Imobiliário Brasileiro ( | ||||||||||||||||||||
| imovel. | string ou null | Inscrição imobiliária fiscal no município ( | ||||||||||||||||||||
| imovel. obrigatório | object | Endereço para enviar. Não precisa mandar cidade nem UF — tiramos do código IBGE. | ||||||||||||||||||||
| imovel. obrigatório | string | CEP do endereço, sem pontuação. | ||||||||||||||||||||
| imovel. obrigatório | string | Tipo e nome do logradouro. | ||||||||||||||||||||
| imovel. obrigatório | string | Número do endereço. Sem número? Mande | ||||||||||||||||||||
| imovel. | string | Complemento do endereço, quando aplicável. | ||||||||||||||||||||
| imovel. obrigatório | string | Bairro do endereço. | ||||||||||||||||||||
| imovel. obrigatório | string | Código IBGE do município do endereço. | ||||||||||||||||||||
| issRetido | boolean | Padrão = o do serviço. | ||||||||||||||||||||
| aliquotaSimples | number | Obrigatória para Simples com retenção. | ||||||||||||||||||||
| consumoPessoal | boolean | Padrão = o do serviço. | ||||||||||||||||||||
| deducoes | number | Valor das deduções aplicado à prestação. | ||||||||||||||||||||
| descontoIncondicionado | number | Desconto concedido sem condição. | ||||||||||||||||||||
| descontoCondicionado | number | Desconto vinculado a condição. | ||||||||||||||||||||
| outrasRetencoes | number | Valor de outras retenções informadas na prestação. | ||||||||||||||||||||
| retencoesFederais | object | Valores de retenções federais informados na emissão. | ||||||||||||||||||||
| retencoesFederais. | number | Valor da retenção de PIS. | ||||||||||||||||||||
| retencoesFederais. | number | Valor da retenção de COFINS. | ||||||||||||||||||||
| retencoesFederais. | number | Valor da retenção de CSLL. | ||||||||||||||||||||
| retencoesFederais. | number | Valor da retenção de Imposto de Renda. | ||||||||||||||||||||
| retencoesFederais. | number | Valor da retenção de INSS. | ||||||||||||||||||||
| enviarEmail | boolean | Quando verdadeiro, solicita o envio da nota por e-mail após o processamento previsto. O valor padrão do contrato é | ||||||||||||||||||||
| idIntegracao | string | |||||||||||||||||||||
| ambiente | string | Onde a nota vai ser emitida. O endereço da API é o mesmo para os três — quem decide é este campo, em cada nota.
Como a simulação se comporta
|
Exemplo
{
"valorServico": 100,
"discriminacao": "Suporte técnico — outubro/2026",
"tomador": {
"tipoPessoa": "J",
"cpfCnpj": "11222333000181",
"nome": "EMPRESA EXEMPLO LTDA",
"endereco": {
"cep": "01001000",
"logradouro": "Rua Exemplo",
"numero": "100",
"bairro": "Centro",
"codigoIbge": "3550308"
}
}
}Respostas
- 200: Prévia.
- 400: Algum dado está errado ou faltando. A lista erros diz qual campo e o que corrigir (code = validacao). (formato de erro)
- 401: Token ausente, errado ou revogado (credencialinvalida). Confira o cabeçalho Authorization. (formato de erro)
- 404: Não encontrado. Pode ser que não exista ou que pertença a outra empresa — por segurança, os dois casos respondem igual. (formato de erro)
Campos da resposta 200
| Campo | Tipo | Descrição |
|---|---|---|
| valores obrigatório | object | Valores calculados para a prévia. |
| valores. | number | Valor do serviço prestado. |
| valores. | number | Valor das deduções consideradas. |
| valores. | number | Valor do desconto incondicionado. |
| valores. | number | Valor do desconto condicionado. |
| valores. | number | Base de cálculo apurada para o ISS. |
| valores. | number | Alíquota de ISS aplicada no cálculo, em percentual. |
| valores. | number | Valor de ISS apurado. |
| valores. | boolean | Indica a retenção do ISS. |
| valores. | object | Valores de retenções federais. |
| valores. | number | Valor da retenção de PIS. |
| valores. | number | Valor da retenção de COFINS. |
| valores. | number | Valor da retenção de CSLL. |
| valores. | number | Valor da retenção de Imposto de Renda. |
| valores. | number | Valor da retenção de INSS. |
| valores. | number | Valor líquido da prestação. |
| aliquotaEnviada | number ou null | O que vai no documento (null = alíquota não enviada). |
| incidenciaIss | object | Município e regra de incidência de ISS. |
| incidenciaIss. | string | Código IBGE do município de incidência. |
| incidenciaIss. | string | Identificador da regra usada na determinação do local de incidência. |
| incidenciaIbsCbs | object | Município e regra de incidência de IBS/CBS. |
| incidenciaIbsCbs. | string | Código IBGE do município de incidência. |
| incidenciaIbsCbs. | string | Identificador da regra usada na determinação do local de incidência. |
| padrao obrigatório | string | Padrão de NFS-e considerado no cálculo. |
| avisos obrigatório | array de object | Avisos e observações sobre o resultado calculado. |
| avisos[] obrigatório | string | |
| avisos[] obrigatório | string | |
| avisos[] obrigatório | boolean |
|
Exemplo de resposta 200
{
"valores": {
"servico": 100,
"baseCalculo": 100,
"aliquotaIss": 3,
"iss": 0,
"liquido": 100
},
"aliquotaEnviada": null,
"incidenciaIss": {
"codigoIbge": "3547809",
"regra": "estabelecimento_prestador"
},
"incidenciaIbsCbs": {
"codigoIbge": "3550308",
"regra": "domicilio_adquirente"
},
"padrao": "gissonline",
"avisos": [
{
"code": "aliquota_nao_enviada",
"mensagem": "Simples sem retenção: a alíquota é calculada mas não vai no RPS.",
"bloqueante": false
}
]
}