# Cloud Vision API . projects . locations . products

## Instance Methods

Returns the referenceImages Resource.

Creates and returns a new product resource.

Permanently deletes a product and its reference images.

Gets information associated with a Product.

Lists products in an unspecified order.

Retrieves the next page of results.

Makes changes to a Product resource.

Asynchronous API to delete all Products in a ProductSet or all Products

### Method Details

`create(parent, body=None, productId=None, x__xgafv=None)`

    Creates and returns a new product resource.

    Possible errors:

    * Returns INVALID_ARGUMENT if display_name is missing or longer than 4096
      characters.
    * Returns INVALID_ARGUMENT if description is longer than 4096 characters.
    * Returns INVALID_ARGUMENT if product_category is missing or invalid.

    Args:
      parent: string, Required. The project in which the Product should be created.

    Format is
    `projects/PROJECT_ID/locations/LOC_ID`. (required)
      body: object, The request body.
        The object takes the form of:

    { # A Product contains ReferenceImages.
      "displayName": "A String", # The user-provided name for this Product. Must not be empty. Must be at most
          # 4096 characters long.
      "name": "A String", # The resource name of the product.
          #
          # Format is:
          # `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
          #
          # This field is ignored when creating a product.
      "productLabels": [ # Key-value pairs that can be attached to a product. At query time,
          # constraints can be specified based on the product_labels.
          #
          # Note that integer values can be provided as strings, e.g. "1199". Only
          # strings with integer values can match a range-based restriction which is
          # to be supported soon.
          #
          # Multiple values can be assigned to the same key. One product may have up to
          # 500 product_labels.
          #
          # Notice that the total number of distinct product_labels over all products
          # in one ProductSet cannot exceed 1M, otherwise the product search pipeline
          # will refuse to work for that ProductSet.
        { # A product label represented as a key-value pair.
          "key": "A String", # The key of the label attached to the product. Cannot be empty and cannot
              # exceed 128 bytes.
          "value": "A String", # The value of the label attached to the product. Cannot be empty and
              # cannot exceed 128 bytes.
        },
      ],
      "description": "A String", # User-provided metadata to be stored with this product. Must be at most 4096
          # characters long.
      "productCategory": "A String", # Immutable. The category for the product identified by the reference image. This should
          # be either "homegoods-v2", "apparel-v2", or "toys-v2". The legacy categories
          # "homegoods", "apparel", and "toys" are still supported, but these should
          # not be used for new products.
    }

      productId: string, A user-supplied resource id for this Product. If set, the server will
    attempt to use this value as the resource id. If it is already in use, an
    error is returned with code ALREADY_EXISTS. Must be at most 128 characters
    long. It cannot contain the character `/`.
      x__xgafv: string, V1 error format.
        Allowed values
          1 - v1 error format
          2 - v2 error format

    Returns:
      An object of the form:

        { # A Product contains ReferenceImages.
        "displayName": "A String", # The user-provided name for this Product. Must not be empty. Must be at most
            # 4096 characters long.
        "name": "A String", # The resource name of the product.
            #
            # Format is:
            # `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
            #
            # This field is ignored when creating a product.
        "productLabels": [ # Key-value pairs that can be attached to a product. At query time,
            # constraints can be specified based on the product_labels.
            #
            # Note that integer values can be provided as strings, e.g. "1199". Only
            # strings with integer values can match a range-based restriction which is
            # to be supported soon.
            #
            # Multiple values can be assigned to the same key. One product may have up to
            # 500 product_labels.
            #
            # Notice that the total number of distinct product_labels over all products
            # in one ProductSet cannot exceed 1M, otherwise the product search pipeline
            # will refuse to work for that ProductSet.
          { # A product label represented as a key-value pair.
            "key": "A String", # The key of the label attached to the product. Cannot be empty and cannot
                # exceed 128 bytes.
            "value": "A String", # The value of the label attached to the product. Cannot be empty and
                # cannot exceed 128 bytes.
          },
        ],
        "description": "A String", # User-provided metadata to be stored with this product. Must be at most 4096
            # characters long.
        "productCategory": "A String", # Immutable. The category for the product identified by the reference image. This should
            # be either "homegoods-v2", "apparel-v2", or "toys-v2". The legacy categories
            # "homegoods", "apparel", and "toys" are still supported, but these should
            # not be used for new products.
      }

`delete(name, x__xgafv=None)`

    Permanently deletes a product and its reference images.

    Metadata of the product and all its images will be deleted right away, but
    search queries against ProductSets containing the product may still work
    until all related caches are refreshed.

    Args:
      name: string, Required. Resource name of product to delete.

    Format is:
    `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID` (required)
      x__xgafv: string, V1 error format.
        Allowed values
          1 - v1 error format
          2 - v2 error format

    Returns:
      An object of the form:

        { # A generic empty message that you can re-use to avoid defining duplicated
          # empty messages in your APIs. A typical example is to use it as the request
          # or the response type of an API method. For instance:
          #
          #     service Foo {
          #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
          #     }
          #
          # The JSON representation for `Empty` is empty JSON object `{}`.
      }

`get(name, x__xgafv=None)`

    Gets information associated with a Product.

    Possible errors:

    * Returns NOT_FOUND if the Product does not exist.

    Args:
      name: string, Required. Resource name of the Product to get.

    Format is:
    `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID` (required)
      x__xgafv: string, V1 error format.
        Allowed values
          1 - v1 error format
          2 - v2 error format

    Returns:
      An object of the form:

        { # A Product contains ReferenceImages.
        "displayName": "A String", # The user-provided name for this Product. Must not be empty. Must be at most
            # 4096 characters long.
        "name": "A String", # The resource name of the product.
            #
            # Format is:
            # `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
            #
            # This field is ignored when creating a product.
        "productLabels": [ # Key-value pairs that can be attached to a product. At query time,
            # constraints can be specified based on the product_labels.
            #
            # Note that integer values can be provided as strings, e.g. "1199". Only
            # strings with integer values can match a range-based restriction which is
            # to be supported soon.
            #
            # Multiple values can be assigned to the same key. One product may have up to
            # 500 product_labels.
            #
            # Notice that the total number of distinct product_labels over all products
            # in one ProductSet cannot exceed 1M, otherwise the product search pipeline
            # will refuse to work for that ProductSet.
          { # A product label represented as a key-value pair.
            "key": "A String", # The key of the label attached to the product. Cannot be empty and cannot
                # exceed 128 bytes.
            "value": "A String", # The value of the label attached to the product. Cannot be empty and
                # cannot exceed 128 bytes.
          },
        ],
        "description": "A String", # User-provided metadata to be stored with this product. Must be at most 4096
            # characters long.
        "productCategory": "A String", # Immutable. The category for the product identified by the reference image. This should
            # be either "homegoods-v2", "apparel-v2", or "toys-v2". The legacy categories
            # "homegoods", "apparel", and "toys" are still supported, but these should
            # not be used for new products.
      }

`list(parent, pageToken=None, pageSize=None, x__xgafv=None)`

    Lists products in an unspecified order.

    Possible errors:

    * Returns INVALID_ARGUMENT if page_size is greater than 100 or less than 1.

    Args:
      parent: string, Required. The project OR ProductSet from which Products should be listed.

    Format:
    `projects/PROJECT_ID/locations/LOC_ID` (required)
      pageToken: string, The next_page_token returned from a previous List request, if any.
      pageSize: integer, The maximum number of items to return. Default 10, maximum 100.
      x__xgafv: string, V1 error format.
        Allowed values
          1 - v1 error format
          2 - v2 error format

    Returns:
      An object of the form:

        { # Response message for the `ListProducts` method.
        "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no more
            # results in the list.
        "products": [ # List of products.
          { # A Product contains ReferenceImages.
            "displayName": "A String", # The user-provided name for this Product. Must not be empty. Must be at most
                # 4096 characters long.
            "name": "A String", # The resource name of the product.
                #
                # Format is:
                # `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
                #
                # This field is ignored when creating a product.
            "productLabels": [ # Key-value pairs that can be attached to a product. At query time,
                # constraints can be specified based on the product_labels.
                #
                # Note that integer values can be provided as strings, e.g. "1199". Only
                # strings with integer values can match a range-based restriction which is
                # to be supported soon.
                #
                # Multiple values can be assigned to the same key. One product may have up to
                # 500 product_labels.
                #
                # Notice that the total number of distinct product_labels over all products
                # in one ProductSet cannot exceed 1M, otherwise the product search pipeline
                # will refuse to work for that ProductSet.
              { # A product label represented as a key-value pair.
                "key": "A String", # The key of the label attached to the product. Cannot be empty and cannot
                    # exceed 128 bytes.
                "value": "A String", # The value of the label attached to the product. Cannot be empty and
                    # cannot exceed 128 bytes.
              },
            ],
            "description": "A String", # User-provided metadata to be stored with this product. Must be at most 4096
                # characters long.
            "productCategory": "A String", # Immutable. The category for the product identified by the reference image. This should
                # be either "homegoods-v2", "apparel-v2", or "toys-v2". The legacy categories
                # "homegoods", "apparel", and "toys" are still supported, but these should
                # not be used for new products.
          },
        ],
      }

`list_next(previous_request, previous_response)`

    Retrieves the next page of results.

    Args:
      previous_request: The request for the previous page. (required)
      previous_response: The response from the request for the previous page. (required)

    Returns:
      A request object that you can call 'execute()' on to request the next
      page. Returns None if there are no more items in the collection.

`patch(name, body=None, updateMask=None, x__xgafv=None)`

    Makes changes to a Product resource.
    Only the `display_name`, `description`, and `labels` fields can be updated
    right now.

    If labels are updated, the change will not be reflected in queries until
    the next index time.

    Possible errors:

    * Returns NOT_FOUND if the Product does not exist.
    * Returns INVALID_ARGUMENT if display_name is present in update_mask but is
      missing from the request or longer than 4096 characters.
    * Returns INVALID_ARGUMENT if description is present in update_mask but is
      longer than 4096 characters.
    * Returns INVALID_ARGUMENT if product_category is present in update_mask.

    Args:
      name: string, The resource name of the product.

    Format is:
    `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.

    This field is ignored when creating a product. (required)
      body: object, The request body.
        The object takes the form of:

    { # A Product contains ReferenceImages.
      "displayName": "A String", # The user-provided name for this Product. Must not be empty. Must be at most
          # 4096 characters long.
      "name": "A String", # The resource name of the product.
          #
          # Format is:
          # `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
          #
          # This field is ignored when creating a product.
      "productLabels": [ # Key-value pairs that can be attached to a product. At query time,
          # constraints can be specified based on the product_labels.
          #
          # Note that integer values can be provided as strings, e.g. "1199". Only
          # strings with integer values can match a range-based restriction which is
          # to be supported soon.
          #
          # Multiple values can be assigned to the same key. One product may have up to
          # 500 product_labels.
          #
          # Notice that the total number of distinct product_labels over all products
          # in one ProductSet cannot exceed 1M, otherwise the product search pipeline
          # will refuse to work for that ProductSet.
        { # A product label represented as a key-value pair.
          "key": "A String", # The key of the label attached to the product. Cannot be empty and cannot
              # exceed 128 bytes.
          "value": "A String", # The value of the label attached to the product. Cannot be empty and
              # cannot exceed 128 bytes.
        },
      ],
      "description": "A String", # User-provided metadata to be stored with this product. Must be at most 4096
          # characters long.
      "productCategory": "A String", # Immutable. The category for the product identified by the reference image. This should
          # be either "homegoods-v2", "apparel-v2", or "toys-v2". The legacy categories
          # "homegoods", "apparel", and "toys" are still supported, but these should
          # not be used for new products.
    }

      updateMask: string, The FieldMask that specifies which fields
    to update.
    If update_mask isn't specified, all mutable fields are to be updated.
    Valid mask paths include `product_labels`, `display_name`, and
    `description`.
      x__xgafv: string, V1 error format.
        Allowed values
          1 - v1 error format
          2 - v2 error format

    Returns:
      An object of the form:

        { # A Product contains ReferenceImages.
        "displayName": "A String", # The user-provided name for this Product. Must not be empty. Must be at most
            # 4096 characters long.
        "name": "A String", # The resource name of the product.
            #
            # Format is:
            # `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
            #
            # This field is ignored when creating a product.
        "productLabels": [ # Key-value pairs that can be attached to a product. At query time,
            # constraints can be specified based on the product_labels.
            #
            # Note that integer values can be provided as strings, e.g. "1199". Only
            # strings with integer values can match a range-based restriction which is
            # to be supported soon.
            #
            # Multiple values can be assigned to the same key. One product may have up to
            # 500 product_labels.
            #
            # Notice that the total number of distinct product_labels over all products
            # in one ProductSet cannot exceed 1M, otherwise the product search pipeline
            # will refuse to work for that ProductSet.
          { # A product label represented as a key-value pair.
            "key": "A String", # The key of the label attached to the product. Cannot be empty and cannot
                # exceed 128 bytes.
            "value": "A String", # The value of the label attached to the product. Cannot be empty and
                # cannot exceed 128 bytes.
          },
        ],
        "description": "A String", # User-provided metadata to be stored with this product. Must be at most 4096
            # characters long.
        "productCategory": "A String", # Immutable. The category for the product identified by the reference image. This should
            # be either "homegoods-v2", "apparel-v2", or "toys-v2". The legacy categories
            # "homegoods", "apparel", and "toys" are still supported, but these should
            # not be used for new products.
      }

`purge(parent, body=None, x__xgafv=None)`

    Asynchronous API to delete all Products in a ProductSet or all Products
    that are in no ProductSet.

    If a Product is a member of the specified ProductSet in addition to other
    ProductSets, the Product will still be deleted.

    It is recommended to not delete the specified ProductSet until after this
    operation has completed. It is also recommended to not add any of the
    Products involved in the batch delete to a new ProductSet while this
    operation is running because those Products may still end up deleted.

    It's not possible to undo the PurgeProducts operation. Therefore, it is
    recommended to keep the csv files used in ImportProductSets (if that was
    how you originally built the Product Set) before starting PurgeProducts, in
    case you need to re-import the data after deletion.

    If the plan is to purge all of the Products from a ProductSet and then
    re-use the empty ProductSet to re-import new Products into the empty
    ProductSet, you must wait until the PurgeProducts operation has finished
    for that ProductSet.

    The google.longrunning.Operation API can be used to keep track of the
    progress and results of the request.
    `Operation.metadata` contains `BatchOperationMetadata`. (progress)

    Args:
      parent: string, Required. The project and location in which the Products should be deleted.

    Format is `projects/PROJECT_ID/locations/LOC_ID`. (required)
      body: object, The request body.
        The object takes the form of:

    { # Request message for the `PurgeProducts` method.
        "force": True or False, # The default value is false. Override this value to true to actually perform
            # the purge.
        "deleteOrphanProducts": True or False, # If delete_orphan_products is true, all Products that are not in any
            # ProductSet will be deleted.
        "productSetPurgeConfig": { # Config to control which ProductSet contains the Products to be deleted. # Specify which ProductSet contains the Products to be deleted.
          "productSetId": "A String", # The ProductSet that contains the Products to delete. If a Product is a
              # member of product_set_id in addition to other ProductSets, the Product will
              # still be deleted.
        },
      }

      x__xgafv: string, V1 error format.
        Allowed values
          1 - v1 error format
          2 - v2 error format

    Returns:
      An object of the form:

        { # This resource represents a long-running operation that is the result of a
          # network API call.
        "done": True or False, # If the value is `false`, it means the operation is still in progress.
            # If `true`, the operation is completed, and either `error` or `response` is
            # available.
        "name": "A String", # The server-assigned name, which is only unique within the same service that
            # originally returns it. If you use the default HTTP mapping, the
            # `name` should be a resource name ending with `operations/{unique_id}`.
        "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
          "details": [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
          ],
          "message": "A String", # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
        },
        "response": { # The normal response of the operation in case of success.  If the original
            # method returns no data on success, such as `Delete`, the response is
            # `google.protobuf.Empty`.  If the original method is standard
            # `Get`/`Create`/`Update`, the response should be the resource.  For other
            # methods, the response should have the type `XxxResponse`, where `Xxx`
            # is the original method name.  For example, if the original method name
            # is `TakeSnapshot()`, the inferred response type is
            # `TakeSnapshotResponse`.
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
        "metadata": { # Service-specific metadata associated with the operation.  It typically
            # contains progress information and common metadata such as create time.
            # Some services might not provide such metadata.  Any method that returns a
            # long-running operation should document the metadata type, if any.
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      }