---
title: Products
slug: devdocs/products
docTags: 
createdAt: 2026-10-22T08:35:59.048Z
---

Use `products.products` to read the catalog of products and services.

**Query**

```graphql
query GetProducts($since: DateTime, $first: Int, $after: String) {
  products {
    products(lastModifiedOnGreaterThen: $since, first: $first, after: $after) {
      totalCount
      pageInfo {
        hasNextPage
        endCursor
      }
      items {
        key
        name
        code
        barCode
        externalCode
        cNC
        productType
        createdOn
        lastModifiedOn
        productCategory { key id name externalCode }
        measureUnit { key name symbol externalCode eInvoiceCode parentRatio }
      }
    }
  }
}
```

**Variables**

```json
{
  "since": "2026-10-01T00:00:00",
  "first": 30,
  "after": null
}
```

**cURL**

```bash
curl --location 'https://sandbox.expressoft.eu/connect/api/interopgql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{"query": "query GetProducts($since: DateTime, $first: Int, $after: String) { products { products(lastModifiedOnGreaterThen: $since, first: $first, after: $after) { totalCount pageInfo { hasNextPage endCursor } items { key name code barCode externalCode cNC productType createdOn lastModifiedOn productCategory { key id name externalCode } measureUnit { key name symbol externalCode eInvoiceCode parentRatio } } } } }", "variables": {"since": "2026-10-01T00:00:00", "first": 30, "after": null}}'
```

**Response**

```json
{
  "data": {
    "products": {
      "products": {
        "totalCount": 1,
        "pageInfo": {
          "hasNextPage": false,
          "endCursor": "MQ=="
        },
        "items": [
          {
            "key": "00000000-0000-0000-0000-000000000003",
            "name": "Flour 1 kg",
            "code": "P001",
            "barCode": "5940000000001",
            "externalCode": "ERP-001",
            "cNC": "11010000",
            "productType": "Product",
            "createdOn": "2026-01-10T09:00:00",
            "lastModifiedOn": "2026-10-01T12:30:00",
            "productCategory": {
              "key": "00000000-0000-0000-0000-000000000012",
              "id": 5,
              "name": "Raw materials",
              "externalCode": "301"
            },
            "measureUnit": {
              "key": "00000000-0000-0000-0000-000000000013",
              "name": "Kilogram",
              "symbol": "kg",
              "externalCode": "KGM",
              "eInvoiceCode": "KGM",
              "parentRatio": 1.0
            }
          }
        ]
      }
    }
  }
}
```

`lastModifiedOnGreaterThen` returns only the products created or changed after a date. Use it to sync the catalog step by step: keep the date of your last sync and send it next time.

`productType` is `Product`, `Service`, `Recipe`, `Package`, `OpenItem`, `AdvancePay`, `GiftCard`, `Transportation`, `ServiceCharge`, `Pack`, `Tax`.

`productCategory.parentProductCategory(level)` returns the parent category at a given level, and `externalCode(inherit: true)` takes the code of the parent when the category has none.
