---
title: "Create/update full catalog"
method: PUT
path: "/catalogs"
tags: ["Catalog API endpoints"]
---

# Create/update full catalog

`PUT /catalogs`

Use this endpoint to create/update a catalog for a specific branch in one go.

The user can provide all necessary details and create/update the entire catalog with a single request.

Please be aware that it may take approximately 5 minutes for the changes to be reflected on the SuperApp.

## Headers

- `Authorization` string, required
- `User-Agent` string, required
- `Brand-Id` string
- `Branch-Id` string, required

## Request body

- union
  - CreateFullCatalogRequest
    - `diff` boolean — If false, the whole catalog will be created or overridden if already created against the catalog id provided. The entities provided with IDs will be overridden or created. The entities missing from previous request will be deleted. If true, then only categories, items, options and groups provided will be added/updated as per the respective IDs. Deletion is not supported when diff is sent as true.
    - `catalog` object, required
      - `id` string, required — A unique string identifier for catalog provided by restaurant. Since, it is a unique string identifier, it can have values as "Default catalog" or "123006".
      - `name` string, required
      - `include_tax` boolean — true if the tax is already included in the items/options prices.
      - `tax` number — The tax percentage float value
      - `avg_price` number — The price is a float value.
      - `file` string — Media file for catalog
      - `currency_id` integer, required — The currency used for catalog. It is the integer ID corresponding to a currency. Allowed values are 1-14 with respective currency names and codes as follows: <br > ```text | ID | Name | Code | |----|---------------------|------| | 1 | Dirham | AED | | 2 | Saudi Arabian Riyal | SAR | | 3 | Egyptian Pound | EGP | | 4 | Qatari Ria | QAR | | 5 | Lebanese pound | LBP | | 6 | Kuwaiti Dinar | KWD | | 7 | Jordanian Dinar | JOD | | 8 | Bahraini Dinar | BHD | | 9 | Singapore Dollar | SGD | | 10 | Iranian Rial | IRR | | 11 | Omani Rial | OMR | | 12 | Pakistani Rupee | PKR | | 13 | Australian Dollar | AUD | | 14 | Iraqi Dinar (IQD) | IQD | ```
      - `category_ids` string[] — All the IDs for the categories included in the request.
    - `categories` CreateFullCatalogCategory[] — List of Categories to be added in catalog
      - `id` string, required — A unique category ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete category when only catalog difference is sent for updating.
      - `name` string, required
      - `name_localized` object
      - `description` string
      - `description_localized` object
      - `preparation_time` integer
      - `priority` integer — No two categories in a catalog can have same priority. This is a field which decides the order of categories shown in the mobile app. Categories with higher priority would be shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `media` string
      - `operational_hours` OperationalHour[]
        - `shifts` Shift[]
          - `start_time` string — Accepted values ("00:00" to "23:59")
          - `end_time` string — Accepted values ("00:00" to "23:59")
        - `active` boolean
        - `day_of_week` integer
      - `sub_categories` string[] — All the IDs for the sub_categories included in the request.
      - `items` string[] — All the IDs for the items included in the request.
    - `sub_categories` CreateFullCatalogSubCategory[] — List of Sub Categories to be added in catalog
      - `id` string, required — A unique category ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete category when only catalog difference is sent for updating.
      - `name` string, required
      - `name_localized` object
      - `description` string
      - `description_localized` object
      - `preparation_time` integer
      - `media` string
      - `priority` integer — No two categories in a catalog can have same priority. This is a field which decides the order of categories shown in the mobile app. Categories with higher priority would be shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `operational_hours` OperationalHour[]
        - `shifts` Shift[]
          - `start_time` string — Accepted values ("00:00" to "23:59")
          - `end_time` string — Accepted values ("00:00" to "23:59")
        - `active` boolean
        - `day_of_week` integer
      - `items` string[] — All the IDs for the items included in the request.
    - `items` CreateFullCatalogItem[] — List of Items to be added in the catalog
      - `id` string, required — A unique item ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete item when only catalog difference is sent for updating.
      - `name` string, required
      - `name_localized` object
      - `description` string
      - `description_localized` object
      - `active` boolean, required
      - `price` integer, required
      - `calorie_counts` string
      - `allergic_information` string
      - `operational_hours` OperationalHour[]
        - `shifts` Shift[]
          - `start_time` string — Accepted values ("00:00" to "23:59")
          - `end_time` string — Accepted values ("00:00" to "23:59")
        - `active` boolean
        - `day_of_week` integer
      - `media` string
      - `priority` integer — This field is used to specify the order in which this item should appear. The items with lower value are shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `tags` string[] — List of tags associated with the item. only predefined tags are allowed.
      - `groups` string[] — All the IDs for the groups included in the request.
    - `groups` CreateFullCatalogGroup[] — List of Groups to be added in the catalog
      - `id` string, required — A unique group ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete group when only catalog difference is sent for updating.
      - `name` string, required
      - `name_localized` object
      - `description` string
      - `description_localized` object
      - `multi_select` boolean — This field is used to specify whether the options inside this group can be selected more than once. <br > The validation rules are as follows: <br > <br > When multi_select is false: <br > &nbsp; The group min must be between 0 and number of group options. (0 <= Group Min <= number of group options) <br > &nbsp; The group max must be between the group min and number of group options. (Group Min <= Group Max <= number of group options) <br > <br > When multi_select is true: <br > &nbsp; The group min must be greater than 1. (Group Min > 1) <br > &nbsp; The group max must be equal to the group min. (Group Max = Group Min) <br > <br > Additionally, when the group object has nested groups, setting multi_select to true is not allowed.
      - `min` integer — This field is used to specify the minimum number of options that can be selected from this group. <br > Corresponding Item will become unavailable if the number of available options in this group is less than the min value. <br >
      - `max` integer
      - `priority` integer — This field is used to specify the order in which this group should appear. The groups with lower value are shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `options` string[] — All the IDs for the options included in the request.
    - `options` CreateFullCatalogOption[] — List of Options to be added in the catalog
      - `id` string, required — A unique option ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete option when only catalog difference is sent for updating.
      - `name` string, required
      - `name_localized` object
      - `active` boolean
      - `price` integer
      - `priority` integer — This field is used to specify the order in which this option should appear. The options with lower value are shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `groups` string[] — All the IDs for the nested groups included in the request.
    - `item_categories` ItemCategory[] — Per-category overrides for items. Use to move an item between categories atomically in a single diff:true request. Each entry overrides the base item definition for a specific (item_id, category_id) pair.
      - `item_id` string, required — The ID of the item (must match an entry in the items array).
      - `category_id` string, required — The ID of the category this override applies to.
      - `deleted` boolean — When true, the item is tombstoned under this specific category while remaining active under other categories.
  - UpdateFullCatalogRequest
    - `diff` boolean — If false, the whole catalog will be created or overridden if already created against the catalog id provided. The entities provided with IDs will be overridden or created. The entities missing from previous request will be deleted. If true, then only categories, items, options and groups provided will be added/updated as per the respective IDs. Deletion is not supported when diff is sent as true.
    - `catalog` object, required
      - `id` string, required — A unique string identifier for catalog provided by restaurant. Since, it is a unique string identifier, it can have values as "Default catalog" or "123006".
      - `name` string
      - `include_tax` boolean — true if the tax is already included in the items/options prices.
      - `tax` number — The tax percentage float value
      - `avg_price` number — The price is a float value.
      - `file` string — Media file for catalog
      - `category_ids` string[] — All the IDs for the categories included in the request.
    - `categories` UpdateFullCatalogCategory[] — List of Categories to be added in catalog
      - `id` string, required — A unique category ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete category when only catalog difference is sent for updating.
      - `name` string
      - `name_localized` object
      - `description` string
      - `description_localized` object
      - `preparation_time` integer
      - `priority` integer — No two categories in a catalog can have same priority. This is a field which decides the order of categories shown in the mobile app. Categories with higher priority would be shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `operational_hours` OperationalHour[]
        - `shifts` Shift[]
          - `start_time` string — Accepted values ("00:00" to "23:59")
          - `end_time` string — Accepted values ("00:00" to "23:59")
        - `active` boolean
        - `day_of_week` integer
      - `sub_categories` string[] — All the IDs for the sub categories included in the request.
      - `items` string[] — All the IDs for the items included in the request.
    - `sub_categories` UpdateFullCatalogSubCategory[] — List of Sub Categories to be added in catalog
      - `id` string, required — A unique sub category ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete sub category when only catalog difference is sent for updating.
      - `name` string
      - `name_localized` object
      - `description` string
      - `description_localized` object
      - `preparation_time` integer
      - `priority` integer — No two sub categories in a category can have same priority. This is a field which decides the order of sub categories shown in the mobile app. Sub Categories with higher priority would be shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `operational_hours` OperationalHour[]
        - `shifts` Shift[]
          - `start_time` string — Accepted values ("00:00" to "23:59")
          - `end_time` string — Accepted values ("00:00" to "23:59")
        - `active` boolean
        - `day_of_week` integer
      - `items` string[] — All the IDs for the items included in the request.
    - `items` UpdateFullCatalogItem[] — List of Items to be added in the catalog
      - `id` string, required — A unique item ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete item when only catalog difference is sent for updating.
      - `name` string
      - `name_localized` object
      - `description` string
      - `description_localized` object
      - `active` boolean, required
      - `price` integer
      - `calorie_counts` string
      - `allergic_information` string
      - `operational_hours` OperationalHour[]
        - `shifts` Shift[]
          - `start_time` string — Accepted values ("00:00" to "23:59")
          - `end_time` string — Accepted values ("00:00" to "23:59")
        - `active` boolean
        - `day_of_week` integer
      - `media` string
      - `priority` integer — This field is used to specify the order in which this item should appear. The items with lower value are shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `tags` string[] — List of tags associated with the item, only predefined tags are allowed.
      - `groups` string[] — All the IDs for the groups included in the request.
    - `groups` UpdateFullCatalogGroup[] — List of Groups to be added in the catalog
      - `id` string, required — A unique group ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete group when only catalog difference is sent for updating.
      - `name` string
      - `name_localized` object
      - `description` string
      - `description_localized` object
      - `multi_select` boolean — This field is used to specify whether the options inside this group can be selected more than once. <br > The validation rules are as follows: <br > <br > When multi_select is false: <br > &nbsp; The group min must be between 0 and number of group options. (0 <= Group Min <= number of group options) <br > &nbsp; The group max must be between the group min and number of group options. (Group Min <= Group Max <= number of group options) <br > <br > When multi_select is true: <br > &nbsp; The group min must be greater than 1. (Group Min > 1) <br > &nbsp; The group max must be equal to the group min. (Group Max = Group Min) <br > <br > Additionally, when the group object has nested groups, setting multi_select to true is not allowed.
      - `min` integer — This field is used to specify the minimum number of options that can be selected from this group. <br > Corresponding Item will become unavailable if the number of available options in this group is less than the min value. <br >
      - `max` integer
      - `priority` integer — This field is used to specify the order in which this group should appear. The groups with lower value are shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `options` string[] — All the IDs for the options included in the request.
    - `options` UpdateFullCatalogOption[] — List of Options to be added in the catalog
      - `id` string, required — A unique option ID string provided by vendor or restaurant.
      - `deleted` boolean — This field is used to delete option when only catalog difference is sent for updating.
      - `name` string
      - `name_localized` object
      - `active` boolean
      - `price` integer
      - `priority` integer — This field is used to specify the order in which this option should appear. The options with lower value are shown first. If this field is not sent then default priority will be 1 and ordering cannot be guaranteed.
      - `groups` string[] — All the IDs for the nested groups included in the request.
    - `item_categories` ItemCategory[] — Per-category overrides for items. Use to move an item between categories atomically in a single diff:true request. Each entry overrides the base item definition for a specific (item_id, category_id) pair.
      - `item_id` string, required — The ID of the item (must match an entry in the items array).
      - `category_id` string, required — The ID of the category this override applies to.
      - `deleted` boolean — When true, the item is tombstoned under this specific category while remaining active under other categories.

## Response `200`

Catalog created/updated

- CreateFullCatalogStatusResponse
  - `request_id` string
  - `created_at` string — Time RFC3339 format in UTC in which the catalog has been updated
  - `url` string — The URL to check status of the request.
  - `message` string

## Other responses

- `400` — Bad request
- `500` — Internal server error

---

[API](https://skmtc.net/careemnow/apis/careem-pos-api.md) · [All operations](https://skmtc.net/careemnow/apis/careem-pos-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/careemnow/careem-pos-api/versions/374e3e0dddca/schema)
