{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "defaultProperties": [],
    "definitions": {
        "DataPoint": {
            "defaultProperties": [],
            "properties": {
                "attributes": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "defaultProperties": [],
                    "description": "An whose name and values are assigned to the underlying HTML input.",
                    "type": "object"
                },
                "dataTree": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/DataTree",
                            "description": "An object that describes a set of cascading options."
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null
                },
                "description": {
                    "description": "The description to show along with the name when presenting this on a form.",
                    "type": "string"
                },
                "display": {
                    "$ref": "#/definitions/DisplayType",
                    "description": "The display-type when presenting this input on a page"
                },
                "key": {
                    "description": "The input key.",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "The input name (shown on DXP forms)",
                    "type": "string"
                },
                "options": {
                    "default": [],
                    "description": "If the display-type is Options, these are the list of values the user will select from.",
                    "items": {
                        "$ref": "#/definitions/OptionItem"
                    },
                    "type": "array"
                },
                "required": {
                    "default": false,
                    "description": "Mark this true to force this value be set when creating an experience.",
                    "type": "boolean"
                },
                "tip": {
                    "description": "The tooltip to display when presenting on a form.",
                    "type": [
                        "string",
                        "null"
                    ]
                },
                "value": {
                    "description": "This is the default value if no other value is input.",
                    "type": [
                        "string",
                        "number",
                        "boolean"
                    ]
                }
            },
            "required": [
                "display",
                "key",
                "name",
                "required"
            ],
            "type": "object"
        },
        "DataTree": {
            "defaultProperties": [],
            "properties": {
                "isStatic": {
                    "default": false,
                    "description": "Should all of the lists be visible? Defaults to hiding until needed.",
                    "type": "boolean"
                },
                "items": {
                    "default": [],
                    "description": "The data tree object of the cascading lists.  We should have a tree of values as deep as the label-count.\nThis level is the options for the first label.",
                    "items": {
                        "$ref": "#/definitions/DataTreeItem"
                    },
                    "type": "array"
                },
                "labels": {
                    "default": [],
                    "description": "These are the top level labels. Three labels means, three select lists and the items below must also have three sets.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "required": [
                "isStatic",
                "items",
                "labels"
            ],
            "type": "object"
        },
        "DataTreeItem": {
            "defaultProperties": [],
            "properties": {
                "items": {
                    "items": {
                        "$ref": "#/definitions/DataTreeItem"
                    },
                    "type": "array"
                },
                "key": {
                    "description": "The data key for this segment of the composite input.",
                    "pattern": "^[A-Za-z0-9-_~]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "The value of this element",
                    "type": "string"
                }
            },
            "required": [
                "items",
                "key",
                "name"
            ],
            "type": "object"
        },
        "DisplayType": {
            "enum": [
                "CascadingOptions",
                "Checkbox",
                "Color",
                "ComboBox",
                "Date",
                "DateTime",
                "Email",
                "Html",
                "Image",
                "Json",
                "Number",
                "Options",
                "Password",
                "RadioGroup",
                "Secret",
                "Telephone",
                "TextArea",
                "TextLarge",
                "TextMedium",
                "TextShort",
                "Toggle",
                "Unknown",
                "Url"
            ],
            "type": "string"
        },
        "FlashboardConfiguration": {
            "defaultProperties": [],
            "description": "DXP ORGANIZATION FLASHBOARD CONFIG:\n-----------------------------------------------------\nThis file defines configurable organization flashboard settings hosted in the DXP platform.",
            "properties": {
                "key": {
                    "description": "The key for this model in the DXP platform (read-only)",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "metrics": {
                    "default": [],
                    "items": {
                        "$ref": "#/definitions/Metric"
                    },
                    "type": "array"
                },
                "name": {
                    "description": "The name of this flashboard",
                    "type": "string"
                }
            },
            "required": [
                "key",
                "name"
            ],
            "type": "object"
        },
        "KpiSourceType": {
            "enum": [
                "Standard",
                "Custom",
                "Link",
                "StoryEvent",
                "ExternalEvent"
            ],
            "type": "string"
        },
        "Metric": {
            "defaultProperties": [],
            "properties": {
                "kpiKey": {
                    "type": "string"
                },
                "order": {
                    "type": "number"
                },
                "storyKey": {
                    "type": "string"
                },
                "type": {
                    "$ref": "#/definitions/KpiSourceType"
                }
            },
            "required": [
                "kpiKey",
                "order",
                "storyKey",
                "type"
            ],
            "type": "object"
        },
        "OptionItem": {
            "defaultProperties": [],
            "properties": {
                "display": {
                    "description": "Option display"
                },
                "value": {
                    "description": "Option value"
                }
            },
            "required": [
                "display",
                "value"
            ],
            "type": "object"
        },
        "OrganizationEntity": {
            "defaultProperties": [],
            "properties": {
                "data": {
                    "additionalProperties": true,
                    "description": "The data map of the values of the dataPoints defined at the organization.",
                    "properties": {},
                    "type": "object"
                },
                "key": {
                    "description": "Entity key (used in the experience and preview model)",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "Entity name",
                    "type": "string"
                }
            },
            "required": [
                "data",
                "key",
                "name"
            ],
            "type": "object"
        },
        "OrganizationService": {
            "defaultProperties": [],
            "properties": {
                "data": {
                    "additionalProperties": true,
                    "description": "Services parameters for actions across all stories",
                    "properties": {},
                    "type": "object"
                },
                "key": {
                    "description": "Service key used in actions for all org stories",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "serviceProvider": {
                    "$ref": "#/definitions/ServiceProviderType",
                    "description": "Services provider type"
                }
            },
            "required": [
                "data",
                "key",
                "serviceProvider"
            ],
            "type": "object"
        },
        "OrganizationSuppressionList": {
            "defaultProperties": [],
            "properties": {
                "key": {
                    "description": "SuppressionList unique key used for adding and removing values (e.g. email address)",
                    "pattern": "^[A-Za-z0-9-_]{1,16}$",
                    "type": "string"
                },
                "name": {
                    "additionalProperties": true,
                    "description": "SuppressionList User Friendly Name",
                    "properties": {},
                    "type": "object"
                },
                "storyKeys": {
                    "description": "Stories that this list should suppress contact events (e.g. send emails). None specified will apply this list to all organization stories.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "required": [
                "key",
                "name",
                "storyKeys"
            ],
            "type": "object"
        },
        "ServiceProviderType": {
            "enum": [
                "DXP",
                "SMTP",
                "HipChat",
                "Slack",
                "Postmark",
                "LeadExec",
                "Twilio",
                "SparkPost",
                "SendGrid"
            ],
            "type": "string"
        }
    },
    "description": "DXP ORGANIZATION CONFIG:\n-----------------------------------------------------\nThis file defines configurable organization settings hosted in the DXP platform.",
    "properties": {
        "apiVersion": {
            "default": "api.view.do/v1",
            "description": "API version, model location (read-only)",
            "type": "string"
        },
        "dataPoints": {
            "default": [],
            "description": "These are extra data points that can live with the organization and be used across stories.\nNote that they can differ by child entities.",
            "items": {
                "$ref": "#/definitions/DataPoint"
            },
            "type": "array"
        },
        "entities": {
            "default": [],
            "description": "Organizations can have sub-divisions that have alternative data-points. You can define child entities\nhere along with any data changes.",
            "items": {
                "$ref": "#/definitions/OrganizationEntity"
            },
            "type": "array"
        },
        "flashboards": {
            "default": null,
            "description": "These are the flashboards configured for the organization.  Note** the metric keys must be tied to an\nexisting story tied to the organization.",
            "items": {
                "$ref": "#/definitions/FlashboardConfiguration"
            },
            "type": "array"
        },
        "key": {
            "description": "The key for this model in the DXP platform (read-only)",
            "pattern": "^[A-Za-z0-9-_]{1,30}$",
            "type": "string"
        },
        "kind": {
            "default": "Organization",
            "description": "DXP model-type (read-only)",
            "type": "string"
        },
        "name": {
            "description": "The name of this organization",
            "type": "string"
        },
        "scheduledDataSync": {
            "default": false,
            "type": "boolean"
        },
        "secrets": {
            "default": [],
            "description": "These are secrets available to this organization.  They can be used in Service configurations for example.",
            "items": {
                "type": "string"
            },
            "type": "array"
        },
        "services": {
            "default": [],
            "description": "These are the services configured for the organization.\nThe keys here are what you use in the story.actions configuration.",
            "items": {
                "$ref": "#/definitions/OrganizationService"
            },
            "type": "array"
        },
        "suppressionLists": {
            "default": [],
            "description": "These are the services configured for the organization. These are read-only, as services must be\nconfigured in the administration app. The keys here are what you use in the story.actions configuration.",
            "items": {
                "$ref": "#/definitions/OrganizationSuppressionList"
            },
            "type": "array"
        },
        "url": {
            "description": "The URL for this organization",
            "type": "string"
        }
    },
    "required": [
        "apiVersion",
        "key",
        "kind",
        "name",
        "scheduledDataSync",
        "url"
    ],
    "type": "object"
}

