The API reuses products with the same externalCode. If you don't want reuse, use unique codes. If reuse is intentional (e.g., sharing a product between two items), keep the same externalCode.
contextModifiers has no effect
Confirm:
catalogContext is a valid value (DEFAULT, WHITELABEL, INDOOR).
contextModifiers is an array inside the entity (item or option).
The context exists in the store's catalog.
Values in contextModifiers override root values only in the specified context.
Image does not appear
Confirm:
Format jpg, jpeg, or png.
Size less than 5 MB.
imagePath was filled with the upload endpoint's return.
The upload returned 200 OK.
Best practices
Validate before going to production
Before activating the integration:
Use the provided test merchant.
Test each flow (create, update, pause, delete).
Validate with GET /catalogs/{catalogId}/categories?include_items=true to confirm that items and add-ons were created correctly.
Use externalCode for traceability
Include a unique externalCode in each item and add-on. You can:
Update resources using your own ID
Track changes originating in your system
Do bidirectional synchronization without depending on iFood IDs
Implement retry with exponential backoff
For operations subject to transient failures (5xx, 429, timeouts):
Attempt
Wait
1
Immediate
2
1 s
3
2 s
4
4 s
Do not retry on 4xx (except 429) — the problem is in the payload, not the server.
Monitor batch operations
Do not assume a batch finished by immediate return:
Save the batchId
Check GET /batch/{batchId} until status: COMPLETED