Managing Store Menus
The Rappi API enables you to manage the menus of your stores.
You can create and update menus in the platform, retrieve the items of the menus, and review the approval status of your requests to create or update menus.
The main properties of the menus and the items created through the Rappi API consist of the following items:
storeId
: The store identifieritems
: The items in the menucategory
: The category of the items in the menuid
: The SKU (Stock-Keeping Unit) the ally gives to this categorymaxQty
: The maximum number of items that can be ordered in this categoryminQty
: The minimum quantity of elements that can be ordered in this category (In toppings, if it's 0 it means that it's not mandatory)name
: Category namesortingPosition
: If it's a product category, it's the position of the category in the menu. In case of being a Topping category, it's the position of the category within the product
children
: Subitems nested in a categoryname
: The name of the item in the menudescription
: The description of the item in the menuimageUrl
: The url of the image of the item in the menuprice
: The price of the item in the menurappiIds
: The identifier Rappi gives to this itemsku
: The SKU (Stock-Keeping Unit) the ally gives to this itemsortingPosition
: The position of the item in its categorytype
: The type of the itemmaxLimit
: Maximum indicator of the item, it's required only if the type is toppingcombo
: Indicates if the element belongs to a combo. (if it is true it means that it belongs to a combo)
Important
When a menu is sent, full prices should be sent instead of prices with discounts applied
Some of these properties are subdivided into more objects. For a detailed view and a deeper explanation of these items, consult the Menus API resource on the Rappi API Reference.
Types of mapping
- No mapping: The ally loads their menu from the partners portal, without placing the SKUs of the menu items. Upon receiving an order, the json of the order will have the Rappi ids of the items but their SKUs will be null, so the ally is in charge of downloading their menu and encoding their SKUs.
- Self mapping: The ally loads their menu from the partners portal and can enter the SKU of the menu item from there. This sku information is taken to obtain the association between the SKU and the rappi id of the item, to send it as part of the order information to the ally's POS.
- Automatic mapping: The ally must send their menu consuming the POST menu endpoint, where SKUs must be received for each item that is sent in the menu. The mapping is generated by sending the json from the menu, generating a new mapping version that is available in such a way that when generating an order, the system takes the information registered in the automatic mapping database, and sends the information translated from the order to the ally's POS.
Improvements with automatic menu
We will reproduce the order of your products
in the Rappi app as you send it from the POS.We will keep the promotion settings
when you update the menus from the POS.Menu validation will be immediate
, avoiding any delay in loading, and you will receive feedback instantly ("accepted", "rejected", or with "error").We will keep the history of customers
favorites in the Rappi app, as we will keep your SKUs history.
Creating a Menu for a Store
Use the POST menu endpoint to create menus through API.
If you want a group of stores to share the same menu, you have to ask Rappi to configure one as a parent store
and the rest as child stores
. After this is done, you can only send menus for parent stores
. If you send a menu for a child store
the endpoint will reject it.
To create a menu:
Make a POST
request to the following URL, and add a JSON
object to the body of the request with the following objects.
URL: https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/menu
{COUNTRY_DOMAIN}
: This is your Rappi Country Domain. See the list of Country Domains.
This is an example of the JSON
object in the body of the request:
{ "storeId": "900103361", "items": [ { "name": "Grilled Chicken Burger", "description": "Grilled chicken burger description", "price": 14000, "sku": "10", "sortingPosition": 0, "type": "PRODUCT", "category": { "id": "2090019638", "maxQty": 0, "minQty": 0, "name": "Burgers", "sortingPosition": 0 }, "children": [ { "category": { "id": "211", "maxQty": 1, "minQty": 0, "name": "Do you want to add?", "sortingPosition": 0 }, "name": "French Fries", "description": "crunchy french fries", "price": 5000, "sku": "1", "maxLimit": 1, "sortingPosition": 1, "type": "TOPPING" }, { "category": { "id": "211", "maxQty": 1, "minQty": 0, "name": "Do you want to add?", "sortingPosition": 0 }, "name": "Potato Wedges", "price": 7000, "sku": "2", "maxLimit": 1, "sortingPosition": 1, "type": "TOPPING" } ] }, { "name": "Hawaiian Pizza", "description": "hawaiian pizza description", "price": 18000, "sku": "11", "sortingPosition": 1, "type": "PRODUCT", "category": { "id": "2090019639", "maxQty": 0, "minQty": 0, "name": "Pizzas", "sortingPosition": 1 }, "children": [] } ] }
Note
If then need to change product availability, can use availability module
Note
The values from this JSON
are not real data. Ensure to replace them with your data when making API requests. You can add more items to the menu by adding more objects under items
, separated by a comma.
The system retrieves the confirmation message Menu updated and ready to be validated.
Note
It's not possible to process more than 1 menu at a time, therefore, if there is already a menu in the approval process, all incoming menus from the same store will be ignored
Your menu is now under approval. You can consult the status of your menu by making a GET
request to the menu
endpoint. For more information, go to the Obtaining Menu Information section of this chapter.
Validations on the Received menu
When Rappi receives the menu, it makes several considerable validations.
-
Empty Items List: If an empty items list is received, an error is displayed:
Items is required
. -
Items without sku: The SKU of the products and the toppings must not be empty or null. If this validation is not fulfilled, an error is displayed:
This Store needs skus in all items
. -
Valid names and description: For all items (products or toppings) it is validated that:
- The Product description must have at least 2 characters
- The item name must have at least 2 characters
- The item must contain a category
- The Product ID category and the Toppings must not be empty or null
- The product category name and the Toppings must have at least 2 characters
The maximum characters for the different fields are configurable parameters that may change over time.
If it does not meet any of these validations, an error is displayed:
All items must have a valid name, category or product description.
.In case you get an error due to this validation, please contact the Rappi official who is supporting your process.
-
Valid item types: It's validated that the first level items are of the PRODUCT type and the items within the "children" list are of the TOPPING type. If this validation fails, an error is displayed:
All parent items must be product type and children must be topping type.
-
Duplicated toppings categories: Within a product, there cannot be two toppings categories with the same name and id but different sortingPosition. If this validation fails, an error is displayed
The topping categories cannot be duplicated (same name and id but different sorting position)
-
Duplicated product categories: There cannot be two products categories with the same name but different id or sortingPosition. If this validation fails, an error is displayed
The product categories cannot be duplicated (same name but different id or sorting position)
-
Toppings category limits: For all toppings, the following is validated:
- The maxQty of the topping category cannot be 0 or greater than 20
- The maxLimit of the topping cannot be 0 or greater than the maxQty of its category
The error displayed is:
All toppings must have a valid maxQty or maxLimit must not be greater than maxQty
-
Product with price Zero: For all products, the following is validated:
- Product without toppings (children) must have price greater than 0
- A product with toppings can have price of 0 if some of is children has a price greater than 0
The error displayed is:
Product price must be greater than 0 if the product doesn’t have any children. Otherwise at least one of its children must have price.
-
Unique SKU: It will not be accepted for the same SKU to be sent twice with different names, descriptions, prices, or toppings. This rule only applies to products. It does not apply to topping categories, toppings, or subitems. The error message returned for this validation is:
Menu contains products with same sku, but they have different attributes (including topping categories and toppings)
Before | Now |
---|---|
We accepted that two products with variations use the same SKU. For example: Name: Hamburger Description: Hamburger SKU: ABC123 Toppings: - Extra >> Tomato Name: Burger Description: Delicious Hamburger SKU: ABC123 Toppings: - Extra >> Lettuce | We will only accept one SKU per product (otherwise they must be different SKUs). For example: Name: Hamburger Description: Hamburger SKU: ABC123 Toppings: - Extra >> Tomato >> Lettuce |
Note
In the menu management process, Rappi only considers 2 levels of elements: Products and Toppings. Items are not allowed within a Topping.
- Image formats: The accepted formats for images are JPG, JPG200 and PNG. They must be a maximum of 1 MB
- Url formats: All the images url should have a valid format and should start with http or https. If the validation fails, the following error is returned:
Invalid urls were found
- Text with Emojis: In case that any text field has an Emoji, an error will be returned:
Some text fields in the menu have emojis, please delete them.
.
Note
Automatic menu does not support reusing skus (ids) when you create new topping categories, products, and toppings.
Obtaining Menu Information
After Rappi approves the content of the menu, you can retrieve the contents of your store menus using the GET menu
endpoint.
To retrieve the contents of your store menus:
Make a GET
request to the following URL.
URL: https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/menu
{COUNTRY_DOMAIN}
: This is your Rappi Country Domain. See the list of Country Domains.
The system retrieves a JSON
object response with the information of your store menus.
Consulting the Approval Status of Your Menus
After creating a menu using our API, the Rappi team validates the structure and the contents of your menu.
You can use the GET menu/approved/{storeId}
endpoint to consult the approval status of your menus.
To consult the status of your menus:
Make a GET
request to the following URL.
URL: https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/menu/approved/{storeId}
{COUNTRY_DOMAIN}
: This is your Rappi Country Domain. See the list of Country Domains.
The system retrieves a JSON
object response with the approval status of your store menus.
Note
If the wait time for a menu approval exceeds the agreed SLA, the support team must be contacted to validate the status of the menu.
Retrieving Your Last Created Menu
Use the GET menu/rappi/{storeId}
endpoint to retrieve the information of the last menu created for a specific store.
To get the last created menu:
Make a GET
request to the following URL:
URL: https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/menu/rappi/{storeId}
-
{COUNTRY_DOMAIN}
: This is your Rappi Country Domain. See the list of Country Domains. -
{storeId}
: This is the identifier of your store integration.
The system retrieves a JSON
response with the information of the last menu created for your store.