JSON guidelines

Data that is exported from a third-party SaaS product must comply with the schema file—generic_saas_schema.json—that is provided. The SaaS - Generic connector validates the JSON file against the schema during aggregation. If any validation errors occur in regard to a file, the errors are saved in a log file and the aggregation is stopped for this file; if more files exist, the aggregation continues to attempt to read those. Inspect the log file and adjust your process to generate valid files.

To validate a JSON file against the schema:

  1. Go to https://www.jsonschemavalidator.net.

  2. Enter the contents of the schema file on the left-hand side of the screen.

  3. Enter the contents of a generated JSON file on the right-hand side of the screen.

Eventual errors will automatically be highlighted on the aforementioned webpage.

The JSON file must contain a complete data set—including entries for all users and subscriptions—every time that the aggregation runs. The connector does not support incremental updates of users and subscriptions.

Additional guidelines and requirements

  • The Users and Subscriptions array must contain at least one item. Empty lists are considered invalid.

  • The subscription properties UserCap and AvailableSeats must be numerical values. String values are considered invalid even though they might contain a valid number.

    Example 16.
    • Valid: 3

    • Invalid: "3"



  • The date format must be in the ISO 8601 format, as follows:

    yyyy-MM-ddTHH:mm:ss

  • The order of the properties inside the JSON object does not matter.

  • The JSON property names are case sensitive.

  • The subscription object property for MeteringTypes and the user object property for Status are case sensitive.

    Example 17.
    • Valid: "Active"

    • Invalid: "active"



Example JSON file

This is an example of the contents of a valid JSON file that validates against the generic_saas_schema.json file and can be read by SaaS - Generic connector:

{
  "Subscriptions": [
    {
      "ID": "User subscription for 870f902f-ac4a-4789-963c-e01896f6106e",
      "UserCap": 100,
      "AvailableSeats": 98,
      "MeteringType": "PerAssignedUser",
      "Created": "2009-06-15T13:45:30",
      "Type": {
        "ID": "example_subscription_id",
        "Name": "Example user subscription"
      },
      "UserIds": [
        "john.doe@snowsoftware.com",
        "jane.doe@snowsoftware.com"
      ]
    }
  ],
  "Users": [
    {
      "Id": "john.doe@snowsoftware.com",
      "Email": "john.doe@snowsoftware.com",
      "UserName": "johndoe",
      "Name": "John Doe",
      "Status": "Active",
      "FirstActivity": "2017-08-22T17:22:17",
      "LastActivity": "2019-09-16T17:22:17",
      "Registration": "2017-08-22T17:22:17"
    },
    {
      "Id": "jane.doe@snowsoftware.com",
      "Email": "jane.doe@snowsoftware.com",
      "UserName": "janedoe",
      "Name": "Jane Doe",
      "Status": "Active",
      "FirstActivity": "2017-08-22T17:22:17",
      "LastActivity": "2019-08-25T17:22:17",
      "Registration": "2017-08-22T17:22:17"
    }
  ]
}