Pular para o conteúdo

Referência da API

Cálculo

Um endpoint para todos os tributos: o dispatch é pelo campo `tributo` do payload. Tributo novo entra como payload novo — a rota e o envelope de resposta não mudam.

POST/v1/calculate

Envelope de resposta

Idêntico para todo tributo:

CampoTipoDescrição
tributostringEco do discriminador do payload.
valordecimal (string)Montante devido do tributo.
regraobjetoA prova de auditabilidade: rule_id (ID semântico, ex.: BR-MG-SP-NCM2202-ICMSST-v4.1), citacao_legal, vigente_de e vigente_ate (null = vigente).
detalhesobjetoCampos específicos do tributo — os componentes do cálculo, documentados em cada seção abaixo. Novos campos podem ser adicionados; tolere desconhecidos.
cachedbooleantrue quando a resposta veio do cache (mesma regra, mesma vigência).

Payloads por tributo

O campo tributo aceita: icms_st, icms, ipva, itcmd, iss, iptu, itbi, ipi, pis/cofins, cbs/ibs.

icms_st — ICMS Substituição Tributária

ICMS-ST em operação interestadual ou interna: base por MVA ajustada ou por pauta fiscal/PMPF, conforme a regra vigente.

CampoTipoDescrição
ncm*stringNCM com 8 dígitos, ex.: "22021000".
uf_origem*stringUF de origem, ex.: "SP".
uf_destino*stringUF de destino, ex.: "MG".
data_operacao*dateData da operação — define a regra vigente.
valor_produto*decimal (string)Valor do produto (> 0).
ipidecimal (string)IPI destacado. Default 0.
fretedecimal (string)Frete. Default 0.
despesasdecimal (string)Despesas acessórias. Default 0.
quantidadedecimal (string)Quantidade na unidade da pauta (litro/kg/unidade). Exigida quando a regra aplicável usa pauta fiscal/PMPF (base = valor de pauta × quantidade); sem ela a chamada recusa com 422. Ignorada nas regras só-MVA.
Exemplo de payload
{
  "tributo": "icms_st",
  "ncm": "22021000",
  "uf_origem": "SP",
  "uf_destino": "MG",
  "data_operacao": "2026-08-01",
  "valor_produto": "1000.00",
  "ipi": "100.00"
}

Campos de detalhes

base_calculo_st, icms_proprio, icms_st, aliquota_interna, aliquota_interestadual, mva_aplicada, base_metodo ("mva" ou "pauta" — qual base venceu) e, quando a regra modela o adicional, fcp_st (parcela do Fundo de Combate à Pobreza dentro do total — paridade com vFCPST/vICMSST da NF-e).

icms — ICMS próprio

ICMS da operação própria, interna (uf_origem == uf_destino) ou interestadual (alíquota da Resolução do Senado, com tabela assinada como autoridade).

CampoTipoDescrição
uf_origem*stringUF de origem.
uf_destino*stringUF de destino — igual à origem é operação interna.
ncmstringNCM de 8 dígitos (opcional): regra específica do produto vence a geral da UF.
valor_produto*decimal (string)Valor da operação com o imposto por dentro (LC 87/1996, art. 13).
fretedecimal (string)Frete que integra a base. Default 0.
despesasdecimal (string)Seguros, juros e demais. Default 0.
data_operacao*dateData da operação.
origem_mercadoria"nacional" | "importada"Default "nacional". "importada" aciona os 4% da Res. SF 13/2012 na interestadual.
destinatario_contribuintebooleanDefault true (B2B revenda). false é DIFAL — fora do escopo atual, recusa 422 nomeada.
destinatario_consumidor_finalbooleanDefault false. true recusa 422 nomeada (fase 2).
regime_simples_nacionalbooleanDefault false. Optante do Simples recusa 422 nomeada — o DAS não sai daqui.
Exemplo de payload
{
  "tributo": "icms",
  "uf_origem": "SP",
  "uf_destino": "SP",
  "ncm": "22021000",
  "valor_produto": "1000.00",
  "data_operacao": "2026-08-01"
}

Campos de detalhes

tipo_operacao, base_calculo, aliquota_aplicada, split valor_icms / valor_fcp (paridade com vICMS/vFCP da NF-e), isento (+ isencao_base_legal), regra_casada, citacao_interestadual e divergencia_interestadual.

ipva — IPVA

IPVA anual. A base é o valor venal informado — o motor não consulta FIPE.

CampoTipoDescrição
uf*stringUF de licenciamento.
categoria_veiculo*enumautomovel, motocicleta, caminhao, caminhonete, onibus_micro_onibus, locadora, taxi, pcd.
valor_venal*decimal (string)Valor venal do veículo (base de cálculo).
data_fato_gerador*dateFato gerador (1º/jan do exercício) — define a vigência.
combustivelenumOpcional: gasolina, etanol, flex, diesel, gnv, eletrico, hibrido. Desambigua alíquota diferenciada (ex.: SP 3%).
Exemplo de payload
{
  "tributo": "ipva",
  "uf": "SP",
  "categoria_veiculo": "automovel",
  "valor_venal": "80000.00",
  "data_fato_gerador": "2026-01-01"
}

Campos de detalhes

valor_venal, aliquota_aplicada, categoria_veiculo, combustivel, isento e motivo_isencao.

itcmd — ITCMD / ITCD

Transmissão causa mortis e doação. Em MG o imposto se chama ITCD — o discriminador é o mesmo.

CampoTipoDescrição
uf*stringUF competente.
fato_gerador*"causa_mortis" | "doacao"Natureza da transmissão.
valor_base*decimal (string)Valor venal transmitido (um quinhão, ou a doação acumulada da janela legal).
data_fato_gerador*dateÓbito (saisine) ou doação.
valor_unidade_fiscaldecimal (string)R$ de 1 UFESP/UFEMG no ano. Exigido quando a regra tem isenção ou faixas em unidades fiscais.
Exemplo de payload
{
  "tributo": "itcmd",
  "uf": "SP",
  "fato_gerador": "doacao",
  "valor_base": "150000.00",
  "data_fato_gerador": "2026-08-01",
  "valor_unidade_fiscal": "37.02"
}

Campos de detalhes

base, aliquota_aplicada, fato_gerador, isento (+ isencao_base_legal, limite_isencao) e, na progressividade, o detalhamento por faixas.

iss — ISS

Municipal: informe o município onde o ISS é devido (na construção civil, o da obra — LC 116, § 3º).

CampoTipoDescrição
uf*stringUF do município (desambigua homônimos).
municipio*stringNome oficial IBGE, ex.: "São Paulo".
item_lista_servico*stringItem da LC 116 na grafia "1.05".
preco_servico*decimal (string)Preço do serviço (base do percentual).
data*dateData da prestação.
regime"normal" | "sociedade_uniprofissional"Default "normal".
numero_profissionaisintObrigatório no regime fixo (sociedade uniprofissional).
Exemplo de payload
{
  "tributo": "iss",
  "uf": "SP",
  "municipio": "São Paulo",
  "item_lista_servico": "1.05",
  "preco_servico": "24000.00",
  "data": "2026-08-01"
}

Campos de detalhes

preco_servico, aliquota_aplicada, item_lista_servico, regime, retido_na_fonte e, no regime fixo, numero_profissionais / periodicidade.

iptu — IPTU

Base = valor venal informado (o motor não calcula planta genérica de valores).

CampoTipoDescrição
uf*stringUF do município.
municipio*stringNome oficial IBGE.
uso_imovel*"residencial" | "nao_residencial" | "territorial"Uso do imóvel.
valor_venal*decimal (string)Valor venal (base de cálculo).
exercicio*intExercício — fato gerador em 1º/jan.
Exemplo de payload
{
  "tributo": "iptu",
  "uf": "SP",
  "municipio": "São Paulo",
  "uso_imovel": "residencial",
  "valor_venal": "450000.00",
  "exercicio": 2026
}

Campos de detalhes

valor_venal_tributavel, modelo_progressividade, faixa_aplicada (+ aliquota, parcela_deduzir), imposto_bruto, excecoes_aplicadas e excecoes_nao_avaliadas.

itbi — ITBI

Transmissão onerosa de imóveis. Base default = valor da transação declarado (STJ Tema 1113).

CampoTipoDescrição
uf*stringUF do município.
municipio*stringNome oficial IBGE.
valor_transacao*decimal (string)Valor declarado da transmissão.
valor_venal_referenciadecimal (string)Valor de referência do cadastro municipal (regras históricas).
financiado_sfhbooleanAquisição via SFH/PAR/HIS. Default false; true exige valor_financiado > 0.
valor_financiadodecimal (string)Parcela financiada (não pode exceder o valor da transação).
data*dateData do fato gerador.
Exemplo de payload
{
  "tributo": "itbi",
  "uf": "SP",
  "municipio": "São Paulo",
  "valor_transacao": "600000.00",
  "data": "2026-08-01"
}

Campos de detalhes

base aplicada, alíquota, tratamento SFH e observações da regra municipal.

ipi — IPI

Primeiro federal do contrato: sem UF nem município — a regra da TIPI é nacional e quem a identifica é o NCM e, quando existe, o Ex tarifário.

CampoTipoDescrição
ncm*stringNCM com 8 dígitos, na grafia da TIPI.
exstringEx tarifário, ex.: "01" (canonizado: "1""01"). Omitido resolve a linha-mãe; declarado sem regra própria cai na linha-mãe com ex_aplicado=false.
valor_produto*decimal (string)Valor da operação de que decorre a saída (CTN, art. 47, II).
fretedecimal (string)Frete cobrado do comprador (RIPI, art. 190, § 1º). Default 0.
despesasdecimal (string)Demais despesas acessórias debitadas. Default 0.
data_operacao*dateDefine a edição vigente da TIPI.
Exemplo de payload
{
  "tributo": "ipi",
  "ncm": "22021000",
  "valor_produto": "1000.00",
  "data_operacao": "2026-08-01"
}

Campos de detalhes

situacao (tributado | nao_tributado | aliquota_zero), aliquota_aplicada, base_calculo, ex_aplicado / ex_declarado e tabela_versao.

pis / cofins — PIS/PASEP e COFINS

Dois discriminadores ("pis" e "cofins") com o mesmo corpo: o par custa duas chamadas, porque cada contribuição tem regra, alíquota e citação próprias — e o envelope é singular por contrato.

CampoTipoDescrição
regime_apuracao*enumcumulativo | nao_cumulativo | simples. Fato do contribuinte — o motor não infere. simples é vocabulário válido e responde 422 nomeado (as contribuições vão dentro do DAS).
ncmstringOpcional — discrimina os regimes especiais (monofásico, alíquota zero); a regra ordinária do regime não tem NCM.
exstringEx tarifário (mesmo eixo do IPI) — o regime de bebidas frias alcança 2106.90.10 Ex 02, não o código-pai.
papel_na_cadeia"fabricante_importador" | "revenda"Opcional; exigido quando a regra que casa é monofásica — o mesmo NCM é 2,32% para o fabricante e 0% para a revenda.
venda_a"varejista_consumidor_final" | "demais"Opcional; exigido quando a regra discrimina o comprador (Lei 13.097/2015, art. 25, § 1º reduz a alíquota em ~20% na venda a varejista/consumidor final).
destinacao_autopropulsadobooleanAutopeças dos Anexos I/II da Lei 10.485/2002: quando o NCM tem regra-marcadora, false destrava o cálculo ordinário; true ou ausência respondem 422 nomeado.
valor_operacao*decimal (string)Receita da operação, líquida de desconto incondicional.
valor_icms_destacado*decimal (string)ICMS destacado no documento — excluído da base (Tema 69/Lei 14.592). Obrigatório; zero explícito é legítimo (serviço, exportação). Omitir inflaria a base.
data_operacao*dateDefine a regra vigente.
Exemplo de payload
{
  "tributo": "pis",
  "regime_apuracao": "nao_cumulativo",
  "ncm": "25232910",
  "papel_na_cadeia": "fabricante_importador",
  "valor_operacao": "10000.00",
  "valor_icms_destacado": "1800.00",
  "data_operacao": "2026-08-01"
}

Campos de detalhes

situacao (tributado | aliquota_zero | monofasico_revenda), regime_apuracao, papel_na_cadeia, venda_a, motivo_zero quando o zero é legítimo, e o eco dos eixos declarados (ex_aplicado, destinacao_autopropulsado).

cbs / ibs — Reforma tributária (ano-teste 2026)

CBS (0,9%) e IBS (0,1%) da LC 214/2025 em cálculo paralelo ao regime atual. Dois discriminadores, mesmo corpo, contrato estrito (campo desconhecido recusa) — sem UF nem município: em 2026 não há alíquota por ente.

CampoTipoDescrição
valor_operacao*decimal (string)Valor com ICMS/ISS/PIS/COFINS por dentro e sem CBS/IBS (tributo "por fora" — art. 12 da LC 214/2025).
valor_icms*decimal (string)ICMS da operação, incluído o retido por ST. Se não incide, declare 0 — omitir recusa.
valor_iss*decimal (string)ISS da operação. Declare 0 se não incide.
valor_pis*decimal (string)PIS/Pasep da operação. Declare 0 se não incide.
valor_cofins*decimal (string)COFINS da operação. Declare 0 se não incide.
valor_ipi*decimal (string)IPI destacado — exclusão permanente da base (art. 12, § 2º, II).
cumpre_obrigacoes_acessorias*booleanCondição da dispensa do recolhimento (art. 348, § 1º). Sem default — fato do contribuinte.
optante_simples*booleantrue recusa com 422 nomeado: a lei afasta o optante do ano-teste.
ncmstringOpcional — endereça a lista de recusa de regimes diferenciados (ex.: alíquota zero, redução de 60%).
item_lista_servicostringOpcional — mesmo papel do NCM para serviços.
data_operacao*dateFora de 2026 não há regra do ano-teste (404).
Exemplo de payload
{
  "tributo": "cbs",
  "valor_operacao": "1000.00",
  "valor_icms": "180.00",
  "valor_iss": "0",
  "valor_pis": "16.50",
  "valor_cofins": "76.00",
  "valor_ipi": "0",
  "cumpre_obrigacoes_acessorias": true,
  "optante_simples": false,
  "data_operacao": "2026-09-01"
}

Campos de detalhes

valor_destaque, valor_devido, dispensado, dispensa_presumida, motivo_dispensa, base_calculo e aliquota_aplicada.

Convenções que valem para todos

  • Decimais viajam como string com ponto ("1000.00"); datas em ISO 8601 ("2026-08-01"); UFs em sigla maiúscula.
  • Campos com default podem ser omitidos; zero explícito e ausência são coisas diferentes onde o contrato diz que são (PIS/COFINS, CBS/IBS).
  • A resposta de um payload idêntico é estável dentro da mesma vigência — mudança de resultado implica regra nova, visível no GET /v1/changelog e no webhook.