> Documentation index: [Saleor](/llms.txt) · [This section](/api-reference/products/llms.txt)
> Source: https://docs.saleor.io/api-reference/products/queries/product

# product Query

Look up a product by ID.

Requires one of the following permissions to include the unpublished items: MANAGE\_ORDERS MANAGE\_DISCOUNTS MANAGE\_PRODUCTS

```graphql
product(
  id: ID
  slug: String
  slugLanguageCode: LanguageCodeEnum
  externalReference: String
  channel: String
): Product
```

Details

```graphql
type Product implements Node, ObjectWithMetadata, ObjectWithAttributes {
  id: ID!
  privateMetadata: [MetadataItem!]!
  privateMetafield(
    key: String!
  ): String
  privateMetafields(
    keys: [String!]
  ): Metadata
  metadata: [MetadataItem!]!
  metafield(
    key: String!
  ): String
  metafields(
    keys: [String!]
  ): Metadata
  assignedAttribute(
    slug: String!
  ): AssignedAttribute
  assignedAttributes(
    limit: PositiveInt = 100
  ): [AssignedAttribute!]!
  seoTitle: String
  seoDescription: String
  name: String!
  description: JSONString
  productType: ProductType!
  slug: String!
  category: Category
  created: DateTime!
  updatedAt: DateTime!
  chargeTaxes: Boolean! @deprecated
  weight: Weight
  defaultVariant: ProductVariant
  rating: Float @deprecated
  channel: String
  descriptionJson: JSONString @deprecated
  thumbnail(
    size: Int
    format: ThumbnailFormatEnum = ORIGINAL
  ): Image
  pricing(
    address: AddressInput
  ): ProductPricingInfo
  isAvailable(
    address: AddressInput
  ): Boolean
  taxType: TaxType @deprecated
  attribute(
    slug: String!
  ): SelectedAttribute @deprecated
  attributes: [SelectedAttribute!]! @deprecated
  channelListings: [ProductChannelListing!]
  mediaById(
    id: ID!
  ): ProductMedia
  imageById(
    id: ID!
  ): ProductImage @deprecated
  variant(
    id: ID
    sku: String
  ): ProductVariant @deprecated
  variants: [ProductVariant!] @deprecated
  productVariants(
    filter: ProductVariantFilterInput
    where: ProductVariantWhereInput
    sortBy: ProductVariantSortingInput
    before: String
    after: String
    first: Int
    last: Int
  ): ProductVariantCountableConnection
  media(
    sortBy: MediaSortingInput
  ): [ProductMedia!]
  images: [ProductImage!] @deprecated
  collections: [Collection!]
  translation(
    languageCode: LanguageCodeEnum!
  ): ProductTranslation
  availableForPurchase: Date @deprecated
  availableForPurchaseAt: DateTime
  isAvailableForPurchase: Boolean
  taxClass: TaxClass
  externalReference: String
}
```

<a id="arguments"></a>

### Arguments

<a id="id"></a>

#### [`id`](#id) ● [`ID`](/api-reference/miscellaneous/scalars/id.md)

ID of the product.

<a id="slug"></a>

#### [`slug`](#slug) ● [`String`](/api-reference/miscellaneous/scalars/string.md)

Slug of the product.

<a id="slug-language-code"></a>

#### [`slugLanguageCode`](#slug-language-code) ● [`LanguageCodeEnum`](/api-reference/miscellaneous/enums/language-code-enum.md)

Language code of the product slug, omit to use primary slug.

Added in Saleor 3.21

<a id="external-reference"></a>

#### [`externalReference`](#external-reference) ● [`String`](/api-reference/miscellaneous/scalars/string.md)

External ID of the product.

<a id="channel"></a>

#### [`channel`](#channel) ● [`String`](/api-reference/miscellaneous/scalars/string.md)

Slug of a channel for which the data should be returned.

<a id="type"></a>

### Type

<a id="product"></a>

#### [`Product`](/api-reference/products/objects/product.md)

Represents an individual item for sale in the storefront.
