Ambiente de simulação — não é nota fiscal real, não transmite à SEFAZ e não substitui o responsável fiscal.
FiscalEngineNão conectado

1. Verificar o acesso

Confirma se a chave é válida e a licença permite uso.

curl https://fiscal-engine-api.onrender.com/api/v1/access/status \
  -H "X-API-Key: SUA_CHAVE"

2. Cadastrar o perfil fiscal (uma vez)

UF, regime e apuração de PIS/COFINS vêm daqui — não do corpo do cálculo.

curl -X POST https://fiscal-engine-api.onrender.com/api/v1/tenants/me/fiscal-profiles \
  -H "X-API-Key: SUA_CHAVE" -H "Content-Type: application/json" \
  -d '{"state":"SP","cityIbgeCode":"3550308","taxRegime":"RegimeNormal","stateTaxId":"ISENTO","pisCofinsRegime":"NaoCumulativo","isIpiTaxpayer":false,"effectiveFrom":"2026-01-01"}'

3. Calcular

Resposta 200 quando conclusivo; 422 com o mesmo formato e a lista de erros quando faltar dado, regra ou suporte ao cenário.

curl -X POST https://fiscal-engine-api.onrender.com/api/v1/fiscal/calculations \
  -H "X-API-Key: SUA_CHAVE" -H "Content-Type: application/json" \
  -d '{
    "operationDate": "2026-10-19",
    "documentModel": 55,
    "recipientState": "MG",
    "isB2C": false,
    "isSimulationMode": true,
    "items": [
      {
        "sequence": 1,
        "productCode": "P1",
        "productDescription": "Produto",
        "ncm": "01012100",
        "cfop": "6102",
        "unitOfMeasure": "UN",
        "quantity": 1,
        "unitPrice": 100,
        "icmsOrigin": 0
      }
    ]
  }'

Como ler a resposta

status
Valid, ValidWithWarnings, RequiresInput, Invalid ou UnsupportedScenario. Use valores apenas nos dois primeiros.
items[].taxes[]
Um registro por tributo, com situação, base, alíquota, valor, regra/versão e fundamento legal.
errors / warnings
Códigos estáveis (ex.: TAX_RULE_NOT_FOUND) e mensagem em português.
ruleSetVersion
Identifica as versões de regra usadas; permite reproduzir o cálculo em POST /calculations/{id}/reproduce.