Upsert menus for a store
Replaces the store's complete menu snapshot. Include every customer-menu entity that should remain; omitted entities are deleted. An omitted station item can remain when an existing customer-item association prevents its deletion. Repeating the same complete payload is safe and produces the same menu state. Rate limit: 2 requests per minute.
Request
- Base URLhttps://partners.tryotter.com
- AuthOAuth 2Authorization code/v1/auth/oauth2/authorizeClient credentialsToken URL/v1/auth/tokenScopesmenus.upsert
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Headers
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
Example request
{
"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"
],
"photoUrls": [
"https://example.com/photos/c75d9460-5d48-423d-8d01-f825fd5b1672.jpeg"
],
"priceOverrides": [
{
"rules": [
{
"externalServiceSlug": "ubereats"
}
],
"currencyCode": "USD",
"amount": 7
}
],
"skuDetails": {
"skuSlug": "canned-coke-355ml",
"dietaryClassifications": [
{
"tag": "VEGAN"
}
],
"allergenClassifications": [
{
"tag": "GLUTEN",
"containsAllergen": false
},
{
"tag": "PEANUT",
"containsAllergen": true
}
],
"storageRequirements": [
{
"tag": "FROZEN"
}
]
}
},
"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"
},
"type": "DEFAULT"
}
}
}Response
The menu update will be processed.
Example response
{
"jobType": "PUBLISH",
"publishJobState": {
"rappi": {
"status": "FAILED",
"message": "Failed to publish menu due to error ..."
}
}
}Changes
No recorded changes to this operation across all 1 revision of this API.