Use esta documentação para criar pedidos fora da plataforma iFood e contratar logística Sob Demanda simultaneamente. Ideal para integradoras e sistemas que criam seus próprios pedidos.
Como funciona
O fluxo consiste em 5 etapas principais:
Verificar disponibilidade - Valide cobertura e obtenha cotação
Registrar pedido - Crie o pedido e aloque entregador
Gerenciar endereço - Confirme ou altere endereço de entrega
Cancelar pedido - Cancele conforme necessário
Monitorar confiança - Rastreie o nível de segurança da entrega
1. Verificar disponibilidade
Antes de criar o pedido, verifique se a entrega está disponível para o endereço fornecido. Este endpoint retorna a cotação com preço e tempo estimado.
Endpoint
GET /shipping/v1.0/merchants/{merchantId}/deliveryAvailabilities?latitude={lat}&longitude={lng}
Erro temporário no servidor. Tente novamente em alguns segundos.O que fazer: Implemente retry com backoff exponencial. Após 3-5 tentativas sem sucesso, registre em log e notifique o suporte.
2. Registrar pedido
Registre um novo pedido e aloque automaticamente um entregador iFood para pedidos criados fora da plataforma.
Comportamento importante
Entenda como o sistema funciona:
Um entregador é alocado automaticamente após o registro bem-sucedido
Se a entrega não for viável, o pedido não será criado
Valide todos os dados antes de enviar para evitar rejeições
O registro é uma operação assíncrona; use o id retornado para rastreamento
Segurança na entrega: Código de confirmação
Por segurança, um código de confirmação é gerado automaticamente. O entregador solicitará este código ao cliente para validar a identidade.
Dois modos disponíveis
Modo 1: Com código (padrão - recomendado)
Envie customer.phone.type="CUSTOMER" com número válido
O código será os 4 últimos dígitos do telefone
Entregador solicitará o código antes de entregar
Mais seguro; recomendado para entregas de alto valor
Modo 2: Sem código (apenas com autorização)
Envie customer.phone.type="STORE"
Código não será solicitado
Apenas validação de presença
Use quando cliente não pode fornecer validação
Informar o cliente
Informe previamente ao cliente que o entregador solicitará validação (código ou confirmação). Falha ou recusa pode resultar em cancelamento sem reembolso.
Para integradoras sem página de rastreio iFood
Se sua plataforma não usa a página de rastreio do iFood, implemente:
{"delivery": {"preparationTime": 900// 15 minutos em segundos }}
→ Entregador alocado após 15 minutos
Melhores práticas
Use dados reais: Base o preparationTime no tempo médio de preparo do seu negócio
Consulte a cotação: O endpoint de disponibilidade retorna preparationTime sugerido - use como referência
Ajuste iterativamente: Monitore se entregadores chegam cedo/tarde e ajuste
Adicione margem: Considere picos - é melhor entregar um pouco atrasado do que perder pedidos
Exemplo prático
Dados do seu negócio:- Tempo médio de preparo: 12 minutos- Variação típica: ±2 minutos- Margem de segurança: +3 minutosRecomendação:preparationTime = (12 + 3) * 60 = 900 segundos (15 minutos)
Integração com polling de eventos
Após criar o pedido com sucesso, implemente monitoramento de eventos:
Verifique todos os campos obrigatórios (marcados com *)
BadRequestCustomer
Cliente indisponível ou inválido
Verifique nome, telefone do cliente
BadRequestMerchant
Sua loja está indisponível
Verifique status da loja no painel
DeliveryDistanceTooHigh
Endereço fora da cobertura
Confirme coordenadas com cliente
HighDemand
Logística saturada neste momento
Tente novamente em alguns minutos
MerchantEasyDeliveryDisabled
Serviço não habilitado para sua loja
Ative o serviço no painel iFood
OffOpeningHours
Fora do horário de operação
Aguarde o horário comercial
OriginNotFound
Loja não localizada na área logística
Registre sua loja nas áreas iFood
PaymentMethodNotFound
Método de pagamento não suportado
Use método disponível (CREDIT, DEBIT ou CASH)
PaymentTotalInvalid
Valor de pagamento ≠ total do pedido
Verifique soma dos itens + entrega
ServiceAreaMismatch
Endereço fora da área de serviço
Confirme cobertura iFood na região
NRELimitExceeded
Limite de entregadores simultâneos
Aguarde conclusão de entregas em andamento
Erro 500 Internal Server Error
Erro temporário no servidor. Tente novamente em alguns segundos.O que fazer: Implemente retry com backoff exponencial. Após 3-5 tentativas sem sucesso, registre em log e notifique o suporte.
3. Confirmação/alteração de endereço
Gerencie mudanças de endereço após o pedido ser criado. O cliente pode confirmar o endereço ou solicitar uma alteração.
Dois fluxos disponíveis
Opção A: Com página de rastreio iFood (recomendado)
Cliente usa a página do iFood (trackingUrl) para confirmar/alterar endereço de forma segura.Requisitos:
Pedido NÃO pode ter customer.phone.type="STORE"
Telefone válido é obrigatório (recebe OTP por SMS)
Use URL retornada na criação do pedido
Fluxo: Cliente acessa URL → Recebe OTP via SMS → Valida endereço → ConfirmaVantagem: iFood gerencia segurança, OTP, validação
Opção B: Sem página de rastreio iFood (integração custom)
Sua plataforma implementa própria interface de confirmação/alteração usando os endpoints.Requisitos:
Você gerencia a interface do usuário
Responsabilidade sua validar e implementar segurança
Fluxo: Cliente confirma na sua app → Você chama endpoints → Monitora eventosNota: iFood não envia OTP. Você escolhe como validar (senha, OTP próprio, etc).
Segurança: Se usar OTP, implemente validação adequada. Endereços incorretos resultam em falhas de entrega.
3.1 Confirmar endereço original
Usado quando cliente confirma que o endereço fornecido está correto (sem mudanças).
POST /shipping/v1.0/orders/{orderId}/userConfirmAddress
Confirmação registrada com sucesso.Evento gerado:DELIVERY_ADDRESS_CHANGE_USER_CONFIRMEDMonitore este evento para ser informado quando cliente confirmar.
3.2 Solicitar alteração de endereço
Cliente pode solicitar mudança do endereço de entrega após criação do pedido (máximo 500m da coordenada original).
POST /shipping/v1.0/orders/{orderId}/deliveryAddressChangeRequest
Solicitação de alteração registrada. Seu sistema deve responder em até 15 minutos.Evento gerado:DELIVERY_ADDRESS_CHANGE_REQUESTEDMonitore este evento para ser notificado da solicitação e oferecer opções ao cliente.
Restrições importantes
Restrição
Limite
Consequência
Distância máxima
500m da coordenada original
Alterações maiores são rejeitadas
Prazo para resposta
15 minutos
Após isso, rejeição automática
Mudança de região
Não permitido
Gera evento automático de negação
3.3 Aceitar alteração de endereço
Seu sistema aprova a mudança de endereço solicitada pelo cliente.
POST /shipping/v1.0/orders/{orderId}/acceptDeliveryAddressChange
CANCELLATION_REQUEST_FAILED - Falha no cancelamento (ex: entregador já saiu)
Monitore via polling para saber o resultado final.
5. Nível de confiança na entrega (Safe Delivery Score)
Sistema de scoring automático que calcula o nível de confiança de cada entrega baseado em fatores de validação do cliente e endereço.Use o score para: Tomar decisões operacionais (ex: pedir confirmação adicional para LOW, priorizar HIGH/VERY_HIGH).
Níveis de confiança
Nível
Descrição
Quando ocorre
Recomendação
LOW
Confiança baixa
Cliente inválido ou alteração negada
Solicitar confirmação extra do cliente
MODERATE
Confiança moderada
Telefone fixo (validação mais fraca)
Monitorar atentamente
HIGH
Confiança alta
Telefone móvel válido
Processamento padrão
VERY_HIGH
Confiança muito alta
Telefone válido + endereço confirmado
Priorizar, menos risco
Regras de cálculo
O score é calculado combinando os seguintes fatores:
Regra
Descrição
Impacto
customer_phone_valid
Telefone móvel válido (11+ dígitos, tipo CUSTOMER)
rules.* (boolean) - Cada regra verdadeira ou falsa
Resposta - 400 OrderWithoutSafeDelivery
Pedido não tem regras de confiança aplicáveis (criado antes do sistema).
Resposta - 404 OrderNotFound
Pedido não existe ou expirou (máximo 8 horas).
Dinâmica do score
O score não é estático - muda conforme as ações ocorrem:
Quando o score muda
Evento
Impacto
Novo Score
Cliente confirma endereço
Aumenta confiança
Pode subir para VERY_HIGH
Cliente solicita alteração
Reduz (erro inicial?)
Pode cair para MODERATE/LOW
Você aprova alteração
Aumenta confiança
Pode voltar para VERY_HIGH
Você rejeita alteração
Reduz muito
Cai para LOW
Tempo passa
Alguns dados expiram
Score pode cair ao longo do tempo
Melhor prática
Consulte o score próximo ao horário de entrega (não apenas na criação):
1. Pedido criado → Score HIGH ↓ (Cliente confirma endereço)2. Antes de entregar → Score VERY_HIGH ↓ (Use para decisões críticas)3. Aloque recursos ou aplique validações extras se LOW
Exemplo de uso operacional:
Score VERY_HIGH → Entrega padrão, sem validação extra
Score HIGH → Monitoramento normal
Score MODERATE → Considere contato prévio com cliente
Score LOW → Requeira confirmação adicional antes de entregar