orderId pré-existente) ao serviço de entrega Sob Demanda.GET /shipping/v1.0/merchants/{merchantId}/deliveryAvailabilities?latitude={lat}&longitude={lng}merchantId (path) - ID do merchantlatitude (query) - Latitude do endereço de entregalongitude (query) - Longitude do endereço de entrega| Campo | Tipo | Descrição |
|---|---|---|
| id | uuid | ID da cotação |
| expirationAt | datetime | Validade da cotação (UTC) |
| createdAt | datetime | Data de criação (UTC) |
| distance | integer | Distância em metros |
| preparationTime | integer | Tempo de preparo em segundos |
| quote.grossValue | decimal | Valor bruto |
| quote.discount | decimal | Desconto |
| quote.raise | decimal | Acréscimo |
| quote.netValue | decimal | Valor líquido |
| deliveryTime.min | integer | Tempo mínimo de entrega (segundos) |
| deliveryTime.max | integer | Tempo máximo de entrega (segundos) |
| hasPaymentMethods | boolean | Indica métodos de pagamento disponíveis |
| paymentMethods[].method | string | CREDIT, DEBIT ou CASH |
{
"id": "57cd1046-2e06-446f-a2dd-18a518212c3c",
"expirationAt": "2023-08-18T19:49:06Z",
"createdAt": "2023-08-17T19:49:06Z",
"distance": 3000,
"preparationTime": 60,
"quote": {
"grossValue": 7.99,
"discount": 0,
"raise": 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"
},
{
"id": "93c1c7c7-61f1-4dd9-bb84-62a03254701d",
"liability": "IFOOD",
"paymentType": "OFFLINE",
"method": "CASH"
}
]
}| Código | Descrição |
|---|---|
| BadRequest | Problema na requisição. Verifique os dados |
| BadRequestMerchant | Merchant indisponível |
| DeliveryDistanceTooHigh | Endereço fora da área de cobertura |
| OffOpeningHours | Fora do horário de funcionamento |
| OriginNotFound | Loja fora da área logística |
| ServiceAreaMismatch | Endereço fora da área de cobertura |
| HighDemand | Logística temporariamente indisponível |
| MerchantStatusAvailability | Merchant com pendência |
| InvalidPaymentMethods | Forma de pagamento não aceita |
| NRELimitExceeded | Limite de entregadores atingido |
| UnavailableFleet | Frota indisponível |
customer.phone.type="CUSTOMER" com telefone válidocustomer.phone.type="STORE"DELIVERY_DROP_CODE_REQUESTED com metadata.CODE para disponibilizar o código ao cliente.POST /shipping/v1.0/merchants/{merchantId}/orders| Campo | Tipo | Descrição |
|---|---|---|
| customer.name* | string | Nome (máx. 50 caracteres) |
| customer.phone.type | string | CUSTOMER (padrão) ou STORE |
| customer.phone.countryCode* | string | Código do país (2 dígitos). Ex: 55 |
| customer.phone.areaCode* | string | DDD (2 dígitos). Ex: 11 |
| customer.phone.number* | string | Telefone (7-9 dígitos) |
customer.phone.type="STORE"| Campo | Tipo | Descrição |
|---|---|---|
| delivery.merchantFee* | float | Taxa do parceiro |
| delivery.preparationTime | integer | Tempo de preparo (segundos) |
| delivery.quoteId | uuid | ID da cotação |
| delivery.deliveryAddress.postalCode* | string | CEP (8 dígitos) |
| delivery.deliveryAddress.streetNumber* | string | Número |
| delivery.deliveryAddress.streetName* | string | Logradouro (máx. 50 caracteres) |
| delivery.deliveryAddress.complement | string | Complemento (máx. 50 caracteres) |
| delivery.deliveryAddress.reference | string | Referência (máx. 70 caracteres) |
| delivery.deliveryAddress.neighborhood* | string | Bairro (máx. 50 caracteres) |
| delivery.deliveryAddress.city* | string | Cidade (2-50 caracteres) |
| delivery.deliveryAddress.state* | string | UF (2 letras). Ex: SP |
| delivery.deliveryAddress.country* | string | País (2 letras). Ex: BR |
| delivery.deliveryAddress.coordinates.latitude* | float | Latitude |
| delivery.deliveryAddress.coordinates.longitude* | float | Longitude |
| Campo | Tipo | Descrição |
|---|---|---|
| items[].id* | uuid | ID do item |
| items[].name* | string | Nome (máx. 50 caracteres) |
| items[].externalCode | string | Código externo |
| items[].quantity* | integer | Quantidade (> 0) |
| items[].unitPrice* | float | Preço unitário (≥ 0) |
| items[].price* | float | Preço total (quantity * unitPrice) |
| items[].optionsPrice* | float | Preço dos complementos (≥ 0) |
| items[].totalPrice* | float | Total (price + optionsPrice) |
| Campo | Tipo | Descrição |
|---|---|---|
| payments.methods[].method* | string | CREDIT, DEBIT ou CASH |
| payments.methods[].type* | string | OFFLINE |
| payments.methods[].value* | float | Valor |
| payments.methods[].card.brand* | string | Bandeira (se CREDIT/DEBIT) |
| payments.methods[].cash.changeFor* | float | Troco (se CASH) |
payments (processado pelo merchant)| Campo | Tipo | Descrição |
|---|---|---|
| displayId | string | ID amigável (máx. 4 caracteres). Ex: A4BC |
| metadata | object | Informações adicionais (máx. 20 caracteres) |
delivery.preparationTime para atrasar a alocação do entregador.{
"id": "522e4d7e-0ce1-44f3-8cc7-73a9f190a5e8",
"trackingUrl": "https://meupedido.ifood.com.br/522e4d7e-0ce1-44f3-8cc7-73a9f190a5e8"
}salesChannel="POS"| Código | Descrição |
|---|---|
| BadRequest | Problema na requisição |
| BadRequestCustomer | Cliente indisponível |
| BadRequestMerchant | Merchant indisponível |
| DeliveryDistanceTooHigh | Fora da área de cobertura |
| HighDemand | Logística indisponível temporariamente |
| MerchantEasyDeliveryDisabled | Serviço não habilitado |
| OffOpeningHours | Fora do horário de funcionamento |
| OriginNotFound | Loja fora da área logística |
| PaymentMethodNotFound | Método de pagamento não encontrado |
| PaymentTotalInvalid | Valor do pagamento não corresponde ao total |
| ServiceAreaMismatch | Endereço fora da cobertura |
| NRELimitExceeded | Limite de entregadores atingido |
customer.phone.type="STORE"POST /shipping/v1.0/orders/{orderId}/userConfirmAddressPOST /shipping/v1.0/orders/{orderId}/deliveryAddressChangeRequestPOST /shipping/v1.0/orders/{orderId}/acceptDeliveryAddressChangemetadata.action="region-mismatch"POST /shipping/v1.0/orders/{orderId}/denyDeliveryAddressChange| Código | Status | Descrição |
|---|---|---|
| BadRequest | 400 | Parâmetros inválidos |
| OrderNotFound | 404 | Pedido não encontrado ou expirado (>8h) |
| ChangeAddressOperationConflict | 409 | Conflito com operação existente |
| ChangeAddressOperationNotStarted | 409 | Nenhuma alteração pendente |
| MaxDistanceHigherThanAllowed | 400 | Alteração > 500m |
| RegionMismatch | 400 | Novo endereço em região diferente |
salesChannel="POS".GET /shipping/v1.0/orders/{orderId}/cancellationReasons[{
"cancelCodeId": "817",
"description": "O cliente cancelou o pedido pelo restaurante"
}]POST /shipping/v1.0/orders/{orderId}/cancel{
"reason": "Cliente solicitou cancelamento",
"cancellationCode": "817"
}CANCELLED (sucesso) ou CANCELLATION_REQUEST_FAILED (falha)| Nível | Descrição |
|---|---|
| LOW | Confiança baixa |
| MODERATE | Confiança moderada |
| HIGH | Confiança alta |
| VERY_HIGH | Confiança muito alta |
| Regra | Descrição |
|---|---|
| customer_phone_valid | Telefone válido (não STORE, >11 dígitos) |
| customer_phone_is_fixed | Telefone fixo (8 dígitos) |
| customer_address_confirmed | Endereço confirmado pelo cliente |
| customer_address_change_requested | Cliente solicitou alteração |
| merchant_address_change_approved | Merchant aprovou alteração |
| merchant_address_change_denied | Merchant negou alteração |
customer_phone_valid:false → LOWcustomer_phone_is_fixed:true → MODERATEcustomer_phone_is_fixed:true + customer_address_confirmed:true → VERY_HIGHcustomer_phone_valid:true → HIGHcustomer_phone_valid:true + alteração aprovada → VERY_HIGHcustomer_phone_valid:true + alteração negada → LOWGET /shipping/v1.0/orders/{orderId}/safeDelivery{
"rules": {
"customer_address_change_requested": false,
"customer_address_confirmed": false,
"customer_phone_is_fixed": false,
"customer_phone_valid": true,
"merchant_address_change_approved": false,
"merchant_address_change_denied": false
},
"score": "HIGH"
}400 OrderWithoutSafeDelivery: Pedido sem regras de confiança404 OrderNotFound: Pedido não encontrado