Crie rotas via API a partir de pedidos que já existem
Novo endpoint POST /v2/routes pega uma lista de order_ids e monta a rota — sem precisar reenviar os pedidos. Ideal pra quem já cadastrou o pedido e só quer roteirizar depois.
✅ No ar em produção. Disponível pra qualquer seller group.
A novidade em uma frase
Antes, pra criar uma rota via API você usava POST /v2/orders/route, que criava os pedidos e a rota no mesmo request. Funciona, mas se você já tinha cadastrado os pedidos via outro caminho (webhook, integração, dashboard), precisava reenviar tudo.
Agora tem POST /v2/routes: você manda só os order_ids que já existem + os dados da rota, e a gente monta a rota apontando pra eles.
📖 Referência completa com schema, exemplos e códigos de erro: Create Route from Orders.
Quando usar
- Pedido já está na Abbiamo. Se o pedido já entrou pelo seu fluxo normal (integração, webhook, dashboard, outro endpoint), use o endpoint novo. Mais simples, menos payload.
- Pedido ainda não existe. Se quer criar pedido + rota no mesmo request, continue usando
POST /v2/orders/route. Nada muda nele.
Payload
POST /v2/routes
x-abbiamo-seller-group-key: <sua-chave>
Content-Type: application/json{
"order_ids": [
"22222222-2222-2222-2222-222222222222",
"33333333-3333-3333-3333-333333333333"
],
"route": {
"driver_document": "11038299033",
"cost": 1000,
"start": {
"type": "WAREHOUSE_SELLER_IDENTIFIER",
"value": "minha-loja-01"
},
"end": {
"type": "WAREHOUSE_SELLER_IDENTIFIER",
"value": "minha-loja-01"
},
"orders_sequenced": false
}
}Campos da rota
start(obrigatório) — local de partida.typeé sempreWAREHOUSE_SELLER_IDENTIFIERevalueé oidentifierdo seller cujo local será usado.end(opcional) — local de chegada (se a rota terminar em outro lugar).driver_document(opcional) — CPF do motorista. Quando informado, tem que pertencer a algum seller do seu seller group. Veja a seção abaixo pra entender o papel desse campo.cost(opcional) — custo da rota, em centavos.expected_duration/expected_distance(opcionais) — duração estimada em minutos e distância em metros.orders_sequenced(opcional, defaultfalse) — setrue, a ordem do arrayorder_idsdefine a sequência da rota.external_name(opcional) — nome externo pra identificar a rota nos seus sistemas.
O papel do driver_document
driver_document é opcional de propósito — e isso muda como você pode operar a rota:
- Passou o
driver_document→ a rota já nasce com motorista atribuído, pronta pra ser despachada com a sua frota. - Não passou → a rota fica criada e "parada" (sem motorista). Aí você decide depois, pelo dashboard, o que fazer com ela:
- Atribuir um motorista próprio e despachar normalmente, ou
- Despachar pra uma transportadora (TRP) que suporte esse tipo de operação, e quem faz a entrega é a TRP.
Ou seja, dá pra usar o endpoint só pra agrupar pedidos numa rota e deixar a decisão de quem entrega pra um segundo momento, sem precisar ter um motorista na mão na hora de criar.
Validações
Antes de criar a rota, a gente valida — e devolve erro claro se algo não bater:
- Cada
order_idexiste e pertence ao seu seller group → senão,INVOICE_NOT_FOUND_OR_NOT_IN_SELLER_GROUP(404). - Cada pedido está roteirizável → senão,
INVOICE_NOT_ROUTEABLE(400). Detalhe abaixo. - O
seller_identifierdostart/endtem um local ativo associado → senão,WAREHOUSE_NOT_FOUND(404). - O motorista (quando informado) pertence a algum seller do seller group → senão,
DRIVER_NOT_FOUND(404).
O erro INVOICE_NOT_ROUTEABLE em detalhe
Esse é o erro que mais aparece na prática. Um pedido deixa de ser roteirizável quando ele já foi despachado em outro lugar — ou seja:
- Já foi incluído em outra rota (mesmo que ainda não tenha saído pra entrega), ou
- Já foi despachado como envio individual pra uma transportadora (TRP).
O motivo é simples: cada pedido só pode estar em um despacho ativo. Se ele já tá em rota A, não dá pra colocar em rota B sem antes cancelar a A.
A resposta vem assim:
{
"status_code": 400,
"timestamp": "2026-05-18T19:20:35.397Z",
"message": "Orders are not routeable: b235ada8-54ca-454e-8800-e64ecefa28a2",
"code": "INVOICE_NOT_ROUTEABLE",
"error_id": "f6c4b159-e94e-41b6-92c4-da29d3cc0580",
"params": {
"order_ids": [
"b235ada8-54ca-454e-8800-e64ecefa28a2"
]
}
}Como tratar: olhe a lista params.order_ids — esses são os culpados. Você pode:
- Remover os ids problemáticos da chamada e refazer com o restante, ou
- Cancelar o despacho anterior do pedido (rota antiga ou envio pra transportadora) e tentar de novo, ou
- Conferir no dashboard onde aquele pedido foi parar — geralmente o histórico do pedido mostra a rota/envio que travou.
Dúvida na integração? Fala com a gente.
DC-e nos envios sem NF-e: mais controle na criação de pedidos
Agora pedidos sem NF-e podem receber os dados da Declaração de Conteúdo Eletrônica direto na criação, com validações para evitar preenchimento incompleto ou divergente.
iFood agora é transportadora na Abbiamo
Lojas e restaurantes parceiros do iFood podem agora despachar e acompanhar entregas direto do nosso dashboard.