Create and manage your store's menu on iFood via API. The Catalog API syncs categories, items, and complements in real time across Delivery, Digital Menu, and Dine-in, with independent prices and availability per channel.If you're integrating an existing POS, use the API to mirror your menu on iFood and keep prices, status, and inventory up to date across all platforms.
Start here
Follow the 5 hands-on steps below to create your first catalog, category, item, and complements. For concepts, see How It Works.
Before you begin
You need:
merchantId — Your store ID, provided during onboarding.
accessToken — Bearer token for authentication. See Authentication to get yours.
In the examples below, replace YOUR_MERCHANT_ID and YOUR_ACCESS_TOKEN with your values.
Step 1: List your catalogs
Every store already has at least one catalog created. List them to get the catalogId you'll use in the next steps:
Create a category inside the catalog with POST /categories. The template field defines the category type — use DEFAULT for common items (snacks, beverages, desserts); use PIZZA for special structures.
Save the returned id — you'll use it as categoryId in the next step.
Step 3: Create an item
Create an item with PUT /items using the categoryId returned in Step 2.
Payload hierarchy
Before you create one, understand the nested structure of the PUT /items payload:
item → item metadata (id, price, status, categoryId)├── products → products used in the item and in complements├── optionGroups → complement groups (drinks, sizes)└── options → options inside the groups (Coca-Cola, juice)
All four fields are always sent, even when optionGroups and options are empty.
ID generation and patterns
The id fields (for items, products, and options) are generated by you and must follow the UUID v4 standard. Each id must be unique within the merchant.If you send an id that is not in UUID v4 format, the API will return a 404 error. Examples of valid UUID v4s:
550e8400-e29b-41d4-a716-446655440000
123e4567-e89b-12d3-a456-426614174000
The externalCode field is your custom identifier for POS integration. Unlike the id, the externalCodedoes not need to follow the UUID pattern — it's an arbitrary string you control. Keep a consistent pattern in it. Valid examples:
BURGER_001, COKE_001, COLDRINK_GROUP
xburger-default, frappuccino-large
These IDs are essential: you'll use them to reference the item in future updates.
The `id` must be UUID v4 (required). The `externalCode` is optional but recommended to make bidirectional synchronization with your POS easier and prevent duplicates. Do not send an `id` in any other format — you will receive a `404` error.
PUT /items is idempotent: each call replaces the entire item. To add complements (drinks, sizes, extras), resend the complete item structure with the optionGroups and options fields filled in.