---
updatedAt: 2026-05-28T10:59:52.000Z
---

# Update Individual Menu Item unavailabilities

Once a menu is sent to our platform, all new items in the menu are theoretically "available", therefore a customer can order them. This endpoint allows the caller to set items as "available", "unavailable" or "hidden":

**Statuses**

- `available` - the item is visible in the menu and can be ordered.
- `unavailable` - the item is "greyed out", "striked-through" and marked as "sold out" on our platform. It will be made available during the next [morning stock reset](doc:menu-api-overview#morning-stock-reset).
 - `hidden` - the item is not visible in the menu for the customers. It will not be affected by the [morning stock reset](doc:menu-api-overview#morning-stock-reset).

**Examples**

In contrast to the PUT endpoint, this endpoint will only update the status of items which are explicitly mentioned in the payload. For example, see this sequence of calls:
1. Set `orange_juice` unavailable.
2. Set `granola` unavailable.

After those two calls, both `granola` and `orange_juice` will be unavailable.

**Rate Limit**

This endpoint is rate limited at 1 request per 100ms per site. There is no limit to the number of items that can be updated in a single request.

**Item IDs not found**

All IDs in the request must be existing IDs on the requested menu. If any ID is not found, the entire request will fail (returns 404).

**Changing unavailabilities after menu upload**

If you want to set item unavailabilities right after calling Upload Menu request, first wait to receive the [Menu Upload Result Webhook](ref:menu-events-webhook). Otherwise the change of unavailabilities may be ineffective for newly created items.


# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Menu API",
    "version": "1.0"
  },
  "x-readme": {
    "explorer-enabled": false
  },
  "servers": [
    {
      "url": "https://api.developers.deliveroo.com/menu",
      "description": "Production API"
    },
    {
      "url": "https://api-sandbox.developers.deliveroo.com/menu",
      "description": "Sandbox"
    }
  ],
  "paths": {
    "/v1/brands/{brand_id}/menus/{id}": {
      "parameters": [
        {
          "name": "brand_id",
          "in": "path",
          "description": "The unique identifier for the brand (Deliveroo's integration team will provide this).",
          "schema": {
            "type": "string"
          },
          "required": true
        },
        {
          "name": "id",
          "in": "path",
          "description": "The unique identifier for the menu for the given \"brand\" context.",
          "schema": {
            "type": "string"
          },
          "required": true
        }
      ]
    },
    "/v1/brands/{brand_id}/menus/{id}/item_unavailabilities/{site_id}": {
      "parameters": [
        {
          "$ref": "#/paths/~1v1~1brands~1{brand_id}~1menus~1{id}/parameters/0"
        },
        {
          "$ref": "#/paths/~1v1~1brands~1{brand_id}~1menus~1{id}/parameters/1"
        },
        {
          "$ref": "#/paths/~1v2~1brands~1{brand_id}~1sites~1{site_id}~1menu/parameters/1"
        }
      ],
      "post": {
        "tags": [
          "v1"
        ],
        "summary": "Update Individual Menu Item unavailabilities",
        "description": "Once a menu is sent to our platform, all new items in the menu are theoretically \"available\", therefore a customer can order them. This endpoint allows the caller to set items as \"available\", \"unavailable\" or \"hidden\":\n\n**Statuses**\n\n- `available` - the item is visible in the menu and can be ordered.\n- `unavailable` - the item is \"greyed out\", \"striked-through\" and marked as \"sold out\" on our platform. It will be made available during the next [morning stock reset](https://api-docs.deliveroo.com/deliveroo/docs/menu-api-overview#morning-stock-reset).\n - `hidden` - the item is not visible in the menu for the customers. It will not be affected by the [morning stock reset](https://api-docs.deliveroo.com/deliveroo/docs/menu-api-overview#morning-stock-reset).\n\n**Examples**\n\nIn contrast to the PUT endpoint, this endpoint will only update the status of items which are explicitly mentioned in the payload. For example, see this sequence of calls:\n1. Set `orange_juice` unavailable.\n2. Set `granola` unavailable.\n\nAfter those two calls, both `granola` and `orange_juice` will be unavailable.\n\n**Rate Limit**\n\nThis endpoint is rate limited at 1 request per 100ms per site. There is no limit to the number of items that can be updated in a single request.\n\n**Item IDs not found**\n\nAll IDs in the request must be existing IDs on the requested menu. If any ID is not found, the entire request will fail (returns 404).\n\n**Changing unavailabilities after menu upload**\n\nIf you want to set item unavailabilities right after calling Upload Menu request, first wait to receive the [Menu Upload Result Webhook](https://api-docs.deliveroo.com/deliveroo/reference/menu-events-webhook). Otherwise the change of unavailabilities may be ineffective for newly created items.\n",
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "item_unavailabilities": [
                  {
                    "item_id": "orange_juice",
                    "status": "unavailable"
                  },
                  {
                    "item_id": "granola",
                    "status": "available"
                  },
                  {
                    "item_id": "whole_milk",
                    "status": "hidden"
                  }
                ]
              },
              "schema": {
                "type": "object",
                "properties": {
                  "item_unavailabilities": {
                    "description": "Contains list of individual item unavailability updates.",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "item_id": {
                          "description": "Item ID from the site menu that will be marked as unavailable/sold out for the day.",
                          "type": "string"
                        },
                        "status": {
                          "description": "Status to mark unavailable, or sold out for the day.",
                          "type": "string",
                          "enum": [
                            "available",
                            "unavailable",
                            "hidden"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Completed successfully. All item status change requests were updated.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Typically a required parameter is missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/paths/~1v3~1brands~1{brand_id}~1jobs/post/responses/400/content/application~1json/schema"
                }
              }
            }
          },
          "401": {
            "$ref": "#/paths/~1v3~1brands~1{brand_id}~1jobs/post/responses/401"
          },
          "404": {
            "description": "The specified resource could not be found. Ex. an item_id requested does not exist on the menu.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/paths/~1v3~1brands~1{brand_id}~1jobs/post/responses/400/content/application~1json/schema"
                }
              }
            }
          },
          "default": {
            "$ref": "#/paths/~1v3~1brands~1{brand_id}~1jobs/post/responses/500"
          }
        }
      }
    },
    "/v2/brands/{brand_id}/sites/{site_id}/menu": {
      "parameters": [
        {
          "$ref": "#/paths/~1v1~1brands~1{brand_id}~1menus~1{id}/parameters/0"
        },
        {
          "name": "site_id",
          "in": "path",
          "description": "ID of the site the menu unavailabilities should be applied to.",
          "schema": {
            "type": "string"
          },
          "required": true
        }
      ]
    },
    "/v3/brands/{brand_id}/jobs": {
      "post": {
        "tags": [
          "v3 (for large menu uploads)"
        ],
        "summary": "Publish Menu",
        "description": "Initiates menu processing and publication. The request body must specify the action and parameters as described. Currently there's only one action to publish the menu that is \"publish_menu_to_live\". After creating a job, poll the GET /jobs/{job_id} endpoint to check the status.\n",
        "parameters": [
          {
            "$ref": "#/paths/~1v1~1brands~1{brand_id}~1menus~1{id}/parameters/0"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "enum": [
                      "publish_menu_to_live"
                    ],
                    "description": "The action to perform"
                  },
                  "params": {
                    "type": "object",
                    "properties": {
                      "menu_id": {
                        "type": "string",
                        "description": "The external ID of the menu to publish"
                      },
                      "version": {
                        "type": "string",
                        "description": "Optional version to publish. If not provided, the latest version will be used."
                      }
                    },
                    "required": [
                      "menu_id"
                    ]
                  }
                },
                "required": [
                  "action",
                  "params"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Job created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "job_id": {
                      "type": "string",
                      "description": "The unique identifier for the created job. Use this to poll for status."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "new",
                        "in_progress",
                        "success",
                        "failed"
                      ],
                      "description": "Status of a menu processing job:\n- `new`: Job has been created and is waiting to be processed\n- `in_progress`: Job is currently being processed\n- `success`: Job completed successfully\n- `failed`: Job failed during processing\n"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "bad_request",
                    "message": "bad request"
                  }
                },
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string"
                        },
                        "code": {
                          "type": "string",
                          "enum": [
                            "bad_request",
                            "not_found",
                            "500",
                            "service_unavailable",
                            "unprocessable_entity",
                            "too_many_requests",
                            "conflict",
                            "unauthorized"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "The provided API key and API token is invalid or disabled.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "unauthorized",
                    "message": "Unauthenticated"
                  }
                },
                "schema": {
                  "$ref": "#/paths/~1v3~1brands~1{brand_id}~1jobs/post/responses/400/content/application~1json/schema"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "menu not found"
                  }
                },
                "schema": {
                  "$ref": "#/paths/~1v3~1brands~1{brand_id}~1jobs/post/responses/400/content/application~1json/schema"
                }
              }
            }
          },
          "500": {
            "description": "Something went wrong on our end. You’ll have to try again later once we’ve fixed it.",
            "content": {
              "application/json": {
                "example": {
                  "error": {
                    "code": "500",
                    "message": "internal server error"
                  }
                },
                "schema": {
                  "$ref": "#/paths/~1v3~1brands~1{brand_id}~1jobs/post/responses/400/content/application~1json/schema"
                }
              }
            }
          },
          "default": {
            "$ref": "#/paths/~1v3~1brands~1{brand_id}~1jobs/post/responses/500"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "OAuth2-Production": {
        "type": "oauth2",
        "description": "OAuth for Production",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://auth.developers.deliveroo.com/oauth2/token",
            "scopes": {}
          }
        }
      }
    }
  },
  "security": [
    {
      "OAuth2-Production": []
    }
  ]
}
```