Buscar na documentação
ctrl+4K
Módulos
Authentication
Merchant
Catalog
Order
Events
Logistics
Shipping
Review
Financial
Soluções

Pedidos na plataforma iFood

Use esta documentação para solicitar entregadores iFood para pedidos que já existem na plataforma com orderId. Este fluxo é ideal para usar logística iFood como backup ou para expandir sua capacidade de entrega.
O fluxo consiste em três etapas:
  1. Verificar disponibilidade - Confirme que a entrega está disponível para o endereço
  2. Solicitar entregador - Aloque um entregador iFood para o pedido
  3. Cancelar (opcional) - Cancele a solicitação antes do aceite do entregador
ClientAPIPolling de Eventos1. Verificar disponibilidadeGET /orders/{orderId}/deliveryAvailabilitiesCotação e janelas de entrega2. Solicitar entregadorPOST /orders/{orderId}/requestDriverREQUEST_DRIVER`202 Accepted`REQUEST_DRIVER_SUCCESS/FAILED3. Cancelar solicitação (opcional)POST /orders/{orderId}/cancelRequestDriverDELIVERY_CANCELLATION_REQUESTED`202 Accepted`ClientAPIPolling de Eventos
Antes de solicitar um entregador, verifique se a entrega está disponível para o pedido. Este endpoint retorna a cotação com preço e tempo estimado.
GET /shipping/v1.0/orders/{orderId}/deliveryAvailabilities
ParâmetroLocalizaçãoTipoObrigatórioDescrição
orderIdpathuuidSimID do pedido existente na plataforma
curl -X GET "https://merchant-api.ifood.com.br/shipping/v1.0/orders/{orderId}/deliveryAvailabilities" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json"
A cotação foi obtida com sucesso. Use o id como quoteId na próxima etapa. A cotação é válida por ~24 horas.

Campos da resposta

CampoTipoDescrição
iduuidID da cotação (use como quoteId na próxima etapa)
expirationAtdatetimeValidade da cotação em UTC
createdAtdatetimeData de criação da cotação em UTC
distanceintegerDistância de entrega em metros
quote.grossValuedecimalValor bruto em reais
quote.discountdecimalDesconto em reais
quote.netValuedecimalValor final (grossValue - discount)
deliveryTime.minintegerTempo mínimo estimado em segundos
deliveryTime.maxintegerTempo máximo estimado em segundos
hasPaymentMethodsbooleanIndica se há formas de pagamento
paymentMethods[].iduuidID do método de pagamento
paymentMethods[].brandstringBandeira do cartão
paymentMethods[].liabilitystringResponsável pelo pagamento
paymentMethods[].paymentTypestringTipo de pagamento (ex: OFFLINE)
paymentMethods[].methodstringCREDIT ou DEBIT

Exemplo de resposta

{
  "id": "57cd1046-2e06-446f-a2dd-18a518212c3c",
  "expirationAt": "2023-08-18T19:49:06Z",
  "createdAt": "2023-08-17T19:49:06Z",
  "distance": 3000,
  "quote": {
    "grossValue": 7.99,
    "discount": 0,
    "netValue": 7.99
  },
  "deliveryTime": {
    "min": 1200,
    "max": 1800
  },
  "hasPaymentMethods": true,
  "paymentMethods": [
    {
      "id": "21c65a8c-f29e-463f-b0bd-240edeb593c4",
      "brand": "Visa",
      "liability": "IFOOD",
      "paymentType": "OFFLINE",
      "method": "CREDIT"
    }
  ]
}
Neste exemplo: distância de 3km, preço de R$ 7,99, tempo estimado de 20-30 minutos, e 1 método de pagamento disponível.
A entrega não está disponível. Verifique o código de erro para entender o motivo e a ação recomendada.
Para soluções detalhadas de cada erro, consulte Boas práticas e troubleshooting.

Códigos de erro

CódigoDescriçãoAção
BadRequestProblema na requisiçãoVerifique se o orderId está no formato correto
BadRequestMerchantSua loja está indisponívelVerifique o status da loja no painel
DeliveryDistanceTooHighEndereço a mais de ~10kmConfirme o endereço com o cliente
OffOpeningHoursFora do horário de operaçãoTente novamente no horário comercial
OriginNotFoundLoja não encontradaRegistre sua loja nas áreas iFood
ServiceAreaMismatchEndereço fora da coberturaConfirme se a região tem entrega iFood
HighDemandLogística saturadaTente novamente em alguns minutos
MerchantStatusAvailabilitySua conta tem pendênciasContate o suporte
InvalidPaymentMethodsForma de pagamento não suportadaUse outro método
SaturatedOfflinePaymentPagamento na entrega indisponívelAltere para outro método
NRELimitExceededLimite de entregadores atingidoAguarde conclusão de entregas

Exemplo de erro

{
  "code": "DeliveryDistanceTooHigh",
  "message": "Sob Demanda indisponível: o endereço da entrega está a mais de 10 km da sua loja.",
  "details": ["Delivery distance too high"]
}
Erro temporário no servidor. Implemente retry automático com backoff exponencial. Após 3-5 tentativas, registre em log e notifique o suporte.
{
  "code": "InternalServerError",
  "message": "Ops. Houve uma falha. Tente novamente em alguns instantes.",
  "details": ["Internal server error"]
}
Com a cotação obtida, solicite a alocação de um entregador iFood. Este é uma operação assíncrona que retorna 202 Accepted imediatamente e aloca o entregador em background.
Operação assíncrona: A resposta 202 Accepted indica apenas que a requisição foi recebida. Monitore os eventos para saber o resultado final (sucesso ou falha).
POST /shipping/v1.0/orders/{orderId}/requestDriver
ParâmetroLocalizaçãoTipoObrigatórioDescrição
orderIdpathuuidSimID do pedido existente na plataforma
quoteIdbodyuuidSimID da cotação obtida na etapa anterior (válida por ~24h)
curl -X POST "https://merchant-api.ifood.com.br/shipping/v1.0/orders/{orderId}/requestDriver" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "quoteId": "57cd1046-2e06-446f-a2dd-18a518212c3c"
  }'
Body:
{
  "quoteId": "57cd1046-2e06-446f-a2dd-18a518212c3c"
}
A requisição foi registrada com sucesso. Monitore os eventos para obter o resultado:
EventoSignificado
REQUEST_DRIVERRequisição registrada
REQUEST_DRIVER_SUCCESSEntregador alocado com sucesso
REQUEST_DRIVER_FAILEDFalha na alocação
O processamento é assíncrono e pode levar minutos.Requisição inválida ou serviço indisponível.
Para soluções detalhadas de cada erro, consulte Boas práticas e troubleshooting.
CódigoDescriçãoAção
BadRequestDados inválidosValide orderId e quoteId
BadRequestCustomerCliente indisponívelVerifique dados do cliente
BadRequestMerchantSua loja está indisponívelVerifique status da loja
DeliveryDistanceTooHighEndereço fora da coberturaConfirme endereço com o cliente
HighDemandLogística saturadaTente novamente em minutos
MerchantEasyDeliveryDisabledServiço não habilitadoAtive no painel
OffOpeningHoursFora do horárioTente durante horário comercial
OriginNotFoundLoja não localizadaRegistre sua loja nas áreas iFood
ServiceAreaMismatchEndereço fora da áreaVerifique cobertura iFood
MerchantStatusAvailabilitySua conta tem restriçõesContate o suporte
InvalidPaymentMethodsForma de pagamento não suportadaUse outro método
SaturatedOfflinePaymentPagamento na entrega indisponívelAltere para outro método
NRELimitExceededLimite de entregadores atingidoAguarde conclusão de entregas

Exemplo de erro

{
  "code": "HighDemand",
  "message": "A logística iFood está temporariamente indisponível. Tente novamente mais tarde.",
  "details": ["High demand"]
}
Para erros transientes como HighDemand ou OffOpeningHours, implemente retry automático com backoff exponencial.
Cancele a alocação de entregador sem cancelar o pedido em si. Use este endpoint quando a preparação foi mais rápida ou lenta que o esperado.
Restrição: Cancelamentos só são possíveis antes do aceite do entregador. Após o aceite, siga o fluxo de cancelamento de pedido. A ação é permanente.
POST /shipping/v1.0/orders/{orderId}/cancelRequestDriver
ParâmetroLocalizaçãoTipoObrigatórioDescrição
orderIdpathuuidSimID do pedido a cancelar entrega
curl -X POST "https://merchant-api.ifood.com.br/shipping/v1.0/orders/{orderId}/cancelRequestDriver" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json"
A solicitação de cancelamento foi registrada. Monitore os eventos para confirmação:
EventoSignificado
DELIVERY_CANCELLATION_REQUESTEDCancelamento solicitado
DELIVERY_CANCELLATION_REQUEST_ACCEPTEDCancelamento concluído, sem taxa
DELIVERY_CANCELLATION_REQUEST_REJECTEDEntregador já aceitou
Para mais detalhes, consulte Eventos de entrega.Requisição inválida. Verifique se o orderId é um UUID válido.
{
  "code": "BadRequest",
  "message": "Houve um problema ao solicitar o cancelamento. Verifique as informações enviadas.",
  "details": ["Campo 'OrderID' deve estar no formato uuid."]
}
Erro temporário no servidor. Implemente retry automático com backoff exponencial. Após 3-5 tentativas, registre em log e notifique o suporte.
{
  "code": "InternalServerError",
  "message": "Ops. Houve uma falha. Tente novamente em alguns instantes.",
  "details": ["Internal server error"]
}
  1. Implemente polling de eventos para monitorar status em tempo real
  2. Consulte a guia de rastreamento para informações de localização
  3. Explore a referência completa de endpoints
Esta página foi útil?
Avalie sua experiência no novo Developer portal: