API: GNRE (Guia Nacional de Recolhimento de Tributos Estaduais)

Crie a guia a partir do XML do CT-e (modo recomendado) ou manualmente. Suporte a receitas 100099 (ICMS frete) e 100102 (ICMS-ST por Operação).

Visão geral

Toda a tela /gnre também está disponível por API. O fluxo recomendado é enviar o XML do CT-e: extraímos os dados (chaves, partes, base de cálculo, alíquota e UF favorecida), aplicamos a configuração da UF/receita e devolvemos a guia já calculada e, opcionalmente, validada e emitida no mesmo passo.

Autenticação

Use os headers X-FreteFlow-Key (formato prefix.secret) e X-FreteFlow-Signature (HMAC-SHA256 do body cru com o segredo da chave). Veja Autenticação.

Escopos necessários

read para GET; write para POST/PATCH/DELETE.

Listar guias

GET/api/public/v1/gnre/operationsAuth: API key

Filtros via query string: status, uf, receita.

Criar a partir do CT-e (recomendado)

POST/api/public/v1/gnre/operationsAuth: API key

Quando o body contiver o campo xml, entramos no modo "from-cte". Os demais campos passam a ser opcionais e usados como override.

CampoTipoDescrição
external_idstringIdentificador no seu sistema.
xmlreqstringXML completo do CT-e (modelo 57).
receitaenum100099 (ICMS frete, padrão) | 100102 (ICMS-ST operação).
uf_favorecida_overridestring(2)Força UF favorecida; por padrão usa a UF de fim do CT-e.
aliquota_overridenumberDecimal (ex.: 0.12). Por padrão usa pICMS do CT-e ou a config da UF.
auto_validatebooleanSe true, executa validações em seguida.
auto_emitbooleanSe true, emite a guia (provider manual no momento).

Exemplo

bash
curl -X POST https://freteflow.fr.com.br/api/public/v1/gnre/operations \
  -H "X-FreteFlow-Key: $KEY" \
  -H "X-FreteFlow-Signature: $SIG" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "INT-2026-0001",
    "xml": "<?xml version=\"1.0\"?>...<cteProc>...</cteProc>",
    "receita": "100099",
    "auto_validate": true,
    "auto_emit": false
  }'

Criar manualmente

POST/api/public/v1/gnre/operationsAuth: API key

Quando o body não contiver xml, validamos o payload manual:

CampoTipoDescrição
receitareqenum100099 | 100102
uf_favorecidareqstring(2)UF de destino do imposto.
uf_origemstring(2)UF de origem (opcional).
cnpj_contribuintereqstringContribuinte (geralmente o transportador). Aceita com/sem máscara.
ie_contribuintestringInscrição estadual.
razao_contribuintestringRazão social.
cnpj_destinatariostringDestinatário, quando aplicável.
ie_destinatariostring
razao_destinatariostring
cte_chavestring(44)Chave do CT-e relacionado.
cte_numerostring
cte_seriestring
cte_emissaoISO date
valor_base_calculoreqnumberBase de cálculo do ICMS.
aliquotareqnumberDecimal (ex.: 0.12 para 12%).
valor_fcpnumberFundo de Combate à Pobreza.
valor_jurosnumber
valor_multanumber
valor_atualizacaonumber
valor_icms_overridenumberSobrescreve o ICMS calculado (use se já vier do CT-e).
data_vencimentoISO dateVencimento da guia.
observacoesstring
auto_validateboolean
auto_emitboolean

Resposta

json
{
  "data": {
    "id": "uuid",
    "code": "GNRE-0001",
    "status": "rascunho",
    "receita": "100099",
    "uf_favorecida": "SP",
    "valor_base_calculo": 1500.00,
    "aliquota": 0.12,
    "valor_icms": 180.00,
    "valor_total": 180.00,
    "data_vencimento": "2026-05-25"
  },
  "validation": null,
  "emission": null
}

Ações

POST/api/public/v1/gnre/operations/{id}/validateAuth: API key

Roda o motor de validação. Códigos: GNRE-CFG-*, GNRE-CTE-*, GNRE-CALC-*.

POST/api/public/v1/gnre/operations/{id}/emitAuth: API key

Emite a guia via provedor configurado (atualmente manual: gera nº interno e registra eventos para conciliação financeira).

POST/api/public/v1/gnre/operations/{id}/cancelAuth: API key
CampoTipoDescrição
motivoreqstringMín. 3 caracteres.
POST/api/public/v1/gnre/operations/{id}/mark-paidAuth: API key
CampoTipoDescrição
data_pagamentoreqISO date
comprovante_urlstringLink público do comprovante.
comprovante_filenamestring

Webhooks

Eventos disparados:

  • gnre.created — guia criada (manual ou via CT-e).
  • gnre.status_changed — qualquer mudança de status.
  • gnre.paid — marcada como paga.

Roadmap

A emissão na SEFAZ via webservice (com certificado A1 e XMLDSig) está prevista para a próxima fase. Hoje a emissão grava número interno e PDF placeholder, suficiente para registrar a obrigação e conciliar o pagamento no Financeiro.