Bookeasy Report API

Bookeasy Report Builder and Trust Accounting reports via a Json API.

Get an API Key

Access to the Bookeasy Report API is a paid subscription service that needs to be activated manually by our Support Team. Please send an email to Our Support Team if you would like this activated and they will guide you through the activation process.

Once activated you can obtain the API Key by loging into the Bookeasy Console (Staff Console, Room Manager or Tour Manager) and then visit the Reporting page. On that page, an API key will be displayed. Use that key for your API access. If you need help, please contact Our Support Team and we will help you find this if you are having trouble locating it.

Once you have your Api Key, send it in each request to our API as a Request header with the key x-api-key.

eg, this is a valid request format...

curl -X GET --header 'Accept: application/json' --header 'x-api-key: [Your Api Key Here]' 'https://reportapi.bookeasy.com.au/api/Template'

Note: Each API key is potentially different for each Environment so please integrate different keys into your software solution for each environment. Eg, the Pre version testing environment (PVT) will have a different key to the Live or Production environment.

API Specification

You can use the API specification or the Swagger specification to generate your classes depending on the programming language you are using. Also, the swagger specification allows you to test some ideas using the API. We use the Postman application at Bookeasy when working with this API, you may prefer a different tool but it works well for us.

PVT - Pre Version Testing environment

While you are testing your code, you may use our PVT API specification or our PVT Swagger specification which shows details on how to connect to our Pre Version Testing area. This system has a copy of production data applied to it over night at 4am GMT+10 (Brisbane, Australia AEST).

Bookeasy Documentation

You can access our Customer Help Documentation here which might help you solve any questions you have about how bookeasy works.

Questions during development

If you have any questions during API development, you may contact Our Support Team however developer support isn't included in the standard fees paid by each centre and any support required may be billed at an hourly rate if you need access to our development team to resolve your question.

Message Compression

Please build your code to accept gzip compression to keep the payload to a minimum

eg, this is a valid request format to enable compression...

curl -X GET --header 'Accept: application/json' --header 'x-api-key: [Your Api Key Here]' --header 'Accept-Encoding: gzip, deflate' 'https://reportapi.bookeasy.com.au/api/Template'

Suggested Report process flow


Our Reporting API utilizes a Queuing system so it cannot be overloaded by too many concurrent reports.

The following flowchart is the recommended approach to submit a report, poll for the results and then finally delete the report when you are fishined with the data.


Some Code

Query the Template

Request

GET https://reportapi.bookeasy.com.au/api/Template/2580 HTTP/1.1
x-api-key: [put your api key here]
Accept-Encoding: gzip, deflate
cache-control: no-cache
accept: application/json
Host: reportapi.bookeasy.com.au
Connection: close
		

Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 2430
Connection: close
Date: Wed, 18 Jul 2018 04:54:26 GMT
Cache-Control: public, max-age=0
Vary: Accept-Encoding

{
  "templates": [
    {
      "templateId": 2580,
      "name": "Accommodation Categories",
      "description": "A report on what kind of accommodation we have",
      "columns": [
        {
          "tableName": "Operators",
          "columnName": "Name",
          "alias": "Name",
          "aggregate": "None"
        },
        {
          "tableName": "Operators",
          "columnName": "AccommodationType1",
          "alias": "AccommodationType1",
          "aggregate": "None"
        },
        {
          "tableName": "Operators",
          "columnName": "AccommodationType2",
          "alias": "AccommodationType2",
          "aggregate": "None"
        },
        {
          "tableName": "Operators",
          "columnName": "Commission",
          "alias": "Commission",
          "aggregate": "None"
        },
        {
          "tableName": "Operators",
          "columnName": "Suburb",
          "alias": "Suburb",
          "aggregate": "None"
        },
        {
          "tableName": "Operators",
          "columnName": "FirstName",
          "alias": "FirstName",
          "aggregate": "None"
        },
        {
          "tableName": "Operators",
          "columnName": "Surname",
          "alias": "Surname",
          "aggregate": "None"
        },
        {
          "tableName": "Payments",
          "columnName": "Payment",
          "alias": "Payments in Last Fin Yr",
          "aggregate": "Sum"
        }
      ],
      "orderBys": [
        {
          "alias": "AccommodationType1",
          "sortOrderType": "Ascending"
        },
        {
          "alias": "Name",
          "sortOrderType": "Ascending"
        }
      ],
      "filters": [
        {
          "tableName": "Payments",
          "columnName": "PaymentDate",
          "filterType": "GreaterThan",
          "defaultValue": "4",
          "aggregate": "None"
        }
      ],
      "userDefinedFilters": [
        {
          "alias": "AccommodationType1",
          "tableName": "Operators",
          "columnName": "AccommodationType1",
          "filterType": "NotEqualTo",
          "defaultValue": "",
          "aggregate": "None"
        },
        {
          "alias": "Active",
          "tableName": "Operators",
          "columnName": "Active",
          "filterType": "EqualTo",
          "defaultValue": "1",
          "aggregate": "None"
        }
      ]
    }
  ],
  "success": true
}		

Post the Report with the User defined responses

Request

POST https://reportapi.bookeasy.com.au/api/Report HTTP/1.1
x-api-key: [put your api key here]
Accept-Encoding: gzip, deflate
Content-Type: application/json-patch+json
cache-control: no-cache
accept: application/json
Host: reportapi.bookeasy.com.au
content-length: 621
Connection: close

{
  "templateId" : 2580,
  "userDefinedFilters": [
    {
      "alias": "AccommodationType1",
      "tableName": "Operators",
      "columnName": "AccommodationType1",
      "filterType": "NotEqualTo",
      "defaultValue": "",
      "aggregate": "None",
      "answer": "1234"
    },
    {
      "alias": "Active",
      "tableName": "Operators",
      "columnName": "Active",
      "filterType": "EqualTo",
      "defaultValue": "1",
      "aggregate": "None",
      "answer": "active value for the third one"
    }
  ],
  "bookeasyClient": {
    "controlId": [PutYourControlIdHere],
    "operatorId": null // If you are an coding for an operator, set this,otherwise set the controlId field
  }
}
		

Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 38
Connection: close
Date: Wed, 18 Jul 2018 04:54:55 GMT
Vary: Accept-Encoding

{
  "reportId": 3,
  "success": true
}
	

Poll to see if the report is finished

Request

GET https://reportapi.bookeasy.com.au/api/Report/3 HTTP/1.1
x-api-key: [put your api key here]
Accept-Encoding: gzip, deflate
cache-control: no-cache
accept: application/json
Host: reportapi.bookeasy.com.au
Connection: close
	

Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 468
Connection: close
Date: Wed, 18 Jul 2018 04:55:18 GMT
Cache-Control: public, max-age=0
Vary: Accept-Encoding

{
  "reports": [
    {
      "reportId": 3,
      "templateId": 2580,
	  
	  "reportStatus": "Complete",
      
	  "dateQueuedUtc": "2018-07-18T04:54:53",
      "dateProcessingStartedUtc": "2018-07-18T04:55:06",
      "dateProcessingCompletedUtc": "2018-07-18T04:55:06",
      "processingTimeInSeconds": 0,
      "qtyRowsReturned": 2,
      "failureMessage": null,
      "reportData": {
        "columns": [],
        "columnData": []
      }
    }
  ],
  "success": true
}	

Retrieve the results data for the report

Request

GET https://reportapi.bookeasy.com.au/api/Report/3?includeData=true HTTP/1.1
x-api-key: [put your api key here]
Accept-Encoding: gzip, deflate
cache-control: no-cache
accept: application/json
Host: reportapi.bookeasy.com.au
Connection: close
	

Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Connection: close
Date: Thu, 19 Jul 2018 04:33:17 GMT
Cache-Control: public, max-age=0
Vary: Accept-Encoding

{
  "reports": [
    {
      "reportId": 3,
      "templateId": 2580,
      "reportStatus": "Complete",
      "dateQueuedUtc": "2018-07-19T04:04:53",
      "dateProcessingStartedUtc": "2018-07-19T04:04:59",
      "dateProcessingCompletedUtc": "2018-07-19T04:04:59",
      "processingTimeInSeconds": 0,
      "qtyRowsReturned": 2,
      "failureMessage": null,
      "reportData": {
        "columns": [
          {
            "columnName": "OperatorId",
            "dataType": "int",
            "numericPrecision": 10,
            "numericScale": 0,
            "isNullable": false
          },
          {
            "columnName": "Name",
            "dataType": "text",
            "characterMaximumLength": 65535,
            "isNullable": true
          },
          {
            "columnName": "Location1",
            "dataType": "text",
            "characterMaximumLength": 65535,
            "isNullable": true
          },
          {
            "columnName": "Type1",
            "dataType": "varchar",
            "characterMaximumLength": 255,
            "isNullable": true
          },
          {
            "columnName": "Type2",
            "dataType": "varchar",
            "characterMaximumLength": 255,
            "isNullable": true
          },
          {
            "columnName": "Type3",
            "dataType": "varchar",
            "characterMaximumLength": 255,
            "isNullable": true
          },
          {
            "columnName": "Type4",
            "dataType": "varchar",
            "characterMaximumLength": 255,
            "isNullable": true
          },
          {
            "columnName": "DateJoined",
            "dataType": "datetime",
            "isNullable": true
          },
          {
            "columnName": "Latitude",
            "dataType": "decimal",
            "numericPrecision": 30,
            "numericScale": 15,
            "isNullable": true
          },
          {
            "columnName": "Longitude",
            "dataType": "decimal",
            "numericPrecision": 30,
            "numericScale": 15,
            "isNullable": true
          }
        ],
        "columnData": [
          [
            999991,
            "Name of the property",
            "Blah",
            "Accommodation",
            "Local Business",
            null,
            null,
            "2012-07-23 00:00:00",
            -31.912322000000000,
            155.124730000000000
          ],
          [
            999992,
            "Name of the second property",
            "Blah",
            "Accommodation",
            "Local Business",
            null,
            null,
            "2012-07-23 00:00:00",
            -31.912322000000000,
            155.124730000000000
          ]
        ]
      }
    }
  ],
  "success": true
}
	

Delete the report when done.

Request

DELETE https://reportapi.bookeasy.com.au/api/Report/3 HTTP/1.1
x-api-key: [put your api key here]
Accept-Encoding: gzip, deflate
cache-control: no-cache
accept: application/json
Host: reportapi.bookeasy.com.au
content-length: 0
Connection: close
	

Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 21
Connection: close
Date: Wed, 18 Jul 2018 04:55:30 GMT
Vary: Accept-Encoding

{
  "success": true
}