Cotação de frete, etiquetas e rastreamento via Frenet.
Nó Frenet
O nó de workflow Frenet é um cliente REST para a Frenet API. Use-o para cotar fretes e rastrear envios pelo agregador logístico Frenet — ideal para automação pós-checkout em e-commerce brasileiro.
Node ID no editor: frenet_request
URL padrão: POST https://api.frenet.com.br/shipping/quote
O que faz
- Chama endpoints de frete Frenet com autenticação via header
token - Suporta GET e POST
- Retorna HTTP
status,datada resposta eheadersda resposta - Auth padrão:
token: {{frenet_token}}(não use Authorization Bearer)
Pré-requisitos
- Conta Frenet com acesso à API
- API token do dashboard Frenet
- Integration key em Configurações → API Keys:
frenet_token
Como configurar
Passo 1 — Obter API token
Faça login na Frenet e copie seu API token nas configurações de integração.
Passo 2 — Definir credenciais
Adicione frenet_token como integration key (campo Token).
Passo 3 — Configurar o nó
| Campo | Obrigatório | Descrição |
|---|---|---|
| URL / Endpoint | Sim | URL Frenet API |
| Method | Não | Cotação e rastreio usam POST |
| Headers (JSON) | Não | Header token (pré-configurado) |
| Body (JSON) | Sim | CEP/dimensões (cotação) ou código de rastreio (tracking) |
Templates de operação integrados
| Operação | Method | Endpoint |
|---|---|---|
| Cotar frete | POST | https://api.frenet.com.br/shipping/quote |
| Rastrear envio | POST | https://api.frenet.com.br/tracking/trackinginfo |
Exemplo — cotar frete (POST body):
{
"SellerCEP": "{{variables.seller_cep}}",
"RecipientCEP": "{{variables.destination_cep}}",
"ShipmentInvoiceValue": 100,
"ShippingItemArray": [
{
"Weight": {{variables.package_weight}},
"Length": {{variables.package_length}},
"Height": {{variables.package_height}},
"Width": {{variables.package_width}},
"Quantity": 1
}
]
}
Use workflow variables para CEP e dimensões a partir de dados do pedido (saída de nó de e-commerce).
Exemplo — rastrear envio:
- URL:
https://api.frenet.com.br/tracking/trackinginfo - Method:
POST - Body:
{
"ShippingServiceCode": "{{variables.shipping_service_code}}",
"TrackingNumber": "{{variables.tracking_code}}"
}
ShippingServiceCode é obrigatório e precisa ser o da transportadora que realmente levou o pacote. Rode GET https://api.frenet.com.br/shipping/info para listar os serviços habilitados na sua conta com ServiceCode e CarrierCode.
⚠️ A Frenet não valida o código contra o rastreio. Com o serviço errado a API responde 200 sem erro, só que
TrackingEventsvem vazio — e em alguns casos ela ainda monta umTrackingUrlde outra transportadora, que abre em "Não encontramos informações do rastreio". Trate lista de eventos vazia como código errado, não como "pacote sem movimentação".
Passo 4 — Usar dados da resposta
Opção mais barata: {{frenet_1.data.ShippingSevicesArray[0].ServiceDescription}}
Preço: {{frenet_1.data.ShippingSevicesArray[0].ShippingPrice}}
Prazo: {{frenet_1.data.ShippingSevicesArray[0].DeliveryTime}}
Inspecione a saída de execução — a Frenet retorna array de opções em ShippingSevicesArray (grafia oficial da API) e, no tracking, TrackingEvents.
Link de rastreio. Nem todo serviço devolve TrackingUrl (J&T JTE_INT, por exemplo, sempre devolve null). O link público segue o formato https://rastreio.frenet.com.br/{CarrierCode}/{TrackingNumber}, então monte-o em um nó JS Code e só envie quando houver eventos:
const data = nodes['frenet_1'].data || {};
const events = Array.isArray(data.TrackingEvents) ? data.TrackingEvents : [];
// Sem eventos o ShippingServiceCode não bate com o pacote: não há link confiável
const trackingUrl = events.length
? (data.TrackingUrl || 'https://rastreio.frenet.com.br/JTE/' + variables.tracking_code)
: '';
return { trackingUrl, hasEvents: events.length ? 'true' : 'false' };
Status legível. A Frenet devolve os eventos do mais recente para o mais antigo (TrackingEvents[0] é o atual). Prefira mapear o EventType a rótulos curtos em vez de usar EventDescription — a descrição é uma frase longa que muda a cada centro de distribuição, então comparar por ela dispara notificação repetida no mesmo estágio:
EventType | Status |
|---|---|
0 | Postado |
1 | Em trânsito |
2 | Atraso |
3 | Objeto devolvido |
4 | Extravio |
5 | Saiu para entrega |
9 | Objeto entregue |
Saídas do nó
| Campo de saída | Descrição |
|---|---|
status | HTTP status code |
data | Corpo da resposta JSON parseado |
headers | Response headers |
Dicas e boas práticas
- Peso tipicamente em quilogramas; dimensões em centímetros — confirme em documentação Frenet
- Auth: use o header
token.Authorization: Bearerretorna 401 - Cote antes da compra — use nó Condition para escolher transportadora mais barata vs. mais rápida
- Encadeie com nós de e-commerce: buscar pedido → extrair CEP → cotação Frenet → notificar cliente
- Tracking exige
ShippingServiceCode+TrackingNumberválidos e do mesmo pacote - Em rastreio recorrente, grave o último status enviado (planilha, CRM, variável) e notifique só quando ele mudar — sem isso o cliente recebe a mesma mensagem a cada ciclo
- Pare de consultar rastreios em status terminal (entregue, devolvido, extravio): economiza chamadas e evita reenvio
- Teste com pares de CEP reais — CEPs inválidos retornam listas vazias ou serviços com
Error: true
Exemplos de uso
Cotar frete após pagamento
- Webhook — pedido pago (NuvemShop, WooCommerce, etc.)
- Nó de e-commerce — obter CEP do endereço de entrega
- Frenet POST — cotar com dimensões padrão do pacote
- Send WhatsApp — "Opções de frete: {{frenet_1.data.ShippingSevicesArray[0].ServiceDescription}} — R$ {{frenet_1.data.ShippingSevicesArray[0].ShippingPrice}}"
Atualização de rastreamento ao cliente
- Schedule — a cada 4 horas
- Variable — código de rastreamento e
ShippingServiceCodedos metadados do pedido - Frenet POST — tracking/trackinginfo
- JS Code — rótulo pelo
EventTypedo evento mais recente e linkrastreio.frenet.com.br/{CarrierCode}/{código} - Condition — houve eventos e o status difere do último notificado
- Send WhatsApp — atualização de entrega + link, e grave o novo status na origem
FAQ
Por que array ShippingSevicesArray vazio ou só erros?
CEP inválido, rota não suportada ou pacote excede limites da transportadora. Verifique dimensões e peso.
Por que 401 Unauthorized / Acesso negado?
frenet_token inválido, ausente, ou header errado (Authorization: Bearer em vez de token). Regenere o token no dashboard Frenet.
O rastreio volta 200 com TrackingEvents vazio — o pacote não saiu?
Quase sempre é ShippingServiceCode de outra transportadora. Liste os serviços da conta em GET https://api.frenet.com.br/shipping/info e repita a consulta com o ServiceCode correto antes de concluir que não há movimentação.
O link de rastreio abre "Não encontramos informações do rastreio".
O CarrierCode na URL não corresponde ao pacote. Isso acontece quando se usa o TrackingUrl devolvido para um ShippingServiceCode errado — a Frenet monta o link sem conferir o código. Só envie o link quando TrackingEvents tiver itens.
TrackingUrl veio null.
Normal em alguns serviços (J&T JTE_INT, por exemplo). Monte o link como https://rastreio.frenet.com.br/{CarrierCode}/{TrackingNumber} — o CarrierCode sai de GET /shipping/info.
A Frenet gera etiquetas neste nó?
Templates integrados cobrem apenas cotação e rastreamento. Geração de etiqueta pode exigir endpoints Frenet adicionais — configure URL/body manualmente conforme docs, ou use nó Melhor Envio para etiquetas.
Posso cotar múltiplos itens?
Use ShippingItemArray com vários objetos conforme a documentação da API.
Referência da API
| Item | Valor |
|---|---|
| Quote URL | POST https://api.frenet.com.br/shipping/quote |
| Tracking URL | POST https://api.frenet.com.br/tracking/trackinginfo |
| Serviços da conta | GET https://api.frenet.com.br/shipping/info |
| Página pública de rastreio | https://rastreio.frenet.com.br/{CarrierCode}/{TrackingNumber} |
| Auth | Header token |
| Docs oficiais | Frenet API documentation |
Relacionado
Este artigo foi útil?
Precisa de mais ajuda? Falar com suporte