# 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 19.
• 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 20.
• 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",
"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",