# ProductConnection A connection to a list of Product items. ## Connection Structure ```graphql type ProductConnection { edges: [ProductEdge] nodes: [Product] pageInfo: PageInfo totalCount: Int filters: [Filter] } ``` ## Pagination Arguments | Argument | Type | Description | |----------|------|-------------| | first | Int | Returns the first n items from the list | | last | Int | Returns the last n items from the list | | before | String | Returns items before the specified cursor | | after | String | Returns items after the specified cursor | ## PageInfo Structure The `pageInfo` object contains pagination metadata about the connection: - **hasNextPage** (Boolean): Indicates whether there are more items after the current page - **hasPreviousPage** (Boolean): Indicates whether there are items before the current page - **startCursor** (String): The cursor of the first item in the current page - **endCursor** (String): The cursor of the last item in the current page ## Example ```graphql query { products(first: 10, after: "Y3Vyc29yOjEw") { edges { node { id name } cursor } nodes { id name } pageInfo { hasNextPage hasPreviousPage startCursor endCursor } totalCount filters { id name values { id label } } } } ``` ## Edge Type The `ProductEdge` type represents a single product in the connection. Each edge contains: - **node**: The Product object containing product details - **cursor**: An opaque string cursor for pagination, used with `before` and `after` arguments ## Related Types - [ProductEdge](/reference/storefront/v1/connections/product-edge) - [Product](/reference/storefront/v1/objects/product) - [PageInfo](/reference/storefront/v1/objects/page-info) - [Filter](/reference/storefront/v1/objects/filter)