{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/square/main/json-schema/square-search-catalog-items-request-schema.json",
  "title": "SearchCatalogItemsRequest",
  "description": "Defines the request body for the [SearchCatalogItems](api-endpoint:Catalog-SearchCatalogItems) endpoint.",
  "x-generated": "2026-10-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/square-catalog-api-openapi.yml#/components/schemas/SearchCatalogItemsRequest",
  "type": "object",
  "x-release-status": "PUBLIC",
  "properties": {
    "text_filter": {
      "type": "string",
      "description": "The text filter expression to return items or item variations containing specified text in\nthe `name`, `description`, or `abbreviation` attribute value of an item, or in\nthe `name`, `sku`, or `upc` attribute value of an item variation."
    },
    "category_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The category id query expression to return items containing the specified category IDs."
    },
    "stock_levels": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/SearchCatalogItemsRequestStockLevel"
      },
      "description": "The stock-level query expression to return item variations with the specified stock levels.\nSee [SearchCatalogItemsRequestStockLevel](#type-searchcatalogitemsrequeststocklevel) for possible values"
    },
    "enabled_location_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The enabled-location query expression to return items and item variations having specified enabled locations."
    },
    "cursor": {
      "type": "string",
      "description": "The pagination token, returned in the previous response, used to fetch the next batch of pending results."
    },
    "limit": {
      "type": "integer",
      "description": "The maximum number of results to return per page. The default value is 100.",
      "maximum": 100
    },
    "sort_order": {
      "$ref": "#/$defs/SortOrder",
      "description": "The order to sort the results by item names. The default sort order is ascending (`ASC`).\nSee [SortOrder](#type-sortorder) for possible values"
    },
    "product_types": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/CatalogItemProductType"
      },
      "description": "The product types query expression to return items or item variations having the specified product types."
    },
    "custom_attribute_filters": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/CustomAttributeFilter"
      },
      "description": "The customer-attribute filter to return items or item variations matching the specified\ncustom attribute expressions. A maximum number of 10 custom attribute expressions are supported in\na single call to the [SearchCatalogItems](api-endpoint:Catalog-SearchCatalogItems) endpoint."
    },
    "archived_state": {
      "$ref": "#/$defs/ArchivedState",
      "description": "The query filter to return not archived (`ARCHIVED_STATE_NOT_ARCHIVED`), archived (`ARCHIVED_STATE_ARCHIVED`), or either type (`ARCHIVED_STATE_ALL`) of items."
    }
  },
  "$defs": {
    "ArchivedState": {
      "type": "string",
      "enum": [
        "ARCHIVED_STATE_NOT_ARCHIVED",
        "ARCHIVED_STATE_ARCHIVED",
        "ARCHIVED_STATE_ALL"
      ],
      "x-enum-elements": [
        {
          "name": "ARCHIVED_STATE_NOT_ARCHIVED",
          "description": "Requested items are not archived with the `is_archived` attribute set to `false`."
        },
        {
          "name": "ARCHIVED_STATE_ARCHIVED",
          "description": "Requested items are archived with the `is_archived` attribute set to `true`."
        },
        {
          "name": "ARCHIVED_STATE_ALL",
          "description": "Requested items can be archived or not archived."
        }
      ],
      "description": "Defines the values for the `archived_state` query expression \nused in [SearchCatalogItems](api-endpoint:Catalog-SearchCatalogItems) \nto return the archived, not archived or either type of catalog items.",
      "x-release-status": "PUBLIC"
    },
    "CatalogItemProductType": {
      "type": "string",
      "enum": [
        "REGULAR",
        "GIFT_CARD",
        "APPOINTMENTS_SERVICE",
        "FOOD_AND_BEV",
        "EVENT",
        "DIGITAL",
        "DONATION",
        "LEGACY_SQUARE_ONLINE_SERVICE",
        "LEGACY_SQUARE_ONLINE_MEMBERSHIP"
      ],
      "x-enum-elements": [
        {
          "name": "REGULAR",
          "description": "An ordinary item."
        },
        {
          "name": "GIFT_CARD",
          "description": "A Square gift card."
        },
        {
          "name": "APPOINTMENTS_SERVICE",
          "description": "A service that can be booked using the Square Appointments app."
        },
        {
          "name": "FOOD_AND_BEV",
          "description": "A food or beverage item that can be sold by restaurants and other food venues."
        },
        {
          "name": "EVENT",
          "description": "An event which tickets can be sold for, including location, address, and times."
        },
        {
          "name": "DIGITAL",
          "description": "A digital item like an ebook or song."
        },
        {
          "name": "DONATION",
          "description": "A donation which site visitors can send for any cause."
        },
        {
          "name": "LEGACY_SQUARE_ONLINE_SERVICE",
          "description": "A legacy Square Online service that is manually fulfilled. This corresponds to the `Other` item type displayed in the Square Seller Dashboard and Square POS apps."
        },
        {
          "name": "LEGACY_SQUARE_ONLINE_MEMBERSHIP",
          "description": "A legacy Square Online membership that is manually fulfilled. This corresponds to the `Membership` item type displayed in the Square Seller Dashboard and Square POS apps."
        }
      ],
      "description": "The type of a CatalogItem. Connect V2 only allows the creation of `REGULAR` or `APPOINTMENTS_SERVICE` items.",
      "x-release-status": "PUBLIC"
    },
    "CustomAttributeFilter": {
      "type": "object",
      "description": "Supported custom attribute query expressions for calling the\n[SearchCatalogItems](api-endpoint:Catalog-SearchCatalogItems)\nendpoint to search for items or item variations.",
      "x-release-status": "PUBLIC",
      "properties": {
        "custom_attribute_definition_id": {
          "type": [
            "string",
            "null"
          ],
          "description": "A query expression to filter items or item variations by matching their custom attributes'\n`custom_attribute_definition_id` property value against the the specified id.\nExactly one of `custom_attribute_definition_id` or `key` must be specified."
        },
        "key": {
          "type": [
            "string",
            "null"
          ],
          "description": "A query expression to filter items or item variations by matching their custom attributes'\n`key` property value against the specified key.\nExactly one of `custom_attribute_definition_id` or `key` must be specified."
        },
        "string_filter": {
          "type": [
            "string",
            "null"
          ],
          "description": "A query expression to filter items or item variations by matching their custom attributes'\n`string_value`  property value against the specified text.\nExactly one of `string_filter`, `number_filter`, `selection_uids_filter`, or `bool_filter` must be specified."
        },
        "number_filter": {
          "$ref": "#/$defs/Range",
          "description": "A query expression to filter items or item variations with their custom attributes\ncontaining a number value within the specified range.\nExactly one of `string_filter`, `number_filter`, `selection_uids_filter`, or `bool_filter` must be specified."
        },
        "selection_uids_filter": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "A query expression to filter items or item variations by matching  their custom attributes'\n`selection_uid_values` values against the specified selection uids.\nExactly one of `string_filter`, `number_filter`, `selection_uids_filter`, or `bool_filter` must be specified."
        },
        "bool_filter": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "A query expression to filter items or item variations by matching their custom attributes'\n`boolean_value` property values against the specified Boolean expression.\nExactly one of `string_filter`, `number_filter`, `selection_uids_filter`, or `bool_filter` must be specified."
        }
      }
    },
    "Range": {
      "type": "object",
      "description": "The range of a number value between the specified lower and upper bounds.",
      "x-release-status": "PUBLIC",
      "properties": {
        "min": {
          "type": [
            "string",
            "null"
          ],
          "description": "The lower bound of the number range. At least one of `min` or `max` must be specified.\nIf unspecified, the results will have no minimum value."
        },
        "max": {
          "type": [
            "string",
            "null"
          ],
          "description": "The upper bound of the number range. At least one of `min` or `max` must be specified.\nIf unspecified, the results will have no maximum value."
        }
      }
    },
    "SearchCatalogItemsRequestStockLevel": {
      "type": "string",
      "enum": [
        "OUT",
        "LOW"
      ],
      "x-enum-elements": [
        {
          "name": "OUT",
          "description": "The item inventory is empty."
        },
        {
          "name": "LOW",
          "description": "The item inventory is low."
        }
      ],
      "description": "Defines supported stock levels of the item inventory.",
      "x-release-status": "PUBLIC"
    },
    "SortOrder": {
      "type": "string",
      "enum": [
        "DESC",
        "ASC"
      ],
      "x-enum-elements": [
        {
          "name": "DESC",
          "description": "The results are returned in descending (e.g., newest-first or Z-A) order."
        },
        {
          "name": "ASC",
          "description": "The results are returned in ascending (e.g., oldest-first or A-Z) order."
        }
      ],
      "description": "The order (e.g., chronological or alphabetical) in which results from a request are returned.",
      "x-release-status": "PUBLIC"
    }
  }
}