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 image url 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
  • stock: The availability information of the 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
  • availableFrom: The date when the item start the availability of the item
  • availableTo: The date when the item finish the availability of the item

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.

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

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
    • Product with toppings, can have price 0 if some of his children has 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.

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

Please refer to rappi support team in case of your menu took more than the defined SLA

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.