Search in documentation
ctrl+4K
First steps
Homologation
About our APIs

Overview

Rate limit is the maximum number of requests that a single application can make in a given period of time. When the application exceeds this limit, the API request will fail and return an HTTP status code 429 (Too Many Requests).These limits help us provide a reliable and scalable API for all users.
Each module and endpoint of the iFood API has specific request limit policies. Limits vary based on:
  • The specific endpoint being accessed.
  • The type of your application.
  • Time window (per minute, hour, or day).
If you receive a 429 error:
  1. Review your application's behavior.
  2. Check if there's code that might be in a loop.
  3. Implement exponential backoff and retry logic.
  4. Consider caching responses when appropriate.
429 Errors
Many 429 errors occur when applications enter a loop state due to unexpected failures. Check if your application really needs to make frequent requests to the affected endpoint.
  • Implement request rate monitoring in your application.
  • Add specific error handling for 429 responses.
  • Use our response headers to track your current usage:
    • X-RateLimit-Limit: Your total request allocation.
    • X-RateLimit-Remaining: Remaining requests in the current window.
    • X-RateLimit-Reset: Time (in seconds) until your limit is reset.
Best practices
Check the documentation about Best practices.
Check below the specific request limits that apply to each module.
EndpointLimit
POST /oauth/token20 req/min
POST /oauth/userCode20 req/min
EndpointLimit
GET /events:polling6000 req/min
POST /events/acknowledgment6000 req/min
GET /orders/{id}3000 req/min
GET /orders/{id}/virtual-bag1000 req/s
POST /orders/{id}/confirm3000 req/min
POST /orders/{id}/startPreparation3000 req/min
POST /orders/{id}/readyToPickup3000 req/min
POST /orders/{id}/dispatch3000 req/min
POST /orders/{id}/requestCancellation300 req/min
POST /orders/{id}/tracking5000 req/min
POST /order/v1.0/disputes/{disputeId}/accept1000 req/min
POST /order/v1.0/disputes/{disputeId}/reject1000 req/min
POST /order/v1.0/disputes/{disputeId}/alternatives/{alternativeId}1000 req/min
EndpointLimit
GET /merchants/{merchantId}/deliveryAvailabilities4000 req/min
GET /orders/{orderId}/deliveryAvailabilities4000 req/min
POST /merchants/{merchantId}/order4000 req/min
POST /orders/{orderId}/requestDriver4000 req/min
POST /orders/{orderId}/cancel600 req/min
POST /orders/{orderId}/cancelRequestDriver600 req/min
POST /orders/{orderId}/userConfirmAddress500 req/min
POST /orders/{orderId}/deliveryAddressChangeRequest500 req/min
POST /orders/{orderId}/acceptDeliveryAddressChange500 req/min
POST /orders/{orderId}/denyDeliveryAddressChange500 req/min
GET /orders/{orderId}/safeDelivery500 req/min
EndpointLimit
GET /merchants100 req/min
GET /merchants/{merchantId}300 req/min
GET /merchants/{merchantId}/status20000 req/min
GET /merchants/{merchantId}/interruptions100 req/min
POST /merchants/{merchantId}/interruptions200 req/min
DELETE /merchants/{merchantId}/interruptions/{interruptionId}100 req/min
GET /merchants/{merchantId}/opening-hours100 req/min
PUT /merchants/{merchantId}/opening-hours100 req/min
EndpointLimit
GET /merchants/{merchantId}/reviews2000 req/min
GET /merchants/{merchantId}/reviews/{reviewId}2000 req/min
POST /merchants/{merchantId}/reviews/{reviewId}/answers2000 req/min
GET /merchants/{merchantId}/summary2000 req/min
EndpointLimit
GET /merchants/{merchantId}/sales1000 req/min
GET /merchants/{merchantId}/payments1000 req/min
GET /merchants/{merchantId}/paymentDetails1000 req/min
GET /merchants/{merchantId}/occurrences1000 req/min
GET /merchants/{merchantId}/maintenanceFees1000 req/min
GET /merchants/{merchantId}/incomeTaxes1000 req/min
GET /merchants/{merchantId}/periods?competence={competence}1000 req/min
GET /merchants/{merchantId}/chargeCancellations1000 req/min
GET /merchants/{merchantId}/cancellations1000 req/min
GET /merchants/{merchantId}/receivableRecords1000 req/min
GET /merchants/{merchantId}/salesAdjustments1000 req/min
GET /merchants/{merchantId}/salesBenefits1000 req/min
GET /merchants/{merchantId}/adjustmentsBenefits1000 req/min
EndpointLimit
All Catalog module endpoints15000 req/min
EndpointLimit
GET /merchants/{merchantId}/catalogs/{catalogId}/categories3000 req/min
POST /merchants/{merchantId}/catalogs/{catalogId}/categories3000 req/min
GET /merchants/{merchantId}/catalogs/{catalogId}/categories/{categoryId}3000 req/min
PATCH /merchants/{merchantId}/catalogs/{catalogId}/categories/{categoryId}3000 req/min
GET /merchants/{merchantId}/categories/{categoryId}/items3000 req/min
DELETE /merchants/{merchantId}/categories/{categoryId}3000 req/min
GET /merchants/{merchantId}/catalogs3000 req/min
GET /merchants/{merchantId}/catalogs/{catalogId}/unsellableItems3000 req/min
GET /merchants/{merchantId}/catalogs/{groupId}/sellableItems3000 req/min
GET /merchants/{merchantId}/catalogs/{catalogId}/changelog3000 req/min
GET /merchants/{merchantId}/catalog/version3000 req/min
GET /merchants/{merchantId}/products3000 req/min
POST /merchants/{merchantId}/products3000 req/min
PUT /merchants/{merchantId}/products/{productId}3000 req/min
DELETE /merchants/{merchantId}/products/{productId}3000 req/min
PATCH /merchants/{merchantId}/products/status5000 req/min
PATCH /merchants/{merchantId}/products/price5000 req/min
GET /merchants/{merchantId}/product/{productId}3000 req/min
GET /merchants/{merchantId}/products/externalCode/{externalCode}3000 req/min
DELETE /merchants/{merchantId}/categories/{categoryId}/products/{productId}3000 req/min
GET /merchants/{merchantId}/items/{itemId}/flat3000 req/min
PATCH /merchants/{merchantId}/item/price5000 req/min
PATCH /merchants/{merchantId}/item/status5000 req/min
PATCH /merchants/{merchantId}/item/externalCode3000 req/min
PUT /merchants/{merchantId}/items3000 req/min
GET /merchants/{merchantId}/optionGroups5000 req/min
DELETE /merchants/{merchantId}/optionGroups/{optionGroupId}3000 req/min
PATCH /merchants/{merchantId}/optionGroups/{optionGroupId}5000 req/min
DELETE /merchants/{merchantId}/optionGroups/{optionGroupId}/products/{productId}5000 req/min
PATCH /merchants/{merchantId}/optionGroups/{optionGroupId}/status5000 req/min
DELETE /merchants/{merchantId}/optionGroups/{optionGroupId}/products/{productId}/option5000 req/min
PATCH /merchants/{merchantId}/options/price5000 req/min
PATCH /merchants/{merchantId}/options/status5000 req/min
PATCH /merchants/{merchantId}/options/externalCode5000 req/min
GET /merchants/{merchantId}/batch/{batchId}5000 req/min
POST /merchants/{merchantId}/inventory5000 req/min
GET /merchants/{merchantId}/inventory/{productId}5000 req/min
POST /merchants/{merchantId}/inventory/batchDelete5000 req/min
POST /merchants/{merchantId}/version/upgrade3000 req/min
POST /merchants/{merchantId}/version/downgrade3000 req/min
EndpointLimit
POST /merchants/{merchantId}/promotions1000 req/min
EndpointLimit
POST /ingestion/{merchantId}1000 req/min
PATCH /ingestion/{merchantId}1000 req/min
EndpointLimit
POST /logistics/v1.0/orders/{id}/assignDriver3000 req/min
POST /logistics/v1.0/orders/{id}/goingToOrigin3000 req/min
POST /logistics/v1.0/orders/{id}/arrivedAtOrigin3000 req/min
POST /logistics/v1.0/orders/{id}/dispatch3000 req/min
POST /logistics/v1.0/orders/{id}/arrivedAtDestination3000 req/min
POST /logistics/v1.0/orders/{id}/verifyDeliveryCode3000 req/min
EndpointLimit
POST /orders/{id}/startSeparation1000 req/s
POST /orders/{id}/endSeparation1000 req/s
POST /orders/{id}/items1000 req/s
PATCH /orders/{id}/items/{uniqueId}1000 req/s
DELETE /orders/{id}/items/{uniqueId}1000 req/s
Was this page helpful?
Rate your experience in the new Developer portal: