orderId and want to contract iFood's logistics services for delivery.GET /shipping/v1.0/orders/{orderId}/deliveryAvailabilities| Parameter | Location | Type | Required | Description |
|---|---|---|---|---|
orderId | path | uuid | Yes | ID of existing order on the platform |
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"id as quoteId in the next stage.| Field | Type | Description |
|---|---|---|
id | uuid | Quote ID (use as quoteId in next stage) |
expirationAt | datetime | Quote validity in UTC. Requesting after is invalid. |
createdAt | datetime | Quote creation date in UTC |
distance | integer | Delivery distance in meters |
preparationTime | integer | Preparation time in seconds |
quote.grossValue | decimal | Gross delivery value in reals |
quote.discount | decimal | Applied discount in reals |
quote.raise | decimal | Applied surcharge in reals |
quote.netValue | decimal | Net value = grossValue - discount + raise |
deliveryTime.min | integer | Estimated minimum delivery time in seconds |
deliveryTime.max | integer | Estimated maximum delivery time in seconds |
hasPaymentMethods | boolean | Indicates if payment methods are available |
paymentMethods[].id | uuid | Unique payment method ID |
paymentMethods[].brand | string | Card brand (e.g., Visa, Mastercard) |
paymentMethods[].liability | string | Payment responsible party (e.g., IFOOD) |
paymentMethods[].paymentType | string | Payment type (e.g., OFFLINE for cash on delivery) |
paymentMethods[].method | string | Payment method: CREDIT or DEBIT |
{
"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"
}
]
}400 Bad Request when delivery is not available. Check the error codes to determine the cause.| Code | Description | Recommended Action |
|---|---|---|
| BadRequest | Problem in request | Verify if orderId is in correct format |
| BadRequestMerchant | Your store is temporarily unavailable | Check store status in dashboard |
| DeliveryDistanceTooHigh | Address more than ~10km from store | Confirm address with customer |
| OffOpeningHours | Outside operating hours | Try again during business hours |
| OriginNotFound | Store not found in logistics area | Register your store in iFood areas |
| ServiceAreaMismatch | Address outside iFood coverage | Confirm if region has iFood delivery |
| HighDemand | Logistics saturated temporarily | Try again in a few minutes |
| MerchantStatusAvailability | Your account has pending issues | Contact iFood support |
| InvalidPaymentMethods | Payment method not supported | Use another payment method |
| SaturatedOfflinePayment | Cash on delivery unavailable | Switch to another method |
| NRELimitExceeded | Limit of simultaneous drivers reached | Wait for ongoing deliveries to complete |
{
"code": "DeliveryDistanceTooHigh",
"message": "On Demand unavailable: delivery address is more than 10 km from your store.",
"details": ["Delivery distance too high"]
}{
"code": "InternalServerError",
"message": "Oops. There was a failure. Please try again in a few moments.",
"details": ["Internal server error"]
}POST /shipping/v1.0/orders/{orderId}/requestDriver| Parameter | Location | Type | Required | Description |
|---|---|---|---|---|
orderId | path | uuid | Yes | ID of existing order on the platform |
quoteId | body | uuid | Yes | Quote ID obtained in previous stage (valid ~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"
}'{
"quoteId": "57cd1046-2e06-446f-a2dd-18a518212c3c"
}| Event | Meaning | Action |
|---|---|---|
| REQUEST_DRIVER | Request registered in system | Processing started |
| REQUEST_DRIVER_SUCCESS | Driver successfully allocated | Delivery will proceed as quoted |
| REQUEST_DRIVER_FAILED | Driver allocation failed | Try again or use another service |
| Code | Description | Recommended Action |
|---|---|---|
| BadRequest | Invalid data in request | Validate orderId and quoteId |
| BadRequestCustomer | Customer unavailable at the moment | Check customer data |
| BadRequestMerchant | Your store is unavailable | Check store status |
| DeliveryDistanceTooHigh | Address outside coverage | Confirm customer address |
| HighDemand | Logistics saturated now | Wait minutes and try again |
| MerchantEasyDeliveryDisabled | Service not enabled for your store | Enable service in dashboard |
| OffOpeningHours | Outside operating hours | Wait for business hours |
| OriginNotFound | Store not located | Register store in iFood areas |
| ServiceAreaMismatch | Address outside service area | Check iFood coverage in region |
| MerchantStatusAvailability | Your account has restrictions | Contact support |
| InvalidPaymentMethods | Payment method not supported | Use another payment method |
| SaturatedOfflinePayment | Cash on delivery unavailable | Switch to another method |
| NRELimitExceeded | Limit of simultaneous drivers reached | Wait for ongoing deliveries to complete |
{
"code": "HighDemand",
"message": "iFood logistics is temporarily unavailable. Please try again later.",
"details": ["High demand"]
}HighDemand, OffOpeningHours), implement automatic retry with exponential backoff.POST /shipping/v1.0/orders/{orderId}/cancelRequestDriver| Parameter | Location | Type | Required | Description |
|---|---|---|---|---|
orderId | path | uuid | Yes | ID of order to cancel delivery |
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"| Event | Meaning | Action |
|---|---|---|
| DELIVERY_CANCELLATION_REQUESTED | Cancellation requested from system | Processing started |
| DELIVERY_CANCELLATION_REQUEST_ACCEPTED | Cancellation accepted and processed | Delivery was cancelled, no fee |
| DELIVERY_CANCELLATION_REQUEST_REJECTED | Cancellation rejected by system | Driver already accepted; follow standard workflow |
orderId sent.{
"code": "BadRequest",
"message": "There was a problem requesting cancellation. Check the information sent.",
"details": ["Field 'OrderID' must be in uuid format."]
}orderId is a valid UUID in format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.{
"code": "InternalServerError",
"message": "Oops. There was a failure. Please try again in a few moments.",
"details": ["Internal server error"]
}