Clarification on Catalog API sold_out and track_inventory behavior for variation location overrides

Hi Square Developer Community,

I am looking for clarification on the intended Square Catalog API behavior for variation-level location_overrides, specifically around sold_out and track_inventory.

We are seeing some variation location overrides returned like this:

{
  "location_id": "LOCATION_ID_EXAMPLE",
  "sold_out": true
}

In this example, sold_out is present, but track_inventory is not included.

We are trying to understand the correct way for an ordering integration to interpret this response.

Could someone clarify the expected behavior?

  1. If Square sends sold_out: true for a variation at a specific location, should that variation be treated as unavailable for ordering at that location, even if track_inventory is missing or false?

  2. Is track_inventory only meant to indicate whether inventory counts are being tracked, or should it also control whether sold_out is honored?

  3. If sold_out: true is present but track_inventory is omitted or null, should integrations still treat the variation as sold out?

  4. For an item with multiple variations, if only one variation has sold_out: true, should only that variation be unavailable while the other variations remain available?

  5. Are there any cases where Square would return sold_out: true but still expect an ordering integration to allow that variation to be purchased?

We want to make sure our ordering behavior matches Square’s intended API behavior for location-specific variation availability.

Any official guidance or documentation links would be appreciated.

Thank you.

Hi! Great question. Yes, if sold_out: true is present for a variation at a specific location, your integration should treat that variation as unavailable for ordering at that location, regardless of whether track_inventory is included. The sold_out flag is the definitive signal for ordering availability, while track_inventory simply indicates whether inventory counts are being actively tracked. Most restaurants exclusively use the first method, and just toggle items as sold out on the POS without enabling inventory tracking. That’s why you’ll often see sold_out: true without track_inventory present.

This page covers the intended behavior in more detail: https://developer.squareup.com/docs/inventory-api/monitor-sold-out-status-on-item-variation