Otter Manager Menu Endpoints API

Endpoints for applications managing menus related data and operations.

OpenAPI Specification

otter-manager-menu-endpoints-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Public Account Pairing Endpoints Manager Menu Endpoints API
  description: "# Overview\n\nThe API endpoints are developed around [RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer) principles secure via the OAuth2.0 protocol.\n\nBeyond the entry points, the API also provides a line of communication into your system via [webhooks](https://en.wikipedia.org/wiki/Webhook).\n\nFor testing purposes, we offer a staging environment. Also, more detailed information about the business rules and workflows can be found on the [**Documentation Section**](/docs/)\n\n## Versioning\nEach API is versioned individually, but we follow these rules:\n- Non breaking changes (eg: adding new fields) are added in the current version without previous communication\n- Breaking changes (fields removal, semantic changed or schema update) have the version incremented\n- Users will be notified about new versions and will be given time to migrate (the time will be set on a case by case basis)\n- Once users migrate to the new version, we will deprecate the old ones\n- Once there is a new version for an API, we won't accept new integrations targeting old versions\n\n## API General Definitions\nThe APIs use resource-oriented URLs communicating, primarily, via JSON and leveraging the HTTP headers, [response status codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status), and verbs.\n\nTo exemplify how the API is to be consumed, consider a fake GET resource endpoint invocation below:\n\n```\ncurl --request GET 'https://{{public-api-url}}/v1/resource/123' \\\n--header 'Authorization: Bearer 34fdabeeafds=' --header 'X-Store-Id: 321'\n```\n\n|      Header      | Description |\n| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|`Authorization`   | Standard HTTP header is used to associate the request with the originating invoker. The content of this header is a `Bearer` token generated from you client_secret, defined in the [API Auth](#/section/Guides/API-Auth) guide.|\n|`X-Store-Id`      | The ID of the store in your system this call acts on behalf of. |\n\n_All resource endpoints expect the `Authorization` header, the remaining headers are explicitly stated in the individual endpoint documentation section._\n\nWith these headers, the system will:\n - Validate the client token, making sure the call is originating from a trusted source.\n - Validate that the Application has the permission to access the `v1/resource/{id}` resource via the Application's pre-configured scopes.\n - Translate your X-Store-Id to our internal store ID (e.g. `AAA`).\n - Validate and retrieve resource `AAA`, that is associated to your Application via store id `321`.\n\nPOST/PUT methods will look similar to the GET calls, but they'll take in a body in the HTTP request (default to the application/json content-type).\n\n```\ncurl --location --request POST 'https://{{public-api-url}}/v1/resource' \\\n--header 'Authorization: Bearer 34fdabeeafds=' --header 'X-Store-Id: 321'\n--data '{\"foo\": \"bar\"}'\n```\n\n## API Authentication/Authorization\n\n<SecurityDefinitions />\n\n## Webhook\n\nThe Public API is able to send notifications to your system via HTTP POST requests.\n\nEvery webhook is signed using HMAC-SHA256 that is present in the header `X-HMAC-SHA256`, and you can also authenticate the requests using Basic Auth, Bearer Token or HMAC-SHA1 (legacy). Please, refer to [**Webhook Authentication Guide**](/docs/guides-webhook-authentication/) for more details.\n\n_Please work with your Account Representative to setup your Application's Webhook configurations._\n\n```\nExample Base-URL = https://{{your-server-url}}/webhook\n```\n\n### Notification Schema\n\n| **Name**                | **Type** | **Description**                                                      |\n| ------------------------| ---------| -------------------------------------------------------------------- |\n| eventId                 | string   | Unique id of the event.                                              |\n| eventTime               | string   | The time the event occurred.                                         |\n| eventType               | string   | The type of event (e.g. create_order).                               |\n| metadata.storeId        | string   | Id of the store for which the event is being published.              |\n| metadata.applicationId  | string   | Id of the application for which the event is being published.        |\n| metadata.resourceId     | string   | The external identifier of the resource that this event refers to.   |\n| metadata.resourceHref   | string   | The endpoint to fetch the details of the resource.                   |\n| metadata.payload        | object   | The event object which will be detailed in each Webhook description. |\n\n### Notification Request Example\n\n```\ncurl --location --request POST 'https://{{your-server-url}}/webhook' \\\n--header 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' \\\n--header 'Authorization: MAC <hash signature>' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n   \"eventId\": \"123456\",\n   \"eventTime\": \"2020-10-10T20:06:02:123Z\",\n   \"eventType\": \"orders.new_order\",\n   \"metadata\": {\n      \"storeId\": \"755fd19a-7562-487a-b615-171a9f89d669\",\n      \"applicationId\": \"e22f94b3-967c-4e26-bf39-9e364066b68b\",\n      \"resourceHref\": \"https://{{public-api-url}}/v1/orders/bf9f1d81-f213-496e-a026-91b6af44996c\",\n      \"resourceId\": \"bf9f1d81-f213-496e-a026-91b6af44996c\",\n      \"payload\": {}\n   }\n}\n```\n\n### Expected Response\n\nThe partner application should return an HTTP 200 response code with an empty response body to acknowledge receipt of the webhook event.\n## Rate Limiting\nPlease, refer to [**Rate Limiting Guide**](/docs/guides-rate-limiting/) for more details.\n\n## Error codes\nThe APIs use standard HTTP status codes to indicate the success or failure of a request. Error codes are divided into two categories: 4XX codes for client-side errors and 5xx codes for server-side errors.\n### 4XX Client-Side Errors\nClient-side errors are indicated by status codes in the 4xx range. These errors are typically the result of a problem with the request made by your application.\nIf a client-side error occurs, our API will return a response that includes an appropriate error message. This message will provide information about the cause of the error. The aim of these messages is to assist you in identifying and resolving the issue.\nFor example, if you submit a request with missing or invalid parameters, you might receive a 400 Bad Request error with a message indicating which parameters were missing or incorrect.\n### 5XX Server-Side Errors\nServer-side errors are represented by status codes in the 5xx range. These errors suggest a problem with our server, not with your application's request.\nServer-side errors are typically transient, meaning they are temporary. If a server-side error occurs, we recommend that the client retries the same request with the exact same parameters.\nFor example, if you get a 500 Internal Server Error, it's possible that our server is suffering a temporary problem. In such cases, retrying the request after a short delay is often successful.\nIf you continually receive server-side errors, reach out to our support team for further assistance."
  version: v1
  license:
    name: Proprietary
  contact:
    name: Kin Lane
    email: kin@apievangelist.com
  x-generated-from: documentation
  x-source-url: https://developer-guides.tryotter.com/api-reference/
  x-last-validated: '2026-06-03'
servers:
- url: https://{public-api-url}/
  description: Otter Public API base URL. The concrete host is provisioned per integration partner/account via your Otter account representative; substitute the value provided during onboarding.
  variables:
    public-api-url:
      default: public-api-url
      description: Account-specific Public API host provided by Otter during onboarding.
tags:
- name: Manager Menu Endpoints
  description: Endpoints for applications managing menus related data and operations.
  x-displayName: Menus Manager
paths:
  /v1/menus:
    get:
      tags:
      - Manager Menu Endpoints
      summary: Otter Get the Menus for a Store
      description: '`RATE LIMIT: 8 per minute`

        '
      operationId: getMenu
      parameters:
      - $ref: '#/components/parameters/storeIdHeader'
      responses:
        '200':
          description: The store's menu.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Menus'
              examples:
                GetMenu200Example:
                  summary: Default getMenu 200 response
                  x-microcks-default: true
                  value:
                    photos:
                      c75d9460-5d48-423d-8d01-f825fd5b1672:
                        id: c75d9460-5d48-423d-8d01-f825fd5b1672
                        fileName: c75d9460-5d48-423d-8d01-f825fd5b1672.jpeg
                        url: https://example.com/photos/c75d9460-5d48-423d-8d01-f825fd5b1672.jpeg
                    categories:
                      b01485b0-034a-47c5-8a0a-0eeca08bf994:
                        name: Drinks
                        description: All drink items served up nice and fresh!
                        id: b01485b0-034a-47c5-8a0a-0eeca08bf994
                        itemIds:
                        - fa4f0192-4c4e-4455-9db8-61d428c34969
                    modifierGroups:
                      f4c69056-3ae3-4517-9294-5ceec8df5f81:
                        id: f4c69056-3ae3-4517-9294-5ceec8df5f81
                        name: Add Straw
                        minimumSelections: 0
                        maximumSelections: 1
                        defaultModifierSelectionData:
                          defaultModifierSelections:
                          - itemId: 6d53cf04-9d62-40f5-a8b3-706e3377668f
                            selectionQuantity: 1
                        itemIds:
                        - 6d53cf04-9d62-40f5-a8b3-706e3377668f
                        type: DEFAULT
                        exposedThirdPartyInfos:
                        - externalId: ff6dd693-5e55-4a92-a359-ea61b23ed423
                          externalServiceSlug: 3PD
                    menus:
                      ff6dd693-5e55-4a92-a359-ea61b23ed423:
                        id: ff6dd693-5e55-4a92-a359-ea61b23ed423
                        name: Tasty BBQ
                        categoryIds:
                        - b01485b0-034a-47c5-8a0a-0eeca08bf994
                        fulfillmentModes:
                        - DELIVERY
                        description: Cooking up BBQ deliciousness from around the globe!
                        hours:
                          intervals:
                          - day: MONDAY
                            fromHour: 7
                            fromMinute: 30
                            toHour: 22
                            toMinute: 0
                        additionalCharges:
                        - chargeType: PACKAGING_CHARGE
                          flatCharge:
                            currencyCode: USD
                            amount: 1.5
                    items:
                      fa4f0192-4c4e-4455-9db8-61d428c34969:
                        id: fa4f0192-4c4e-4455-9db8-61d428c34969
                        name: Canned Coke
                        description: Best soda pop ever made
                        price:
                          currencyCode: USD
                          amount: 7.65
                        status:
                          saleStatus: FOR_SALE
                        modifierGroupIds:
                        - f4c69056-3ae3-4517-9294-5ceec8df5f81
                        photoIds:
                        - c75d9460-5d48-423d-8d01-f825fd5b1672
                        priceOverrides:
                        - rules:
                          - type: FulfillmentModeOverrideRule
                            fulfillmentMode: PICK_UP
                          price:
                            currencyCode: USD
                            amount: 7
                        skuDetails:
                          skuSlug: canned-coke-355ml
                          skuId: 3bac7aed-c8c1-4bfa-a98a-350317e55072
                          dietaryClassifications:
                          - tag: VEGAN
                          allergenClassifications:
                          - tag: GLUTEN
                            containsAllergen: false
                          - tag: PEANUT
                            containsAllergen: true
                          storageRequirements:
                          - tag: COLD
                          - tag: AVOID_SUNLIGHT
                          additives:
                          - flavor enhancers
                          - food coloring
                          containsAlcohol: false
                          nutritionalInfo:
                            energyKcal:
                              low: 1
                              high: 100
                            nutritionContent:
                              servingSizeInGrams: 100
                              servingSizeInMilliliters: 100
                              fats: 100.2
                              saturatedFats: 3.5
                              monoUnsaturatedFats: 5.2,
                              polyUnsaturatedFats: 1.3,
                              carbohydrates: 3.2,
                              sugar: 101,
                              polyols: 1.1,
                              starch: 1.2,
                              protein: 1.3,
                              salt: 1.4,
                              sodium: 1.5,
                              fibres: 1.6,
                              vitaminC: 1.7,
                              calcium: 1.8,
                              magnesium: 1.9,
                              chloride: 2.0,
                              fluoride: 2.1,
                              potassium: 2.2,
                              caffeine: 2.3,
                              energy: 2.4
                          servings:
                            min: 1
                            max: 2
                          producerInformation: The Coca-Cola Company
                          distributorInformation: The Coca-Cola Company
                          countryOfOriginIso2: US
                        additionalCharges:
                        - chargeType: PACKAGING_CHARGE
                          percentageCharge:
                            decimalValue: 0.015
                        tax:
                          percentageValue:
                            decimalValue: 0.513
                          isValueAddedTax: true
                      6d53cf04-9d62-40f5-a8b3-706e3377668f:
                        id: 6d53cf04-9d62-40f5-a8b3-706e3377668f
                        name: Paper straw
                        description: A paper straw
                        price:
                          currencyCode: USD
                          amount: 0.5
                        status:
                          saleStatus: FOR_SALE
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - OAuth2.0:
        - menus.read
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v1/menus/jobs/{jobId}:
    get:
      tags:
      - Manager Menu Endpoints
      summary: Otter Get the Async Menu Job Status
      description: '`RATE LIMIT: 8 per minute`

        '
      operationId: getAsyncJobStatus
      parameters:
      - $ref: '#/components/parameters/storeIdHeader'
      - name: jobId
        in: path
        required: true
        schema:
          type: string
          description: The unique identifier of the job.
          example: 295f76b4-5725-4bf5-a8ab-97943dbdc3b4
      responses:
        '200':
          description: The menu async job status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MenuAsynchronousJob'
              examples:
                GetAsyncJobStatus200Example:
                  summary: Default getAsyncJobStatus 200 response
                  x-microcks-default: true
                  value:
                    jobReference:
                      id: c75d9460-5d48-423d-8d01-f825fd5b1672
                      status: PENDING
                    jobType: PUBLISH
                    publishJobState:
                      rappi:
                        status: FAILED
                        message: Failed to publish menu due to error ...
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - OAuth2.0:
        - menus.async_job.read
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /manager/menu/v1/menus/publish-targets:
    get:
      tags:
      - Manager Menu Endpoints
      summary: Otter Get the Publish-targets for a Store
      description: '`RATE LIMIT: 2 per minute`

        '
      operationId: managerGetMenuPublishTargets
      parameters:
      - $ref: '#/components/parameters/storeIdHeader'
      responses:
        '200':
          description: The store's menu publish-targets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MenuPublishTargets'
              examples:
                ManagerGetMenuPublishTargets200Example:
                  summary: Default managerGetMenuPublishTargets 200 response
                  x-microcks-default: true
                  value:
                    menuPublishTargets:
                      rappi:
                        status: PUBLISH_IN_PROGRESS
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - OAuth2.0:
        - manager.menus
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /manager/menu/v1/menus/publish:
    post:
      tags:
      - Manager Menu Endpoints
      summary: Otter Publish Menus to Targets for a Store
      description: '`RATE LIMIT: 2 per minute`

        '
      operationId: managerPublishMenu
      parameters:
      - $ref: '#/components/parameters/storeIdHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MenuPublishRequest'
            examples:
              ManagerPublishMenuRequestExample:
                summary: Default managerPublishMenu request
                x-microcks-default: true
                value:
                  menuPublishTargets:
                  - doordash
                  - ubereats
        required: true
      responses:
        '202':
          description: The menu publish will be processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MenuPublishResponse'
              examples:
                ManagerPublishMenu202Example:
                  summary: Default managerPublishMenu 202 response
                  x-microcks-default: true
                  value:
                    requestSubmitted: true
                    jobId: c75d9460-5d48-423d-8d01-f825fd5b1672
                    menuPublishTargets:
                      menuPublishTargets: &id001
                        rappi:
                          status: PUBLISH_IN_PROGRESS
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '409':
          description: Conflicting Menu targets.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MenuPublishResponse'
              examples:
                ManagerPublishMenu409Example:
                  summary: Default managerPublishMenu 409 response
                  x-microcks-default: true
                  value:
                    requestSubmitted: true
                    jobId: c75d9460-5d48-423d-8d01-f825fd5b1672
                    menuPublishTargets:
                      menuPublishTargets: *id001
        '422':
          $ref: '#/components/responses/422'
      security:
      - OAuth2.0:
        - manager.menus
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /manager/menu/v1/menus/menu-sync:
    post:
      tags:
      - Manager Menu Endpoints
      summary: Otter Synchronize Store Menu with POS Menu
      description: '`RATE LIMIT: 2 per minute`

        '
      operationId: menuSync
      parameters:
      - $ref: '#/components/parameters/storeIdHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PosMenuSyncRequest'
            examples:
              MenuSyncRequestExample:
                summary: Default menuSync request
                x-microcks-default: true
                value:
                  shouldPublishChanges: true
                  useCustomOptions: true
                  customBulkResolutionOptions:
                    updateNames: true
                    updatePrices: true
                    updateDescriptions: true
                    createUnmatchedEntities: true
                    deleteMissingEntities: true
                    bootstrapPhotosToEntities: true
                    copyEntityPaths: true
                    updateItemSuspensionStatus: true
                    updateHours: true
                    assignItemsToLocations: true
                    unassignItemsFromLocations: true
                    updateMenuOrganization: true
                    updateItemArrangement: true
                    updateModifierGroupRules: true
                    updateTaxes: true
        required: false
      responses:
        '202':
          description: The Menu Sync will be processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PosMenuSyncResponse'
              examples:
                MenuSync202Example:
                  summary: Default menuSync 202 response
                  x-microcks-default: true
                  value:
                    jobId: c75d9460-5d48-423d-8d01-f825fd5b1672
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - OAuth2.0:
        - manager.menus
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /manager/menu/v1/menus/entities/availability/suspend:
    post:
      tags:
      - Manager Menu Endpoints
      summary: Otter Suspend Menu Entities Targets for a Store
      description: '`RATE LIMIT: 16 per minute`

        '
      operationId: managerSuspendMenuEntities
      parameters:
      - $ref: '#/components/parameters/storeIdHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SuspendItemsRequest'
            examples:
              ManagerSuspendMenuEntitiesRequestExample:
                summary: Default managerSuspendMenuEntities request
                x-microcks-default: true
                value:
                  entityIds:
                  - 9cc4bb5e-bc97-40d9-af28-c02ef1483610
                  note: Out of item
                  status:
                    isIndefinite: true
                    suspendedUntil: '2007-12-03T10:15:30+01:00'
        required: true
      responses:
        '202':
          description: The suspend menu entities will be processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MenuAsynchronousJob'
              examples:
                ManagerSuspendMenuEntities202Example:
                  summary: Default managerSuspendMenuEntities 202 response
                  x-microcks-default: true
                  value:
                    jobReference:
                      id: c75d9460-5d48-423d-8d01-f825fd5b1672
                      status: PENDING
                    jobType: PUBLISH
                    publishJobState:
                      rappi:
                        status: FAILED
                        message: Failed to publish menu due to error ...
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - OAuth2.0:
        - manager.menus
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /manager/menu/v1/menus/entities/availability/unsuspend:
    post:
      tags:
      - Manager Menu Endpoints
      summary: Otter Unsuspend Menu Entities Targets for a Store
      description: '`RATE LIMIT: 16 per minute`

        '
      operationId: managerUnsuspendMenuEntities
      parameters:
      - $ref: '#/components/parameters/storeIdHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UnsuspendItemsRequest'
            examples:
              ManagerUnsuspendMenuEntitiesRequestExample:
                summary: Default managerUnsuspendMenuEntities request
                x-microcks-default: true
                value:
                  entityIds:
                  - 9cc4bb5e-bc97-40d9-af28-c02ef1483610
                  note: Item back in stock
        required: true
      responses:
        '202':
          description: The suspend menu entities will be processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MenuAsynchronousJob'
              examples:
                ManagerUnsuspendMenuEntities202Example:
                  summary: Default managerUnsuspendMenuEntities 202 response
                  x-microcks-default: true
                  value:
                    jobReference:
                      id: c75d9460-5d48-423d-8d01-f825fd5b1672
                      status: PENDING
                    jobType: PUBLISH
                    publishJobState:
                      rappi:
                        status: FAILED
                        message: Failed to publish menu due to error ...
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - OAuth2.0:
        - manager.menus
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /manager/menu/v1/bootstrap:
    post:
      tags:
      - Manager Menu Endpoints
      summary: Otter Bootstrap Menus for a Store
      description: '`RATE LIMIT: 2 per minute`

        '
      operationId: managerBootstrap
      parameters:
      - $ref: '#/components/parameters/storeIdHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BootstrapMenuRequest'
            examples:
              ManagerBootstrapRequestExample:
                summary: Default managerBootstrap request
                x-microcks-default: true
                value:
                  templateName: My Store's Menu
                  externalServiceSlug: ubereats-api
                  enableTemplate: true
                  stationId: 9cc4bb5e-bc97-40d9-af28-c02ef1483610
                  posSlug: pos-slug
        required: true
      responses:
        '202':
          description: The menu will be bootstrapped.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MenuAsynchronousJob'
              examples:
                ManagerBootstrap202Example:
                  summary: Default managerBootstrap 202 response
                  x-microcks-default: true
                  value:
                    jobReference:
                      id: c75d9460-5d48-423d-8d01-f825fd5b1672
                      status: PENDING
                    jobType: PUBLISH
                    publishJobState:
                      rappi:
                        status: FAILED
                        message: Failed to publish menu due to error ...
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - OAuth2.0:
        - manager.menus
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    Photo:
      title: All photos for the store, indexed by ID
      required:
      - contentType
      - fileName
      - id
      - url
      type: object
      properties:
        url:
          type: string
          description: URL of the photo.
          example: https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png
        fileName:
          type: string
          description: File name
          example: image.jpg
        id:
          type: string
          description: Identifier of the Photo.
          example: e9174f75-a293-4908-bba7-9db69871ad81
        contentType:
          type: string
          description: 'The media type of the file. Deprecated: Use the media type served from the photo URL instead.'
          example: image/jpeg, image/png
          deprecated: true
      description: All data required to represent a Photo for an entity in menus.
    ItemStatus:
      required:
      - saleStatus
      type: object
      properties:
        saleStatus:
          type: string
          description: The sale status of the item.
          example: TEMPORARILY_NOT_FOR_SALE
          enum:
          - FOR_SALE
          - INDEFINITELY_NOT_FOR_SALE
          - TEMPORARILY_NOT_FOR_SALE
        suspendedUntil:
          type: string
          nullable: true
          description: 'ISO-8601 timestamp representing the time the saleStatus value is supposed to change to FOR_SALE. Set only when current saleStatus value is TEMPORARILY_NOT_FOR_SALE. E.g.: 2020-11-23T21:33:51Z, 2007-12-03T10:15:30+01:00'
          format: date-time
          example: '2007-12-03T10:15:30+01:00'
      description: Represents whether an Item is for sale, indefinitely not for sale, or not for sale until a specific time.
    AdditionalCharge:
      required:
      - chargeType
      type: object
      properties:
        chargeType:
          type: string
          description: The type of the additional charge.
          enum:
          - PACKAGING_CHARGE
          - CONTAINER_DEPOSIT
          example: PACKAGING_CHARGE
        flatCharge:
          $ref: '#/components/schemas/Money'
        percentageCharge:
          $ref: '#/components/schemas/PercentageValue'
        unitPriceAndCount:
          $ref: '#/components/schemas/UnitPriceAndCount

# --- truncated at 32 KB (127 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/otter/refs/heads/main/openapi/otter-manager-menu-endpoints-api-openapi.yml