---
title: PMS
slug: devdocs/pms
docTags: 
createdAt: 2026-10-22T08:35:59.235Z
---

PMS is the hotel module. These queries read its invoices, business days and receipts. They are available when your account has the hotel module (`pms.enabled` is `true`).

**Query**

```graphql
query GetPmsProperties {
  pms {
    enabled
    pmsProperties {
      cursor
      pageSize
      totalRecords
      items
    }
  }
}
```

**cURL**

```bash
curl --location 'https://sandbox.expressoft.eu/connect/api/interopgql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{"query": "query GetPmsProperties { pms { enabled pmsProperties { cursor pageSize totalRecords items } } }"}'
```

**Response**

```json
{
  "data": {
    "pms": {
      "enabled": true,
      "pmsProperties": {
        "cursor": 0,
        "pageSize": 10,
        "totalRecords": 1,
        "items": [
          "HOTEL1"
        ]
      }
    }
  }
}
```

Every other query needs a **property code**, one of the `pmsProperties`.

## Paging

The PMS lists don't use cursors. They take a numeric `cursor` and a `pageSize`, and return `cursor`, `pageSize`, `totalRecords` and `items`. Start with `cursor: 0`, and use the `cursor` of the response for the next page, until you have read `totalRecords` items.

## Sale invoices

**Query**

```graphql
query GetPmsSaleInvoices($property: String!, $cursor: Int!, $pageSize: Int!, $dateBegin: DateTime) {
  pms {
    saleInvoiceHeaders(propertyCode: $property, cursor: $cursor, pageSize: $pageSize, dateBegin: $dateBegin) {
      cursor
      pageSize
      totalRecords
      items {
        key
        number
        date
        dueDate
        documentType
        hasFiscalReceipt
        property
        comments
        delegate
        company { name fiscalCode registrationCode }
        customer { name personalIdentificationNumber }
      }
    }
  }
}
```

**Variables**

```json
{
  "property": "HOTEL1",
  "cursor": 0,
  "pageSize": 50,
  "dateBegin": "2026-10-01T00:00:00"
}
```

**cURL**

```bash
curl --location 'https://sandbox.expressoft.eu/connect/api/interopgql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{"query": "query GetPmsSaleInvoices($property: String!, $cursor: Int!, $pageSize: Int!, $dateBegin: DateTime) { pms { saleInvoiceHeaders(propertyCode: $property, cursor: $cursor, pageSize: $pageSize, dateBegin: $dateBegin) { cursor pageSize totalRecords items { key number date dueDate documentType hasFiscalReceipt property comments delegate company { name fiscalCode registrationCode } customer { name personalIdentificationNumber } } } } }", "variables": {"property": "HOTEL1", "cursor": 0, "pageSize": 50, "dateBegin": "2026-10-01T00:00:00"}}'
```

**Response**

```json
{
  "data": {
    "pms": {
      "saleInvoiceHeaders": {
        "cursor": 0,
        "pageSize": 50,
        "totalRecords": 1,
        "items": [
          {
            "key": 501,
            "number": "H-501",
            "date": "2026-10-05T00:00:00",
            "dueDate": null,
            "documentType": "FacturaFiscala",
            "hasFiscalReceipt": false,
            "property": "HOTEL1",
            "comments": "",
            "delegate": "",
            "company": {
              "name": "Example Supplier SRL",
              "fiscalCode": "87654321",
              "registrationCode": "J40/4321/2018"
            },
            "customer": null
          }
        ]
      }
    }
  }
}
```

`nOK: true` returns only the invoices marked as NOK. To read one invoice with its lines, use `saleInvoice`:

**Query**

```graphql
query GetPmsSaleInvoice($property: String!, $id: Int!) {
  pms {
    saleInvoice(propertyCode: $property, id: $id) {
      key
      number
      date
      products {
        code
        name
        quantity
        salePrice
        vatAmount
        vatRate
        amount
        saleAccount
        revenueCenter
      }
      payments {
        code
        name
        amount
        saleAccount
      }
    }
  }
}
```

**Variables**

```json
{
  "property": "HOTEL1",
  "id": 501
}
```

**cURL**

```bash
curl --location 'https://sandbox.expressoft.eu/connect/api/interopgql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{"query": "query GetPmsSaleInvoice($property: String!, $id: Int!) { pms { saleInvoice(propertyCode: $property, id: $id) { key number date products { code name quantity salePrice vatAmount vatRate amount saleAccount revenueCenter } payments { code name amount saleAccount } } } }", "variables": {"property": "HOTEL1", "id": 501}}'
```

**Response**

```json
{
  "data": {
    "pms": {
      "saleInvoice": {
        "key": 501,
        "number": "H-501",
        "date": "2026-10-05T00:00:00",
        "products": [
          {
            "code": "ROOM",
            "name": "Room night",
            "quantity": 2.0,
            "salePrice": 100.0,
            "vatAmount": 42.0,
            "vatRate": 21.0,
            "amount": 200.0,
            "saleAccount": "704",
            "revenueCenter": "Rooms"
          }
        ],
        "payments": [
          {
            "code": "CARD",
            "name": "Card",
            "amount": 242.0,
            "saleAccount": "5121"
          }
        ]
      }
    }
  }
}
```

## Business days

**Query**

```graphql
query GetPmsBusinessDays($property: String!, $date: DateTime!, $pageSize: Int!) {
  pms {
    businessDays(propertyCode: $property, dateBegin: $date, pageSize: $pageSize) {
      cursor
      pageSize
      totalRecords
      items { date }
    }
  }
}
```

**Variables**

```json
{
  "property": "HOTEL1",
  "date": "2026-10-01T00:00:00",
  "pageSize": 31
}
```

**cURL**

```bash
curl --location 'https://sandbox.expressoft.eu/connect/api/interopgql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{"query": "query GetPmsBusinessDays($property: String!, $date: DateTime!, $pageSize: Int!) { pms { businessDays(propertyCode: $property, dateBegin: $date, pageSize: $pageSize) { cursor pageSize totalRecords items { date } } } }", "variables": {"property": "HOTEL1", "date": "2026-10-01T00:00:00", "pageSize": 31}}'
```

**Response**

```json
{
  "data": {
    "pms": {
      "businessDays": {
        "cursor": 0,
        "pageSize": 31,
        "totalRecords": 1,
        "items": [
          {
            "date": "2026-10-05T00:00:00"
          }
        ]
      }
    }
  }
}
```

## Receipts

List the receipt headers of a business day, then read one receipt with `receipt(propertyCode, account, number)`.

**Query**

```graphql
query GetPmsReceipts($property: String!, $day: DateTime!, $pageSize: Int!) {
  pms {
    receiptHeaders(propertyCode: $property, businessDayDate: $day, pageSize: $pageSize) {
      cursor
      pageSize
      totalRecords
      items {
        account
        number
        date
        businessDayDate
        property
      }
    }
  }
}
```

**Variables**

```json
{
  "property": "HOTEL1",
  "day": "2026-10-05T00:00:00",
  "pageSize": 50
}
```

**cURL**

```bash
curl --location 'https://sandbox.expressoft.eu/connect/api/interopgql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{"query": "query GetPmsReceipts($property: String!, $day: DateTime!, $pageSize: Int!) { pms { receiptHeaders(propertyCode: $property, businessDayDate: $day, pageSize: $pageSize) { cursor pageSize totalRecords items { account number date businessDayDate property } } } }", "variables": {"property": "HOTEL1", "day": "2026-10-05T00:00:00", "pageSize": 50}}'
```

**Response**

```json
{
  "data": {
    "pms": {
      "receiptHeaders": {
        "cursor": 0,
        "pageSize": 50,
        "totalRecords": 1,
        "items": [
          {
            "account": "ACC-1",
            "number": 7001,
            "date": "2026-10-05T14:00:00",
            "businessDayDate": "2026-10-05T00:00:00",
            "property": "HOTEL1"
          }
        ]
      }
    }
  }
}
```

