---
title: "Synchronize store menu with POS menu"
method: POST
path: "/v1/menus/menu-sync"
tags: ["menus_endpoints"]
---

# Synchronize store menu with POS menu

`POST /v1/menus/menu-sync`

## Request

- Base URL: `https://partners.tryotter.com`
- URL: `https://partners.tryotter.com/v1/menus/menu-sync`
- Auth: OAuth 2
  - Authorization code: `/v1/auth/oauth2/authorize`
  - Client credentials
  - Token URL: `/v1/auth/token` scopes: `menus.sync`
- TypeScript: <https://skmtc.dev/cloudkitchens/apis/otter-api/docs/v1/menus/menu-sync/post.ts> (a function with typed inputs; its response is checked against the schema)

This endpoint is used to synchronize the store menu with the connected POS.

## Headers

- `X-Store-Id` string, required: The unique identifier of the store in your app. This ID, along with the `Application ID`, will be used to match the correct store when performing operations. It cannot be longer than 255 characters and must only contain printable ASCII characters. During on-boarding, this ID will be similar to `onboarding:905bb725-b141-4a9b-832a-1f254f772c94` (where the UUID is the Internal Store ID). During off-boarding, this field will be filled with the last known Store ID, or with an empty string, in case none is found. In that case, please fall back to the provided `internalStoreId` (a.k.a. Sku-Sku ID).

## Request body

- PosMenuSyncRequest
  - `shouldPublishChanges` boolean, nullable: Whether or not to publish changes to external services after bulk resolution.
  - `useCustomOptions` boolean, nullable: If true, use `customBulkResolutionOptions` instead of menu configuration.
  - `customBulkResolutionOptions` CustomBulkResolutionOptions, nullable
    - `updateNames` boolean: Update the linked entity's names to match the linked external entity's.
    - `updatePrices` boolean: Update the linked entity's price to match the linked external entity's.
    - `updateDescriptions` boolean: Update the linked entity's description to match the linked external entity's.
    - `createUnmatchedEntities` boolean: Create unmatched external entities in the menu.
    - `deleteMissingEntities` boolean: Delete entities that are missing external links.
    - `bootstrapPhotosToEntities` boolean: Bootstrap linked item photos.
    - `copyEntityPaths` boolean: Copies the entity paths from the external menu.
    - `updateItemSuspensionStatus` boolean: Update Item suspension status.
    - `updateHours` boolean: Update menu hours.
    - `assignItemsToLocations` boolean: If an item exists at a location in the POS, it will automatically be assigned to that location.
    - `unassignItemsFromLocations` boolean: If an item is removed from a location in the POS, it will automatically be unassigned from that location.
    - `updateMenuOrganization` boolean: The organization of modifiers into modifier groups, modifier groups into items and items into categories will be replicated from the POS menu.
    - `updateItemArrangement` boolean: The arrangement of menu products as displayed in your POS will be replicated.
    - `updateModifierGroupRules` boolean: Update modifier group selection rules.
    - `updateTaxes` boolean: Update taxes.

## Response `202`

The Menu Sync will be processed.

- PosMenuSyncResponse
  - `jobId` string, uuid, nullable: Only present if the request succeeds. Job ID to check on the status with the MenuAsyncJob endpoint.

## Other responses

- `400`: The request is malformed.
- `401`: Invalid authorization.
- `403`: Authorization not valid for the requested resource.
- `404`: Resource not found.
- `422`: The request body is not valid.

---

[API](https://skmtc.dev/cloudkitchens/apis/otter-api.md) - [All operations](https://skmtc.dev/cloudkitchens/apis/otter-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cloudkitchens/apis/otter-api/revisions/4c868194a467?raw)
