Managing Store Menus

API Reference

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 identifier
  • items: The items in the menu
    • category: The category of the items in the menu
      • id: The SKU (Stock-Keeping Unit) the ally gives to this category
      • maxQty: The maximum number of items that can be ordered in this category
      • minQty: 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 name
      • sortingPosition: 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 category
    • name: The name of the item in the menu
    • description: The description of the item in the menu
    • imageUrl: The url of the image of the item in the menu
    • price: The price of the item in the menu
    • rappiIds: The identifier Rappi gives to this item
    • sku: The SKU (Stock-Keeping Unit) the ally gives to this item
    • sortingPosition: The position of the item in its category
    • type: The type of the item
    • maxLimit: Maximum indicator of the item, it's required only if the type is topping
    • combo: 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

API Reference

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)

BeforeNow
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

API Reference

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

API Reference

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

API Reference

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}

The system retrieves a JSON response with the information of the last menu created for your store.