> ## Documentation Index
> Fetch the complete documentation index at: https://docs.maple.inc/llms.txt
> Use this file to discover all available pages before exploring further.

# Publish location menu

> Publishes the full menu document for a connected location.

POST`https://api.maple.inc/v1/locations/{locationId}/menu`API key

Publishes the full menu document for a connected location. Validation is all-or-nothing (a 400 lists every issue); the document is applied as a diff against the current menu, so an identical re-publish is a no-op and object identities stay stable across publishes by their `externalId`. Returns the resulting menu. Requires `menus:write` and an active connection to the location.

## Authorization

Send your API key as `Authorization: Bearer <key>`: `mpk_test_…` against the sandbox (`https://api.staging.maple.inc/v1`), `mpk_live_…` against production. See [Authentication](https://docs.maple.inc/developer-api/concepts/authentication.md). The samples read the key from `MAPLE_KEY` and the base URL from `MAPLE_BASE`, as set up in the [Quickstart](https://docs.maple.inc/developer-api/quickstart.md).

## Parameters

- `locationId` string path required

## Request body

`application/json`, required.

- `currency` string required

- `locale` string

- `timezone` string

- `currencies` object\[]

- `currencies[].currency` string required

- `currencies[].exponent` integer

- `currencies[].cashRoundingMinor` integer

- `currencies[].roundingMode` string

  One of `half_up`, `half_even`, `half_down`, `up`, `down`, `ceiling`, `floor`.

- `taxCategories` object\[]

- `taxCategories[].id` string

- `taxCategories[].externalId` string

- `taxCategories[].name` string required

- `taxRates` object\[]

- `taxRates[].id` string

- `taxRates[].externalId` string

- `taxRates[].name` string required

- `taxRates[].taxCategoryId` string

- `taxRates[].method` string

  One of `percentage`, `flat`, `bracket`.

- `taxRates[].percentage` number

- `taxRates[].flatAmount` object

- `taxRates[].flatAmount.amountMinor` integer required

- `taxRates[].flatAmount.currency` string required

- `taxRates[].brackets` object\[]

- `taxRates[].brackets[].from` object required

- `taxRates[].brackets[].from.amountMinor` integer required

- `taxRates[].brackets[].from.currency` string required

- `taxRates[].brackets[].to` object

- `taxRates[].brackets[].to.amountMinor` integer required

- `taxRates[].brackets[].to.currency` string required

- `taxRates[].brackets[].tax` object required

- `taxRates[].brackets[].tax.amountMinor` integer required

- `taxRates[].brackets[].tax.currency` string required

- `taxRates[].base` string

  One of `price`, `price_plus_prior_taxes`, `weight`, `volume`, `quantity`, `alcohol_content`.

- `taxRates[].inclusion` string

  One of `exclusive`, `inclusive`, `context_resolved`.

- `taxRates[].compoundOnTaxRateIds` string\[]

- `taxRates[].tenderExemptions` string\[]

- `taxRates[].condition` object

- `taxRates[].condition.minPrice` object

- `taxRates[].condition.minPrice.amountMinor` integer required

- `taxRates[].condition.minPrice.currency` string required

- `taxRates[].condition.maxPrice` object

- `taxRates[].condition.maxPrice.amountMinor` integer required

- `taxRates[].condition.maxPrice.currency` string required

- `taxRates[].condition.jurisdiction` string

- `taxRates[].condition.attributes` object\[]

- `taxRates[].condition.attributes[].key` string required

- `taxRates[].condition.attributes[].value` string required

- `taxRates[].hiddenFromCustomer` boolean

- `fees` object\[]

- `fees[].id` string

- `fees[].externalId` string

- `fees[].name` string required

- `fees[].feeType` string required

  One of `delivery`, `service_charge`, `bag`, `bottle_deposit`, `crv`, `small_order`, `processing_pass_through`, `deposit`, `security_hold`, `no_show_fee`, `cancellation_fee`, `auto_gratuity`, `non_cash_adjustment`, `other`.

- `fees[].calculation` object required

- `fees[].calculation.base` string required

  One of `flat`, `per_unit`, `percentage_of_line`, `percentage_of_subtotal`, `post_discount`, `post_tax_total`.

- `fees[].calculation.amount` object

- `fees[].calculation.amount.amountMinor` integer required

- `fees[].calculation.amount.currency` string required

- `fees[].calculation.percentage` number

- `fees[].calculation.eligibleProductSetId` string

- `fees[].calculation.excludedProductSetIds` string\[]

- `fees[].taxCategoryId` string

- `fees[].refundable` boolean

- `fees[].autoApply` object

- `fees[].autoApply.byGuestCountGte` integer

- `fees[].autoApply.byFulfillmentMode` string\[]

- `fees[].containers` object\[]

- `fees[].containers[].containerSizeMl` number

- `fees[].containers[].amount` object required

- `fees[].containers[].amount.amountMinor` integer required

- `fees[].containers[].amount.currency` string required

- `productSets` object\[]

- `productSets[].id` string

- `productSets[].externalId` string

- `productSets[].name` string

- `productSets[].itemIdsAny` string\[]

- `productSets[].itemIdsAll` string\[]

- `productSets[].allProducts` boolean

- `productSets[].quantityExact` integer

- `productSets[].quantityMin` integer

- `productSets[].quantityMax` integer

- `discounts` object\[]

- `discounts[].id` string

- `discounts[].externalId` string

- `discounts[].name` string required

- `discounts[].benefitType` string required

  One of `percentage`, `amount`, `set_price`, `free_item`, `bxgy`, `free_fee`.

- `discounts[].amount` object

- `discounts[].amount.amountMinor` integer required

- `discounts[].amount.currency` string required

- `discounts[].percentage` number

- `discounts[].maximumAmount` object

- `discounts[].maximumAmount.amountMinor` integer required

- `discounts[].maximumAmount.currency` string required

- `discounts[].benefitTargetProductSetId` string

- `discounts[].lineSelection` string

  One of `least_expensive`, `most_expensive`.

- `discounts[].bxgy` object

- `discounts[].bxgy.buyProductSetId` string required

- `discounts[].bxgy.buyQuantity` integer required

- `discounts[].bxgy.getProductSetId` string required

- `discounts[].bxgy.getQuantity` integer required

- `discounts[].bxgy.getBenefit` string required

  One of `free`, `percentage`, `set_price`, `amount`.

- `discounts[].bxgy.getBenefitAmount` object

- `discounts[].bxgy.getBenefitAmount.amountMinor` integer required

- `discounts[].bxgy.getBenefitAmount.currency` string required

- `discounts[].bxgy.getBenefitPercentage` number

- `discounts[].bxgy.customerChoosesReward` boolean

- `discounts[].bxgy.excludeStrategy` string

  One of `least_expensive`, `most_expensive`.

- `discounts[].freeFeeTargets` string\[]

- `discounts[].modifiesTaxBasis` boolean

- `promotions` object\[]

- `promotions[].id` string

- `promotions[].externalId` string

- `promotions[].name` string required

- `promotions[].discountId` string required

- `promotions[].applicationMode` string

  One of `automatic`, `coupon`, `manual`.

- `promotions[].eligibility` object

- `promotions[].eligibility.minimumOrderSubtotal` object

- `promotions[].eligibility.minimumOrderSubtotal.amountMinor` integer required

- `promotions[].eligibility.minimumOrderSubtotal.currency` string required

- `promotions[].eligibility.matchProductSetId` string

- `promotions[].eligibility.excludeProductSetId` string

- `promotions[].availability` object

- `promotions[].availability.windows` object\[] required

- `promotions[].availability.windows[].dayOfWeek` integer required

- `promotions[].availability.windows[].startTime` string required

- `promotions[].availability.windows[].endTime` string required

- `promotions[].validFrom` string

- `promotions[].validUntil` string

- `promotions[].stacking` object

- `promotions[].stacking.mode` string required

  One of `exclusive`, `additive`, `best_of`, `ordered`.

- `promotions[].stacking.priority` integer

- `promotions[].redemption` object

- `promotions[].redemption.maxUsesTotal` integer

- `promotions[].redemption.maxUsesPerCustomer` integer

- `coupons` object\[]

- `coupons[].id` string

- `coupons[].externalId` string

- `coupons[].code` string required

- `coupons[].promotionId` string required

- `coupons[].maxRedemptions` integer

- `coupons[].perCustomerLimit` integer

- `coupons[].expiresAt` string

- `modifierGroups` object\[]

- `modifierGroups[].id` string

- `modifierGroups[].externalId` string required

- `modifierGroups[].name` string required

- `modifierGroups[].inputType` string

  One of `options`, `text`.

- `modifierGroups[].minSelections` integer required

- `modifierGroups[].maxSelections` integer required

- `modifierGroups[].minUniqueSelections` integer

- `modifierGroups[].maxUniqueSelections` integer

- `modifierGroups[].freeSelectionCount` integer

- `modifierGroups[].chargeKeptDefaults` boolean

- `modifierGroups[].allowedQuantities` integer\[]

- `modifierGroups[].options` object\[]

- `modifierGroups[].options[].id` string

- `modifierGroups[].options[].externalId` string required

- `modifierGroups[].options[].name` string required

- `modifierGroups[].options[].price` object

- `modifierGroups[].options[].price.amount` object

- `modifierGroups[].options[].price.amount.amountMinor` integer required

- `modifierGroups[].options[].price.amount.currency` string required

- `modifierGroups[].options[].price.priceType` string

  One of `fixed`, `variable`, `per_unit`, `bulk`.

- `modifierGroups[].options[].price.taxInclusive` boolean

- `modifierGroups[].options[].price.currencyPrices` object\[]

- `modifierGroups[].options[].price.currencyPrices[].amount` object required

- `modifierGroups[].options[].price.currencyPrices[].amount.amountMinor` integer required

- `modifierGroups[].options[].price.currencyPrices[].amount.currency` string required

- `modifierGroups[].options[].price.currencyPrices[].taxInclusive` boolean

- `modifierGroups[].options[].price.openBounds` object

- `modifierGroups[].options[].price.openBounds.min` object

- `modifierGroups[].options[].price.openBounds.min.amountMinor` integer required

- `modifierGroups[].options[].price.openBounds.min.currency` string required

- `modifierGroups[].options[].price.openBounds.max` object

- `modifierGroups[].options[].price.openBounds.max.amountMinor` integer required

- `modifierGroups[].options[].price.openBounds.max.currency` string required

- `modifierGroups[].options[].price.openBounds.presets` object\[]

- `modifierGroups[].options[].price.openBounds.presets[].amountMinor` integer required

- `modifierGroups[].options[].price.openBounds.presets[].currency` string required

- `modifierGroups[].options[].price.bulkTiers` object\[]

- `modifierGroups[].options[].price.bulkTiers[].minQuantity` integer required

- `modifierGroups[].options[].price.bulkTiers[].unitPrice` object required

- `modifierGroups[].options[].price.bulkTiers[].unitPrice.amountMinor` integer required

- `modifierGroups[].options[].price.bulkTiers[].unitPrice.currency` string required

- `modifierGroups[].options[].price.measurementUnit` object

- `modifierGroups[].options[].price.measurementUnit.unit` string required

- `modifierGroups[].options[].price.measurementUnit.precision` integer

- `modifierGroups[].options[].price.compareAtAmount` object

- `modifierGroups[].options[].price.compareAtAmount.amountMinor` integer required

- `modifierGroups[].options[].price.compareAtAmount.currency` string required

- `modifierGroups[].options[].defaultQuantity` integer

- `modifierGroups[].options[].minQuantity` integer

- `modifierGroups[].options[].maxQuantity` integer

- `modifierGroups[].options[].taxCategoryId` string

- `modifierGroups[].options[].taxRateIds` string\[]

- `modifierGroups[].options[].dietaryLabels` string\[]

- `modifierGroups[].options[].allergens` string\[]

- `modifierGroups[].options[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `modifierGroups[].options[].modifierGroups` object\[]

- `modifierGroups[].options[].modifierGroups[].groupId` string

- `modifierGroups[].options[].modifierGroups[].minSelections` integer

- `modifierGroups[].options[].modifierGroups[].maxSelections` integer

- `modifierGroups[].options[].modifierGroups[].minUniqueSelections` integer

- `modifierGroups[].options[].modifierGroups[].maxUniqueSelections` integer

- `modifierGroups[].options[].modifierGroups[].freeSelectionCount` integer

- `modifierGroups[].options[].modifierGroups[].chargeKeptDefaults` boolean

- `modifierGroups[].options[].modifierGroups[].allowedQuantities` integer\[]

- `modifierGroups[].options[].modifierGroups[].optionDefaults` object\[]

- `modifierGroups[].options[].modifierGroups[].optionDefaults[].optionId` string

- `modifierGroups[].options[].modifierGroups[].optionDefaults[].defaultQuantity` integer

- `modifierGroups[].options[].modifierGroups[].externalId` any

- `modifierGroups[].options[].modifierGroups[].name` any

- `modifierGroups[].options[].modifierGroups[].options` any

- `modifierGroups[].options[].modifierGroups[].id` string

- `modifierGroups[].options[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `modifierGroups[].options[].modifierGroups[].options[].id` string

- `modifierGroups[].options[].modifierGroups[].options[].externalId` string

- `modifierGroups[].options[].modifierGroups[].options[].name` string

- `modifierGroups[].options[].modifierGroups[].options[].price` object

- `modifierGroups[].options[].modifierGroups[].options[].price.amount` object

- `modifierGroups[].options[].modifierGroups[].options[].price.priceType` string

  One of `fixed`, `variable`, `per_unit`, `bulk`.

- `modifierGroups[].options[].modifierGroups[].options[].price.taxInclusive` boolean

- `modifierGroups[].options[].modifierGroups[].options[].price.currencyPrices` object\[]

- `modifierGroups[].options[].modifierGroups[].options[].price.openBounds` object

- `modifierGroups[].options[].modifierGroups[].options[].price.bulkTiers` object\[]

- `modifierGroups[].options[].modifierGroups[].options[].price.measurementUnit` object

- `modifierGroups[].options[].modifierGroups[].options[].price.compareAtAmount` object

- `modifierGroups[].options[].modifierGroups[].options[].defaultQuantity` integer

- `modifierGroups[].options[].modifierGroups[].options[].minQuantity` integer

- `modifierGroups[].options[].modifierGroups[].options[].maxQuantity` integer

- `modifierGroups[].options[].modifierGroups[].options[].taxCategoryId` string

- `modifierGroups[].options[].modifierGroups[].options[].taxRateIds` string\[]

- `modifierGroups[].options[].modifierGroups[].options[].dietaryLabels` string\[]

- `modifierGroups[].options[].modifierGroups[].options[].allergens` string\[]

- `modifierGroups[].options[].modifierGroups[].options[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups` object\[]

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].groupId` string

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].minSelections` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].maxSelections` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].minUniqueSelections` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].maxUniqueSelections` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].freeSelectionCount` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].chargeKeptDefaults` boolean

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].allowedQuantities` integer\[]

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].optionDefaults` object\[]

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].externalId` any

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].name` any

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].options` any

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].id` string

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].textMaxLength` integer

- `modifierGroups[].options[].modifierGroups[].textMaxLength` integer

- `modifierGroups[].textMaxLength` integer

- `modifierGroups[].groupId` any

- `categories` object\[] required

- `categories[].id` string

- `categories[].externalId` string required

- `categories[].name` string required

- `categories[].availability` object

- `categories[].availability.windows` object\[] required

- `categories[].availability.windows[].dayOfWeek` integer required

- `categories[].availability.windows[].startTime` string required

- `categories[].availability.windows[].endTime` string required

- `categories[].items` object\[] required

- `categories[].items[].id` string

- `categories[].items[].externalId` string required

- `categories[].items[].name` string required

- `categories[].items[].description` string

- `categories[].items[].variations` object\[] required

- `categories[].items[].variations[].id` string

- `categories[].items[].variations[].externalId` string required

- `categories[].items[].variations[].name` string required

- `categories[].items[].variations[].price` object required

- `categories[].items[].variations[].price.amount` object

- `categories[].items[].variations[].price.amount.amountMinor` integer required

- `categories[].items[].variations[].price.amount.currency` string required

- `categories[].items[].variations[].price.priceType` string

  One of `fixed`, `variable`, `per_unit`, `bulk`.

- `categories[].items[].variations[].price.taxInclusive` boolean

- `categories[].items[].variations[].price.currencyPrices` object\[]

- `categories[].items[].variations[].price.currencyPrices[].amount` object required

- `categories[].items[].variations[].price.currencyPrices[].taxInclusive` boolean

- `categories[].items[].variations[].price.openBounds` object

- `categories[].items[].variations[].price.openBounds.min` object

- `categories[].items[].variations[].price.openBounds.max` object

- `categories[].items[].variations[].price.openBounds.presets` object\[]

- `categories[].items[].variations[].price.bulkTiers` object\[]

- `categories[].items[].variations[].price.bulkTiers[].minQuantity` integer required

- `categories[].items[].variations[].price.bulkTiers[].unitPrice` object required

- `categories[].items[].variations[].price.measurementUnit` object

- `categories[].items[].variations[].price.measurementUnit.unit` string required

- `categories[].items[].variations[].price.measurementUnit.precision` integer

- `categories[].items[].variations[].price.compareAtAmount` object

- `categories[].items[].variations[].price.compareAtAmount.amountMinor` integer required

- `categories[].items[].variations[].price.compareAtAmount.currency` string required

- `categories[].items[].variations[].sku` string

- `categories[].items[].variations[].barcodes` string\[]

- `categories[].items[].variations[].modifierGroups` object\[]

- `categories[].items[].variations[].modifierGroups[].groupId` string

- `categories[].items[].variations[].modifierGroups[].minSelections` integer

- `categories[].items[].variations[].modifierGroups[].maxSelections` integer

- `categories[].items[].variations[].modifierGroups[].minUniqueSelections` integer

- `categories[].items[].variations[].modifierGroups[].maxUniqueSelections` integer

- `categories[].items[].variations[].modifierGroups[].freeSelectionCount` integer

- `categories[].items[].variations[].modifierGroups[].chargeKeptDefaults` boolean

- `categories[].items[].variations[].modifierGroups[].allowedQuantities` integer\[]

- `categories[].items[].variations[].modifierGroups[].optionDefaults` object\[]

- `categories[].items[].variations[].modifierGroups[].optionDefaults[].optionId` string

- `categories[].items[].variations[].modifierGroups[].optionDefaults[].defaultQuantity` integer

- `categories[].items[].variations[].modifierGroups[].externalId` any

- `categories[].items[].variations[].modifierGroups[].name` any

- `categories[].items[].variations[].modifierGroups[].options` any

- `categories[].items[].variations[].modifierGroups[].id` string

- `categories[].items[].variations[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `categories[].items[].variations[].modifierGroups[].options[].id` string

- `categories[].items[].variations[].modifierGroups[].options[].externalId` string

- `categories[].items[].variations[].modifierGroups[].options[].name` string

- `categories[].items[].variations[].modifierGroups[].options[].price` object

- `categories[].items[].variations[].modifierGroups[].options[].defaultQuantity` integer

- `categories[].items[].variations[].modifierGroups[].options[].minQuantity` integer

- `categories[].items[].variations[].modifierGroups[].options[].maxQuantity` integer

- `categories[].items[].variations[].modifierGroups[].options[].taxCategoryId` string

- `categories[].items[].variations[].modifierGroups[].options[].taxRateIds` string\[]

- `categories[].items[].variations[].modifierGroups[].options[].dietaryLabels` string\[]

- `categories[].items[].variations[].modifierGroups[].options[].allergens` string\[]

- `categories[].items[].variations[].modifierGroups[].options[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `categories[].items[].variations[].modifierGroups[].options[].modifierGroups` object\[]

- `categories[].items[].variations[].modifierGroups[].textMaxLength` integer

- `categories[].items[].variations[].dietaryLabels` string\[]

- `categories[].items[].variations[].allergens` string\[]

- `categories[].items[].variations[].calorieCount` integer

- `categories[].items[].variations[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `categories[].items[].modifierGroups` object\[]

- `categories[].items[].modifierGroups[].groupId` string

- `categories[].items[].modifierGroups[].minSelections` integer

- `categories[].items[].modifierGroups[].maxSelections` integer

- `categories[].items[].modifierGroups[].minUniqueSelections` integer

- `categories[].items[].modifierGroups[].maxUniqueSelections` integer

- `categories[].items[].modifierGroups[].freeSelectionCount` integer

- `categories[].items[].modifierGroups[].chargeKeptDefaults` boolean

- `categories[].items[].modifierGroups[].allowedQuantities` integer\[]

- `categories[].items[].modifierGroups[].optionDefaults` object\[]

- `categories[].items[].modifierGroups[].optionDefaults[].optionId` string

- `categories[].items[].modifierGroups[].optionDefaults[].defaultQuantity` integer

- `categories[].items[].modifierGroups[].externalId` any

- `categories[].items[].modifierGroups[].name` any

- `categories[].items[].modifierGroups[].options` any

- `categories[].items[].modifierGroups[].id` string

- `categories[].items[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `categories[].items[].modifierGroups[].options[].id` string

- `categories[].items[].modifierGroups[].options[].externalId` string

- `categories[].items[].modifierGroups[].options[].name` string

- `categories[].items[].modifierGroups[].options[].price` object

- `categories[].items[].modifierGroups[].options[].price.amount` object

- `categories[].items[].modifierGroups[].options[].price.priceType` string

  One of `fixed`, `variable`, `per_unit`, `bulk`.

- `categories[].items[].modifierGroups[].options[].price.taxInclusive` boolean

- `categories[].items[].modifierGroups[].options[].price.currencyPrices` object\[]

- `categories[].items[].modifierGroups[].options[].price.openBounds` object

- `categories[].items[].modifierGroups[].options[].price.bulkTiers` object\[]

- `categories[].items[].modifierGroups[].options[].price.measurementUnit` object

- `categories[].items[].modifierGroups[].options[].price.compareAtAmount` object

- `categories[].items[].modifierGroups[].options[].defaultQuantity` integer

- `categories[].items[].modifierGroups[].options[].minQuantity` integer

- `categories[].items[].modifierGroups[].options[].maxQuantity` integer

- `categories[].items[].modifierGroups[].options[].taxCategoryId` string

- `categories[].items[].modifierGroups[].options[].taxRateIds` string\[]

- `categories[].items[].modifierGroups[].options[].dietaryLabels` string\[]

- `categories[].items[].modifierGroups[].options[].allergens` string\[]

- `categories[].items[].modifierGroups[].options[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `categories[].items[].modifierGroups[].options[].modifierGroups` object\[]

- `categories[].items[].modifierGroups[].options[].modifierGroups[].groupId` string

- `categories[].items[].modifierGroups[].options[].modifierGroups[].minSelections` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].maxSelections` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].minUniqueSelections` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].maxUniqueSelections` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].freeSelectionCount` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].chargeKeptDefaults` boolean

- `categories[].items[].modifierGroups[].options[].modifierGroups[].allowedQuantities` integer\[]

- `categories[].items[].modifierGroups[].options[].modifierGroups[].optionDefaults` object\[]

- `categories[].items[].modifierGroups[].options[].modifierGroups[].externalId` any

- `categories[].items[].modifierGroups[].options[].modifierGroups[].name` any

- `categories[].items[].modifierGroups[].options[].modifierGroups[].options` any

- `categories[].items[].modifierGroups[].options[].modifierGroups[].id` string

- `categories[].items[].modifierGroups[].options[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `categories[].items[].modifierGroups[].options[].modifierGroups[].textMaxLength` integer

- `categories[].items[].modifierGroups[].textMaxLength` integer

- `categories[].items[].taxCategoryId` string

- `categories[].items[].taxRateIds` string\[]

- `categories[].items[].feeIds` string\[]

- `categories[].items[].dietaryLabels` string\[]

- `categories[].items[].allergens` string\[]

- `categories[].items[].calorieCount` integer

- `categories[].items[].availability` object

- `categories[].items[].availability.windows` object\[] required

- `categories[].items[].availability.windows[].dayOfWeek` integer required

- `categories[].items[].availability.windows[].startTime` string required

- `categories[].items[].availability.windows[].endTime` string required

- `categories[].items[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

## Responses

### 200 OK

- `catalogId` string required

- `storePublicId` string required

- `versionId` string required

- `currency` string required

- `locale` string

- `timezone` string

- `currencies` object\[] required

- `currencies[].currency` string required

- `currencies[].exponent` integer

- `currencies[].cashRoundingMinor` integer

- `currencies[].roundingMode` string

  One of `half_up`, `half_even`, `half_down`, `up`, `down`, `ceiling`, `floor`.

- `taxCategories` object\[] required

- `taxCategories[].id` string

- `taxCategories[].externalId` string

- `taxCategories[].name` string required

- `taxRates` object\[] required

- `taxRates[].id` string

- `taxRates[].externalId` string

- `taxRates[].name` string required

- `taxRates[].taxCategoryId` string

- `taxRates[].method` string

  One of `percentage`, `flat`, `bracket`.

- `taxRates[].percentage` number

- `taxRates[].flatAmount` object

- `taxRates[].flatAmount.amountMinor` integer required

- `taxRates[].flatAmount.currency` string required

- `taxRates[].brackets` object\[]

- `taxRates[].brackets[].from` object required

- `taxRates[].brackets[].from.amountMinor` integer required

- `taxRates[].brackets[].from.currency` string required

- `taxRates[].brackets[].to` object

- `taxRates[].brackets[].to.amountMinor` integer required

- `taxRates[].brackets[].to.currency` string required

- `taxRates[].brackets[].tax` object required

- `taxRates[].brackets[].tax.amountMinor` integer required

- `taxRates[].brackets[].tax.currency` string required

- `taxRates[].base` string

  One of `price`, `price_plus_prior_taxes`, `weight`, `volume`, `quantity`, `alcohol_content`.

- `taxRates[].inclusion` string

  One of `exclusive`, `inclusive`, `context_resolved`.

- `taxRates[].compoundOnTaxRateIds` string\[]

- `taxRates[].tenderExemptions` string\[]

- `taxRates[].condition` object

- `taxRates[].condition.minPrice` object

- `taxRates[].condition.minPrice.amountMinor` integer required

- `taxRates[].condition.minPrice.currency` string required

- `taxRates[].condition.maxPrice` object

- `taxRates[].condition.maxPrice.amountMinor` integer required

- `taxRates[].condition.maxPrice.currency` string required

- `taxRates[].condition.jurisdiction` string

- `taxRates[].condition.attributes` object\[]

- `taxRates[].condition.attributes[].key` string required

- `taxRates[].condition.attributes[].value` string required

- `taxRates[].hiddenFromCustomer` boolean

- `fees` object\[] required

- `fees[].id` string

- `fees[].externalId` string

- `fees[].name` string required

- `fees[].feeType` string required

  One of `delivery`, `service_charge`, `bag`, `bottle_deposit`, `crv`, `small_order`, `processing_pass_through`, `deposit`, `security_hold`, `no_show_fee`, `cancellation_fee`, `auto_gratuity`, `non_cash_adjustment`, `other`.

- `fees[].calculation` object required

- `fees[].calculation.base` string required

  One of `flat`, `per_unit`, `percentage_of_line`, `percentage_of_subtotal`, `post_discount`, `post_tax_total`.

- `fees[].calculation.amount` object

- `fees[].calculation.amount.amountMinor` integer required

- `fees[].calculation.amount.currency` string required

- `fees[].calculation.percentage` number

- `fees[].calculation.eligibleProductSetId` string

- `fees[].calculation.excludedProductSetIds` string\[]

- `fees[].taxCategoryId` string

- `fees[].refundable` boolean

- `fees[].autoApply` object

- `fees[].autoApply.byGuestCountGte` integer

- `fees[].autoApply.byFulfillmentMode` string\[]

- `fees[].containers` object\[]

- `fees[].containers[].containerSizeMl` number

- `fees[].containers[].amount` object required

- `fees[].containers[].amount.amountMinor` integer required

- `fees[].containers[].amount.currency` string required

- `productSets` object\[] required

- `productSets[].id` string

- `productSets[].externalId` string

- `productSets[].name` string

- `productSets[].itemIdsAny` string\[]

- `productSets[].itemIdsAll` string\[]

- `productSets[].allProducts` boolean

- `productSets[].quantityExact` integer

- `productSets[].quantityMin` integer

- `productSets[].quantityMax` integer

- `discounts` object\[] required

- `discounts[].id` string

- `discounts[].externalId` string

- `discounts[].name` string required

- `discounts[].benefitType` string required

  One of `percentage`, `amount`, `set_price`, `free_item`, `bxgy`, `free_fee`.

- `discounts[].amount` object

- `discounts[].amount.amountMinor` integer required

- `discounts[].amount.currency` string required

- `discounts[].percentage` number

- `discounts[].maximumAmount` object

- `discounts[].maximumAmount.amountMinor` integer required

- `discounts[].maximumAmount.currency` string required

- `discounts[].benefitTargetProductSetId` string

- `discounts[].lineSelection` string

  One of `least_expensive`, `most_expensive`.

- `discounts[].bxgy` object

- `discounts[].bxgy.buyProductSetId` string required

- `discounts[].bxgy.buyQuantity` integer required

- `discounts[].bxgy.getProductSetId` string required

- `discounts[].bxgy.getQuantity` integer required

- `discounts[].bxgy.getBenefit` string required

  One of `free`, `percentage`, `set_price`, `amount`.

- `discounts[].bxgy.getBenefitAmount` object

- `discounts[].bxgy.getBenefitAmount.amountMinor` integer required

- `discounts[].bxgy.getBenefitAmount.currency` string required

- `discounts[].bxgy.getBenefitPercentage` number

- `discounts[].bxgy.customerChoosesReward` boolean

- `discounts[].bxgy.excludeStrategy` string

  One of `least_expensive`, `most_expensive`.

- `discounts[].freeFeeTargets` string\[]

- `discounts[].modifiesTaxBasis` boolean

- `promotions` object\[] required

- `promotions[].id` string

- `promotions[].externalId` string

- `promotions[].name` string required

- `promotions[].discountId` string required

- `promotions[].applicationMode` string

  One of `automatic`, `coupon`, `manual`.

- `promotions[].eligibility` object

- `promotions[].eligibility.minimumOrderSubtotal` object

- `promotions[].eligibility.minimumOrderSubtotal.amountMinor` integer required

- `promotions[].eligibility.minimumOrderSubtotal.currency` string required

- `promotions[].eligibility.matchProductSetId` string

- `promotions[].eligibility.excludeProductSetId` string

- `promotions[].availability` object

- `promotions[].availability.windows` object\[] required

- `promotions[].availability.windows[].dayOfWeek` integer required

- `promotions[].availability.windows[].startTime` string required

- `promotions[].availability.windows[].endTime` string required

- `promotions[].validFrom` string

- `promotions[].validUntil` string

- `promotions[].stacking` object

- `promotions[].stacking.mode` string required

  One of `exclusive`, `additive`, `best_of`, `ordered`.

- `promotions[].stacking.priority` integer

- `promotions[].redemption` object

- `promotions[].redemption.maxUsesTotal` integer

- `promotions[].redemption.maxUsesPerCustomer` integer

- `coupons` object\[] required

- `coupons[].id` string

- `coupons[].externalId` string

- `coupons[].code` string required

- `coupons[].promotionId` string required

- `coupons[].maxRedemptions` integer

- `coupons[].perCustomerLimit` integer

- `coupons[].expiresAt` string

- `modifierGroups` object\[] required

- `modifierGroups[].id` string

- `modifierGroups[].externalId` string required

- `modifierGroups[].name` string required

- `modifierGroups[].inputType` string

  One of `options`, `text`.

- `modifierGroups[].minSelections` integer required

- `modifierGroups[].maxSelections` integer required

- `modifierGroups[].minUniqueSelections` integer

- `modifierGroups[].maxUniqueSelections` integer

- `modifierGroups[].freeSelectionCount` integer

- `modifierGroups[].chargeKeptDefaults` boolean

- `modifierGroups[].allowedQuantities` integer\[]

- `modifierGroups[].options` object\[]

- `modifierGroups[].options[].id` string

- `modifierGroups[].options[].externalId` string required

- `modifierGroups[].options[].name` string required

- `modifierGroups[].options[].price` object

- `modifierGroups[].options[].price.amount` object

- `modifierGroups[].options[].price.amount.amountMinor` integer required

- `modifierGroups[].options[].price.amount.currency` string required

- `modifierGroups[].options[].price.priceType` string

  One of `fixed`, `variable`, `per_unit`, `bulk`.

- `modifierGroups[].options[].price.taxInclusive` boolean

- `modifierGroups[].options[].price.currencyPrices` object\[]

- `modifierGroups[].options[].price.currencyPrices[].amount` object required

- `modifierGroups[].options[].price.currencyPrices[].amount.amountMinor` integer required

- `modifierGroups[].options[].price.currencyPrices[].amount.currency` string required

- `modifierGroups[].options[].price.currencyPrices[].taxInclusive` boolean

- `modifierGroups[].options[].price.openBounds` object

- `modifierGroups[].options[].price.openBounds.min` object

- `modifierGroups[].options[].price.openBounds.min.amountMinor` integer required

- `modifierGroups[].options[].price.openBounds.min.currency` string required

- `modifierGroups[].options[].price.openBounds.max` object

- `modifierGroups[].options[].price.openBounds.max.amountMinor` integer required

- `modifierGroups[].options[].price.openBounds.max.currency` string required

- `modifierGroups[].options[].price.openBounds.presets` object\[]

- `modifierGroups[].options[].price.openBounds.presets[].amountMinor` integer required

- `modifierGroups[].options[].price.openBounds.presets[].currency` string required

- `modifierGroups[].options[].price.bulkTiers` object\[]

- `modifierGroups[].options[].price.bulkTiers[].minQuantity` integer required

- `modifierGroups[].options[].price.bulkTiers[].unitPrice` object required

- `modifierGroups[].options[].price.bulkTiers[].unitPrice.amountMinor` integer required

- `modifierGroups[].options[].price.bulkTiers[].unitPrice.currency` string required

- `modifierGroups[].options[].price.measurementUnit` object

- `modifierGroups[].options[].price.measurementUnit.unit` string required

- `modifierGroups[].options[].price.measurementUnit.precision` integer

- `modifierGroups[].options[].price.compareAtAmount` object

- `modifierGroups[].options[].price.compareAtAmount.amountMinor` integer required

- `modifierGroups[].options[].price.compareAtAmount.currency` string required

- `modifierGroups[].options[].defaultQuantity` integer

- `modifierGroups[].options[].minQuantity` integer

- `modifierGroups[].options[].maxQuantity` integer

- `modifierGroups[].options[].taxCategoryId` string

- `modifierGroups[].options[].taxRateIds` string\[]

- `modifierGroups[].options[].dietaryLabels` string\[]

- `modifierGroups[].options[].allergens` string\[]

- `modifierGroups[].options[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `modifierGroups[].options[].modifierGroups` object\[]

- `modifierGroups[].options[].modifierGroups[].groupId` string

- `modifierGroups[].options[].modifierGroups[].minSelections` integer

- `modifierGroups[].options[].modifierGroups[].maxSelections` integer

- `modifierGroups[].options[].modifierGroups[].minUniqueSelections` integer

- `modifierGroups[].options[].modifierGroups[].maxUniqueSelections` integer

- `modifierGroups[].options[].modifierGroups[].freeSelectionCount` integer

- `modifierGroups[].options[].modifierGroups[].chargeKeptDefaults` boolean

- `modifierGroups[].options[].modifierGroups[].allowedQuantities` integer\[]

- `modifierGroups[].options[].modifierGroups[].optionDefaults` object\[]

- `modifierGroups[].options[].modifierGroups[].optionDefaults[].optionId` string

- `modifierGroups[].options[].modifierGroups[].optionDefaults[].defaultQuantity` integer

- `modifierGroups[].options[].modifierGroups[].externalId` any

- `modifierGroups[].options[].modifierGroups[].name` any

- `modifierGroups[].options[].modifierGroups[].options` any

- `modifierGroups[].options[].modifierGroups[].id` string

- `modifierGroups[].options[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `modifierGroups[].options[].modifierGroups[].options[].id` string

- `modifierGroups[].options[].modifierGroups[].options[].externalId` string

- `modifierGroups[].options[].modifierGroups[].options[].name` string

- `modifierGroups[].options[].modifierGroups[].options[].price` object

- `modifierGroups[].options[].modifierGroups[].options[].price.amount` object

- `modifierGroups[].options[].modifierGroups[].options[].price.priceType` string

  One of `fixed`, `variable`, `per_unit`, `bulk`.

- `modifierGroups[].options[].modifierGroups[].options[].price.taxInclusive` boolean

- `modifierGroups[].options[].modifierGroups[].options[].price.currencyPrices` object\[]

- `modifierGroups[].options[].modifierGroups[].options[].price.openBounds` object

- `modifierGroups[].options[].modifierGroups[].options[].price.bulkTiers` object\[]

- `modifierGroups[].options[].modifierGroups[].options[].price.measurementUnit` object

- `modifierGroups[].options[].modifierGroups[].options[].price.compareAtAmount` object

- `modifierGroups[].options[].modifierGroups[].options[].defaultQuantity` integer

- `modifierGroups[].options[].modifierGroups[].options[].minQuantity` integer

- `modifierGroups[].options[].modifierGroups[].options[].maxQuantity` integer

- `modifierGroups[].options[].modifierGroups[].options[].taxCategoryId` string

- `modifierGroups[].options[].modifierGroups[].options[].taxRateIds` string\[]

- `modifierGroups[].options[].modifierGroups[].options[].dietaryLabels` string\[]

- `modifierGroups[].options[].modifierGroups[].options[].allergens` string\[]

- `modifierGroups[].options[].modifierGroups[].options[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups` object\[]

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].groupId` string

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].minSelections` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].maxSelections` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].minUniqueSelections` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].maxUniqueSelections` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].freeSelectionCount` integer

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].chargeKeptDefaults` boolean

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].allowedQuantities` integer\[]

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].optionDefaults` object\[]

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].externalId` any

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].name` any

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].options` any

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].id` string

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `modifierGroups[].options[].modifierGroups[].options[].modifierGroups[].textMaxLength` integer

- `modifierGroups[].options[].modifierGroups[].textMaxLength` integer

- `modifierGroups[].textMaxLength` integer

- `modifierGroups[].groupId` any

- `categories` object\[] required

- `categories[].id` string

- `categories[].externalId` string required

- `categories[].name` string required

- `categories[].availability` object

- `categories[].availability.windows` object\[] required

- `categories[].availability.windows[].dayOfWeek` integer required

- `categories[].availability.windows[].startTime` string required

- `categories[].availability.windows[].endTime` string required

- `categories[].items` object\[] required

- `categories[].items[].id` string

- `categories[].items[].externalId` string required

- `categories[].items[].name` string required

- `categories[].items[].description` string

- `categories[].items[].variations` object\[] required

- `categories[].items[].variations[].id` string

- `categories[].items[].variations[].externalId` string required

- `categories[].items[].variations[].name` string required

- `categories[].items[].variations[].price` object required

- `categories[].items[].variations[].price.amount` object

- `categories[].items[].variations[].price.amount.amountMinor` integer required

- `categories[].items[].variations[].price.amount.currency` string required

- `categories[].items[].variations[].price.priceType` string

  One of `fixed`, `variable`, `per_unit`, `bulk`.

- `categories[].items[].variations[].price.taxInclusive` boolean

- `categories[].items[].variations[].price.currencyPrices` object\[]

- `categories[].items[].variations[].price.currencyPrices[].amount` object required

- `categories[].items[].variations[].price.currencyPrices[].taxInclusive` boolean

- `categories[].items[].variations[].price.openBounds` object

- `categories[].items[].variations[].price.openBounds.min` object

- `categories[].items[].variations[].price.openBounds.max` object

- `categories[].items[].variations[].price.openBounds.presets` object\[]

- `categories[].items[].variations[].price.bulkTiers` object\[]

- `categories[].items[].variations[].price.bulkTiers[].minQuantity` integer required

- `categories[].items[].variations[].price.bulkTiers[].unitPrice` object required

- `categories[].items[].variations[].price.measurementUnit` object

- `categories[].items[].variations[].price.measurementUnit.unit` string required

- `categories[].items[].variations[].price.measurementUnit.precision` integer

- `categories[].items[].variations[].price.compareAtAmount` object

- `categories[].items[].variations[].price.compareAtAmount.amountMinor` integer required

- `categories[].items[].variations[].price.compareAtAmount.currency` string required

- `categories[].items[].variations[].sku` string

- `categories[].items[].variations[].barcodes` string\[]

- `categories[].items[].variations[].modifierGroups` object\[]

- `categories[].items[].variations[].modifierGroups[].groupId` string

- `categories[].items[].variations[].modifierGroups[].minSelections` integer

- `categories[].items[].variations[].modifierGroups[].maxSelections` integer

- `categories[].items[].variations[].modifierGroups[].minUniqueSelections` integer

- `categories[].items[].variations[].modifierGroups[].maxUniqueSelections` integer

- `categories[].items[].variations[].modifierGroups[].freeSelectionCount` integer

- `categories[].items[].variations[].modifierGroups[].chargeKeptDefaults` boolean

- `categories[].items[].variations[].modifierGroups[].allowedQuantities` integer\[]

- `categories[].items[].variations[].modifierGroups[].optionDefaults` object\[]

- `categories[].items[].variations[].modifierGroups[].optionDefaults[].optionId` string

- `categories[].items[].variations[].modifierGroups[].optionDefaults[].defaultQuantity` integer

- `categories[].items[].variations[].modifierGroups[].externalId` any

- `categories[].items[].variations[].modifierGroups[].name` any

- `categories[].items[].variations[].modifierGroups[].options` any

- `categories[].items[].variations[].modifierGroups[].id` string

- `categories[].items[].variations[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `categories[].items[].variations[].modifierGroups[].options[].id` string

- `categories[].items[].variations[].modifierGroups[].options[].externalId` string

- `categories[].items[].variations[].modifierGroups[].options[].name` string

- `categories[].items[].variations[].modifierGroups[].options[].price` object

- `categories[].items[].variations[].modifierGroups[].options[].defaultQuantity` integer

- `categories[].items[].variations[].modifierGroups[].options[].minQuantity` integer

- `categories[].items[].variations[].modifierGroups[].options[].maxQuantity` integer

- `categories[].items[].variations[].modifierGroups[].options[].taxCategoryId` string

- `categories[].items[].variations[].modifierGroups[].options[].taxRateIds` string\[]

- `categories[].items[].variations[].modifierGroups[].options[].dietaryLabels` string\[]

- `categories[].items[].variations[].modifierGroups[].options[].allergens` string\[]

- `categories[].items[].variations[].modifierGroups[].options[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `categories[].items[].variations[].modifierGroups[].options[].modifierGroups` object\[]

- `categories[].items[].variations[].modifierGroups[].textMaxLength` integer

- `categories[].items[].variations[].dietaryLabels` string\[]

- `categories[].items[].variations[].allergens` string\[]

- `categories[].items[].variations[].calorieCount` integer

- `categories[].items[].variations[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `categories[].items[].modifierGroups` object\[]

- `categories[].items[].modifierGroups[].groupId` string

- `categories[].items[].modifierGroups[].minSelections` integer

- `categories[].items[].modifierGroups[].maxSelections` integer

- `categories[].items[].modifierGroups[].minUniqueSelections` integer

- `categories[].items[].modifierGroups[].maxUniqueSelections` integer

- `categories[].items[].modifierGroups[].freeSelectionCount` integer

- `categories[].items[].modifierGroups[].chargeKeptDefaults` boolean

- `categories[].items[].modifierGroups[].allowedQuantities` integer\[]

- `categories[].items[].modifierGroups[].optionDefaults` object\[]

- `categories[].items[].modifierGroups[].optionDefaults[].optionId` string

- `categories[].items[].modifierGroups[].optionDefaults[].defaultQuantity` integer

- `categories[].items[].modifierGroups[].externalId` any

- `categories[].items[].modifierGroups[].name` any

- `categories[].items[].modifierGroups[].options` any

- `categories[].items[].modifierGroups[].id` string

- `categories[].items[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `categories[].items[].modifierGroups[].options[].id` string

- `categories[].items[].modifierGroups[].options[].externalId` string

- `categories[].items[].modifierGroups[].options[].name` string

- `categories[].items[].modifierGroups[].options[].price` object

- `categories[].items[].modifierGroups[].options[].price.amount` object

- `categories[].items[].modifierGroups[].options[].price.priceType` string

  One of `fixed`, `variable`, `per_unit`, `bulk`.

- `categories[].items[].modifierGroups[].options[].price.taxInclusive` boolean

- `categories[].items[].modifierGroups[].options[].price.currencyPrices` object\[]

- `categories[].items[].modifierGroups[].options[].price.openBounds` object

- `categories[].items[].modifierGroups[].options[].price.bulkTiers` object\[]

- `categories[].items[].modifierGroups[].options[].price.measurementUnit` object

- `categories[].items[].modifierGroups[].options[].price.compareAtAmount` object

- `categories[].items[].modifierGroups[].options[].defaultQuantity` integer

- `categories[].items[].modifierGroups[].options[].minQuantity` integer

- `categories[].items[].modifierGroups[].options[].maxQuantity` integer

- `categories[].items[].modifierGroups[].options[].taxCategoryId` string

- `categories[].items[].modifierGroups[].options[].taxRateIds` string\[]

- `categories[].items[].modifierGroups[].options[].dietaryLabels` string\[]

- `categories[].items[].modifierGroups[].options[].allergens` string\[]

- `categories[].items[].modifierGroups[].options[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

- `categories[].items[].modifierGroups[].options[].modifierGroups` object\[]

- `categories[].items[].modifierGroups[].options[].modifierGroups[].groupId` string

- `categories[].items[].modifierGroups[].options[].modifierGroups[].minSelections` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].maxSelections` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].minUniqueSelections` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].maxUniqueSelections` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].freeSelectionCount` integer

- `categories[].items[].modifierGroups[].options[].modifierGroups[].chargeKeptDefaults` boolean

- `categories[].items[].modifierGroups[].options[].modifierGroups[].allowedQuantities` integer\[]

- `categories[].items[].modifierGroups[].options[].modifierGroups[].optionDefaults` object\[]

- `categories[].items[].modifierGroups[].options[].modifierGroups[].externalId` any

- `categories[].items[].modifierGroups[].options[].modifierGroups[].name` any

- `categories[].items[].modifierGroups[].options[].modifierGroups[].options` any

- `categories[].items[].modifierGroups[].options[].modifierGroups[].id` string

- `categories[].items[].modifierGroups[].options[].modifierGroups[].inputType` string

  One of `options`, `text`.

- `categories[].items[].modifierGroups[].options[].modifierGroups[].textMaxLength` integer

- `categories[].items[].modifierGroups[].textMaxLength` integer

- `categories[].items[].taxCategoryId` string

- `categories[].items[].taxRateIds` string\[]

- `categories[].items[].feeIds` string\[]

- `categories[].items[].dietaryLabels` string\[]

- `categories[].items[].allergens` string\[]

- `categories[].items[].calorieCount` integer

- `categories[].items[].availability` object

- `categories[].items[].availability.windows` object\[] required

- `categories[].items[].availability.windows[].dayOfWeek` integer required

- `categories[].items[].availability.windows[].startTime` string required

- `categories[].items[].availability.windows[].endTime` string required

- `categories[].items[].stockStatus` string

  One of `in_stock`, `out_of_stock`, `low_stock`.

### Errors

- `400` Bad request DeveloperApiBadRequest

- `401` Unauthorized DeveloperApiUnauthorized

- `403` Forbidden DeveloperApiForbidden

- `404` Not found DeveloperApiNotFound

- `429` Too many requests DeveloperApiRateLimited

Every error body names the error in `_tag`, explains it in `message`, and says where to report it in `feedback`. See [Errors](https://docs.maple.inc/developer-api/concepts/errors.md).

A `429` also sends `Retry-After`: Seconds to wait before retrying; also returned as retry\_after in the body.

Publish location menu

```sh
curl "$MAPLE_BASE/locations/str_123/menu" \
  -H "Authorization: Bearer $MAPLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"currency":"USD","categories":[{"externalId":"string","name":"string","items":[{"externalId":"string","name":"string","variations":[{"externalId":"string","name":"string","price":{"amount":{"amountMinor":null,"currency":null},"priceType":"fixed","taxInclusive":true,"currencyPrices":[null],"openBounds":{"min":null,"max":null,"presets":null},"bulkTiers":[null],"measurementUnit":{"unit":null},"compareAtAmount":{"amountMinor":null,"currency":null}}}]}]}]}'
```

```python
import os
import requests


r = requests.post(
    f"{os.environ['MAPLE_BASE']}/locations/str_123/menu",
    headers={"Authorization": f"Bearer {os.environ['MAPLE_KEY']}"},
    json={
        "currency": "USD",
        "categories": [
            {
                "externalId": "string",
                "name": "string",
                "items": [
                    {
                        "externalId": "string",
                        "name": "string",
                        "variations": [
                            {
                                "externalId": "string",
                                "name": "string",
                                "price": {
                                    "amount": {
                                        "amountMinor": None,
                                        "currency": None,
                                    },
                                    "priceType": "fixed",
                                    "taxInclusive": True,
                                    "currencyPrices": [
                                        None,
                                    ],
                                    "openBounds": {
                                        "min": None,
                                        "max": None,
                                        "presets": None,
                                    },
                                    "bulkTiers": [
                                        None,
                                    ],
                                    "measurementUnit": {
                                        "unit": None,
                                    },
                                    "compareAtAmount": {
                                        "amountMinor": None,
                                        "currency": None,
                                    },
                                },
                            },
                        ],
                    },
                ],
            },
        ],
    },
    timeout=30,
)
r.raise_for_status()
print(r.json())
```

```js
const res = await fetch(`${process.env.MAPLE_BASE}/locations/str_123/menu`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MAPLE_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "currency": "USD",
    "categories": [
      {
        "externalId": "string",
        "name": "string",
        "items": [
          {
            "externalId": "string",
            "name": "string",
            "variations": [
              {
                "externalId": "string",
                "name": "string",
                "price": {
                  "amount": {
                    "amountMinor": null,
                    "currency": null
                  },
                  "priceType": "fixed",
                  "taxInclusive": true,
                  "currencyPrices": [
                    null
                  ],
                  "openBounds": {
                    "min": null,
                    "max": null,
                    "presets": null
                  },
                  "bulkTiers": [
                    null
                  ],
                  "measurementUnit": {
                    "unit": null
                  },
                  "compareAtAmount": {
                    "amountMinor": null,
                    "currency": null
                  }
                }
              }
            ]
          }
        ]
      }
    ]
  }),
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(await res.json());
```

```json
{
  "catalogId": "string",
  "storePublicId": "string",
  "versionId": "string",
  "currency": "USD",
  "locale": "string",
  "timezone": "string",
  "currencies": [
    {
      "currency": "USD",
      "exponent": 1,
      "cashRoundingMinor": 1,
      "roundingMode": "half_up"
    }
  ],
  "taxCategories": [
    {
      "id": "string",
      "externalId": "string",
      "name": "string"
    }
  ],
  "taxRates": [
    {
      "id": "string",
      "externalId": "string",
      "name": "string",
      "taxCategoryId": "string",
      "method": "percentage",
      "percentage": 1.5,
      "flatAmount": {
        "amountMinor": 1,
        "currency": "USD"
      },
      "brackets": [
        {
          "from": {
            "amountMinor": 1,
            "currency": "USD"
          },
          "to": {
            "amountMinor": 1,
            "currency": "USD"
          },
          "tax": {
            "amountMinor": 1,
            "currency": "USD"
          }
        }
      ],
      "base": "price",
      "inclusion": "exclusive",
      "compoundOnTaxRateIds": [
        "string"
      ],
      "tenderExemptions": [
        "ebt"
      ],
      "condition": {
        "minPrice": {
          "amountMinor": 1,
          "currency": "USD"
        },
        "maxPrice": {
          "amountMinor": 1,
          "currency": "USD"
        },
        "jurisdiction": "string",
        "attributes": [
          {
            "key": "string",
            "value": "string"
          }
        ]
      },
      "hiddenFromCustomer": true
    }
  ],
  "fees": [
    {
      "id": "string",
      "externalId": "string",
      "name": "string",
      "feeType": "delivery",
      "calculation": {
        "base": "flat",
        "amount": {
          "amountMinor": 1,
          "currency": "USD"
        },
        "percentage": 1.5,
        "eligibleProductSetId": "string",
        "excludedProductSetIds": [
          "string"
        ]
      },
      "taxCategoryId": "string",
      "refundable": true,
      "autoApply": {
        "byGuestCountGte": 1,
        "byFulfillmentMode": [
          "dine_in"
        ]
      },
      "containers": [
        {
          "containerSizeMl": 1.5,
          "amount": {
            "amountMinor": 1,
            "currency": "USD"
          }
        }
      ]
    }
  ],
  "productSets": [
    {
      "id": "string",
      "externalId": "string",
      "name": "string",
      "itemIdsAny": [
        "string"
      ],
      "itemIdsAll": [
        "string"
      ],
      "allProducts": true,
      "quantityExact": 1,
      "quantityMin": 1,
      "quantityMax": 1
    }
  ],
  "discounts": [
    {
      "id": "string",
      "externalId": "string",
      "name": "string",
      "benefitType": "percentage",
      "amount": {
        "amountMinor": 1,
        "currency": "USD"
      },
      "percentage": 1.5,
      "maximumAmount": {
        "amountMinor": 1,
        "currency": "USD"
      },
      "benefitTargetProductSetId": "string",
      "lineSelection": "least_expensive",
      "bxgy": {
        "buyProductSetId": "string",
        "buyQuantity": 1,
        "getProductSetId": "string",
        "getQuantity": 1,
        "getBenefit": "free",
        "getBenefitAmount": {
          "amountMinor": 1,
          "currency": "USD"
        },
        "getBenefitPercentage": 1.5,
        "customerChoosesReward": true,
        "excludeStrategy": "least_expensive"
      },
      "freeFeeTargets": [
        "delivery"
      ],
      "modifiesTaxBasis": true
    }
  ],
  "promotions": [
    {
      "id": "string",
      "externalId": "string",
      "name": "string",
      "discountId": "string",
      "applicationMode": "automatic",
      "eligibility": {
        "minimumOrderSubtotal": {
          "amountMinor": 1,
          "currency": "USD"
        },
        "matchProductSetId": "string",
        "excludeProductSetId": "string"
      },
      "availability": {
        "windows": [
          {
            "dayOfWeek": 1,
            "startTime": "string",
            "endTime": "string"
          }
        ]
      },
      "validFrom": "string",
      "validUntil": "string",
      "stacking": {
        "mode": "exclusive",
        "priority": 1
      },
      "redemption": {
        "maxUsesTotal": 1,
        "maxUsesPerCustomer": 1
      }
    }
  ],
  "coupons": [
    {
      "id": "string",
      "externalId": "string",
      "code": "string",
      "promotionId": "string",
      "maxRedemptions": 1,
      "perCustomerLimit": 1,
      "expiresAt": "string"
    }
  ],
  "modifierGroups": [
    {
      "id": "string",
      "externalId": "string",
      "name": "string",
      "inputType": "options",
      "minSelections": 1,
      "maxSelections": 1,
      "minUniqueSelections": 1,
      "maxUniqueSelections": 1,
      "freeSelectionCount": 1,
      "chargeKeptDefaults": true,
      "allowedQuantities": [
        1
      ],
      "options": [
        {
          "id": "string",
          "externalId": "string",
          "name": "string",
          "price": {
            "amount": {
              "amountMinor": 1,
              "currency": "USD"
            },
            "priceType": "fixed",
            "taxInclusive": true,
            "currencyPrices": [
              {
                "amount": {
                  "amountMinor": null,
                  "currency": null
                },
                "taxInclusive": true
              }
            ],
            "openBounds": {
              "min": {
                "amountMinor": 1,
                "currency": "USD"
              },
              "max": {
                "amountMinor": 1,
                "currency": "USD"
              },
              "presets": [
                {
                  "amountMinor": null,
                  "currency": null
                }
              ]
            },
            "bulkTiers": [
              {
                "minQuantity": 1,
                "unitPrice": {
                  "amountMinor": null,
                  "currency": null
                }
              }
            ],
            "measurementUnit": {
              "unit": "string",
              "precision": 1
            },
            "compareAtAmount": {
              "amountMinor": 1,
              "currency": "USD"
            }
          },
          "defaultQuantity": 1,
          "minQuantity": 1,
          "maxQuantity": 1,
          "taxCategoryId": "string",
          "taxRateIds": [
            "string"
          ],
          "dietaryLabels": [
            "string"
          ],
          "allergens": [
            "string"
          ],
          "stockStatus": "in_stock",
          "modifierGroups": [
            {
              "groupId": "string",
              "minSelections": 1,
              "maxSelections": 1,
              "minUniqueSelections": 1,
              "maxUniqueSelections": 1,
              "freeSelectionCount": 1,
              "chargeKeptDefaults": true,
              "allowedQuantities": [
                null
              ],
              "optionDefaults": [
                null
              ],
              "externalId": {},
              "name": {},
              "options": {}
            }
          ]
        }
      ],
      "textMaxLength": 1,
      "groupId": {}
    }
  ],
  "categories": [
    {
      "id": "string",
      "externalId": "string",
      "name": "string",
      "availability": {
        "windows": [
          {
            "dayOfWeek": 1,
            "startTime": "string",
            "endTime": "string"
          }
        ]
      },
      "items": [
        {
          "id": "string",
          "externalId": "string",
          "name": "string",
          "description": "string",
          "variations": [
            {
              "id": "string",
              "externalId": "string",
              "name": "string",
              "price": {
                "amount": {
                  "amountMinor": null,
                  "currency": null
                },
                "priceType": "fixed",
                "taxInclusive": true,
                "currencyPrices": [
                  null
                ],
                "openBounds": {
                  "min": null,
                  "max": null,
                  "presets": null
                },
                "bulkTiers": [
                  null
                ],
                "measurementUnit": {
                  "unit": null,
                  "precision": null
                },
                "compareAtAmount": {
                  "amountMinor": null,
                  "currency": null
                }
              },
              "sku": "string",
              "barcodes": [
                "string"
              ],
              "modifierGroups": [
                null
              ],
              "dietaryLabels": [
                "string"
              ],
              "allergens": [
                "string"
              ],
              "calorieCount": 1,
              "stockStatus": "in_stock"
            }
          ],
          "modifierGroups": [
            {
              "groupId": "string",
              "minSelections": 1,
              "maxSelections": 1,
              "minUniqueSelections": 1,
              "maxUniqueSelections": 1,
              "freeSelectionCount": 1,
              "chargeKeptDefaults": true,
              "allowedQuantities": [
                null
              ],
              "optionDefaults": [
                null
              ],
              "externalId": {},
              "name": {},
              "options": {}
            }
          ],
          "taxCategoryId": "string",
          "taxRateIds": [
            "string"
          ],
          "feeIds": [
            "string"
          ],
          "dietaryLabels": [
            "string"
          ],
          "allergens": [
            "string"
          ],
          "calorieCount": 1,
          "availability": {
            "windows": [
              {
                "dayOfWeek": 1,
                "startTime": "string",
                "endTime": "string"
              }
            ]
          },
          "stockStatus": "in_stock"
        }
      ]
    }
  ]
}
```

```json
{
  "_tag": "DeveloperApiBadRequest",
  "code": "string",
  "message": "string",
  "feedback": "string"
}
```
