Como calcular o piso mínimo de frete ANTT com PHP e a APIBrasil

Como calcular o piso mínimo de frete ANTT com PHP e a APIBrasil

No transporte rodoviário de cargas, o valor do frete tem um piso mínimo definido pela ANTT (Agência Nacional de Transportes Terrestres). Contratar ou oferecer frete abaixo desse piso pode gerar autuação, e calcular o valor na mão, com tabelas e coeficientes que mudam a cada normativa, é trabalhoso e sujeito a erro.

Neste tutorial você vai aprender a calcular o piso mínimo de frete ANTT com PHP usando a API Calcula Frete ANTT da APIBrasil, que já aplica a normativa vigente e devolve os coeficientes usados no cálculo.

Como o piso mínimo é calculado

A política de pisos mínimos usa dois coeficientes, que variam conforme o tipo de carga e o número de eixos:

  • CCD (coeficiente de custo de deslocamento), em R$ por km rodado.
  • CC (coeficiente de custo de carga e descarga), um valor fixo por viagem.

De forma simplificada, piso = distância × CCD + CC. A API faz esse cálculo com os valores da normativa em vigor na data de referência e devolve o resultado e os coeficientes aplicados, para você conferir e registrar.

O que a API Calcula Frete ANTT oferece

A API fica na categoria Serviços Digitais e custa R$ 0,05 por consulta em produção, conforme o catálogo. Todos os endpoints usam a mesma rota, e o campo tipo define a operação:

tipoO que faz
calcula-freteCalcula o piso mínimo para uma operação
opcoes-calculoLista os valores aceitos nos parâmetros
modelos-cargaLista os tipos de carga
normativa-atualInforma a normativa vigente
versoes-normativasLista as versões de normativas

Pré-requisitos

  • PHP 8.0 ou mais novo com a extensão cURL.
  • Bearer Token da APIBrasil, em Credenciais no painel. Veja os primeiros passos.

Passo 1: descubra os valores aceitos

Antes de calcular, consulte as opções válidas para tipo de carga e composição veicular. Isso evita chamadas com parâmetros errados, que continuariam sendo cobradas:

POST https://gateway.apibrasil.io/api/v2/consulta/frete-antt/credits

{ "tipo": "opcoes-calculo", "dataReferencia": "2026-09-26", "homolog": true }

Guarde essa lista no seu sistema e use-a para montar os campos de seleção da tela.

Passo 2: o corpo do cálculo

{
  "tipo": "calcula-frete",
  "tipoCarga": "carga_geral",
  "eixos": 6,
  "distanciaKm": 100,
  "composicaoVeicular": "cavalo_trucado",
  "altoDesempenho": false,
  "retornoVazio": false,
  "dataReferencia": "2026-09-26",
  "homolog": true
}
CampoDescrição
tipoCargaTipo de carga, como carga_geral
eixosNúmero de eixos carregados do veículo
distanciaKmDistância da viagem em km
composicaoVeicularComposição do veículo, como cavalo_trucado
altoDesempenhoSe a operação é de alto desempenho
retornoVazioSe o veículo volta vazio
dataReferenciaData usada para escolher a normativa vigente

Passo 3: o cliente em PHP

Crie o arquivo frete.php:

<?php
const URL = 'https://gateway.apibrasil.io/api/v2/consulta/frete-antt/credits';

function apibrasil(array $corpo): array
{
    $corpo['homolog'] = getenv('APIBRASIL_HOMOLOG') !== 'false';
    $ch = curl_init(URL);
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => json_encode($corpo),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 120,
        CURLOPT_HTTPHEADER     => [
            'Content-Type: application/json',
            'Authorization: Bearer ' . getenv('APIBRASIL_TOKEN'),
        ],
    ]);
    $body   = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($status === 402) {
        throw new RuntimeException('Saldo insuficiente na APIBrasil');
    }
    $json = json_decode((string) $body, true);
    if ($status >= 400 || !empty($json['error'])) {
        throw new RuntimeException($json['message'] ?? "HTTP $status");
    }
    return $json['data'];
}

$op = getopt('', ['km:', 'eixos:', 'carga:', 'proposta:']);

$r = apibrasil([
    'tipo'               => 'calcula-frete',
    'tipoCarga'          => $op['carga'] ?? 'carga_geral',
    'eixos'              => (int) ($op['eixos'] ?? 6),
    'distanciaKm'        => (float) ($op['km'] ?? 100),
    'composicaoVeicular' => 'cavalo_trucado',
    'altoDesempenho'     => false,
    'retornoVazio'       => false,
    'dataReferencia'     => date('Y-m-d'),
]);

$piso     = $r['pisoMinimo']['bruto'];
$proposta = (float) ($op['proposta'] ?? 0);

echo 'Normativa ........ ' . $r['versaoNormativa'] . PHP_EOL;
echo 'CCD aplicado ..... ' . $r['ccdAplicado']['formatado'] . ' ' . $r['ccdAplicado']['unidade'] . PHP_EOL;
echo 'CC aplicado ...... ' . $r['ccAplicado']['formatado'] . PHP_EOL;
echo 'Piso mínimo ...... ' . $r['pisoMinimo']['formatado'] . PHP_EOL;

if ($proposta > 0) {
    echo 'Frete proposto ... R$ ' . number_format($proposta, 2, ',', '.') . PHP_EOL;
    echo $proposta >= $piso
        ? "✔ Acima do piso ANTT\n"
        : '✖ Abaixo do piso ANTT: ajuste para ao menos ' . $r['pisoMinimo']['formatado'] . PHP_EOL;
}

Um detalhe útil desta API: os valores vêm em dois formatos, bruto (número, para cálculo) e formatado (texto, para exibir). Use sempre o bruto nas comparações.

Resposta JSON da API Calcula Frete ANTT com piso mínimo, CCD e CC aplicados
Em homologação os valores são fictícios, mas a estrutura é a mesma da produção.

Passo 4: rode o cálculo

export APIBRASIL_TOKEN="seu_token_aqui"
php frete.php --km=100 --eixos=6 --carga=carga_geral --proposta=650
Saída do script PHP comparando o valor do frete proposto com o piso mínimo ANTT
Comparação automática entre o frete negociado e o piso legal. Valores de homologação.

Juntando com a distância entre CEPs

Na maioria dos sistemas, o usuário informa CEP de origem e CEP de destino, não a quilometragem. Combine esta API com a API Calcula Distância CEP: primeiro obtenha a distância de carro entre os CEPs e depois use o resultado no distanciaKm.

Boas práticas

  • Registre a normativa: salve versaoNormativa, documentoBase e os coeficientes junto com o frete contratado. Em uma fiscalização, você mostra exatamente como o piso foi calculado.
  • Use a data da contratação em dataReferencia, não a data de hoje, quando estiver recalculando fretes antigos.
  • Valide na interface: impeça o envio de propostas abaixo do piso antes mesmo de salvar.

Perguntas frequentes

A API atualiza quando sai uma nova normativa?

A API tem endpoints para consultar a normativa atual e as versões disponíveis, e a resposta do cálculo informa qual normativa foi aplicada e o período de vigência. Confira esses campos no seu fluxo.

Este cálculo substitui a análise jurídica do contrato?

Não. A API calcula o piso conforme os parâmetros informados. Enquadramento da operação e cláusulas contratuais continuam sendo responsabilidade da sua equipe.

Próximos passos

Veja também como rastrear encomendas dos Correios com Python e boas práticas para integrar a APIBrasil em produção.

Loading

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *