{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "defaultProperties": [],
    "definitions": {
        "ActionTemplate": {
            "defaultProperties": [],
            "properties": {
                "action": {
                    "$ref": "#/definitions/StoryAction"
                },
                "description": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "organization_requirements": {
                    "$ref": "#/definitions/OrganizationConfiguration"
                },
                "story_requirements": {
                    "$ref": "#/definitions/StoryConfiguration"
                }
            },
            "required": [
                "action",
                "description",
                "name",
                "organization_requirements",
                "story_requirements"
            ],
            "type": "object"
        },
        "ActionType": {
            "enum": [
                "SendEmail",
                "SendSMS",
                "SendMMS",
                "SendNotification",
                "ConnectCall",
                "CreateExternalRecord",
                "WebHook",
                "SendToStory",
                "SyncToStory",
                "SetExperienceData",
                "SetExperienceCompleted",
                "SetExperienceConverted",
                "SetExperienceEpisode",
                "StopExperienceActions",
                "FireAction",
                "AddToSuppressionList",
                "RemoveFromSuppressionList",
                "RecordEvent",
                "RecordInboundLink",
                "SetExperienceChildEntity",
                "ExecuteFunction"
            ],
            "type": "string"
        },
        "ConfigurationSource": {
            "defaultProperties": [],
            "properties": {
                "modelKey": {
                    "description": "The owning model key.\n'iVX' if the sourceType is Global",
                    "type": "string"
                },
                "serviceKey": {
                    "description": "The service key identifier.",
                    "type": "string"
                },
                "sourceType": {
                    "$ref": "#/definitions/ConfigurationSourceType",
                    "description": "Which model type owns the configuration.\nGlobal | Organization"
                }
            },
            "required": [
                "modelKey",
                "serviceKey",
                "sourceType"
            ],
            "type": "object"
        },
        "ConfigurationSourceType": {
            "enum": [
                "Global",
                "Organization"
            ],
            "type": "string"
        },
        "ContentType": {
            "enum": [
                "Text",
                "HTML",
                "LIQUID",
                "JS",
                "JSON",
                "XML",
                "CSS",
                "LESS",
                "CS",
                "CSV",
                "MD",
                "VTT"
            ],
            "type": "string"
        },
        "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"
        },
        "DataType": {
            "enum": [
                "String",
                "Number",
                "Boolean",
                "Object",
                "DateTime"
            ],
            "type": "string"
        },
        "DayOfWeek": {
            "enum": [
                "Sunday",
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday"
            ],
            "type": "string"
        },
        "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"
        },
        "EmailTemplate": {
            "defaultProperties": [],
            "properties": {
                "file": {
                    "type": "string"
                },
                "key": {
                    "description": "The unique id for this item",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "Friendly name",
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "type": {
                    "$ref": "#/definitions/ContentType"
                }
            },
            "required": [
                "file",
                "key",
                "name",
                "path",
                "type"
            ],
            "type": "object"
        },
        "EnabledForType": {
            "enum": [
                "New",
                "All"
            ],
            "type": "string"
        },
        "EpisodeConfiguration": {
            "defaultProperties": [],
            "properties": {
                "description": {
                    "description": "Description for this episode",
                    "type": "string"
                },
                "isEnabled": {
                    "default": true,
                    "description": "Should this episode be active and available.",
                    "type": "boolean"
                },
                "key": {
                    "description": "Episode key",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "Episode friendly name",
                    "type": "string"
                }
            },
            "required": [
                "isEnabled",
                "key",
                "name"
            ],
            "type": "object"
        },
        "EventType": {
            "enum": [
                "OnCreated",
                "OnSent",
                "OnOpened",
                "OnBounced",
                "OnOptedOut",
                "OnStarted",
                "OnMilestone",
                "OnStoryEvent",
                "OnChanged",
                "OnDataChanged",
                "OnFinished",
                "OnCompleted",
                "OnConverted",
                "OnDemand",
                "OnExternalEvent",
                "OnRepersonalized",
                "OnInboundLink",
                "OnOutboundLink",
                "OnRehydrated"
            ],
            "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"
        },
        "GroupingOperatorType": {
            "enum": [
                "And",
                "Or",
                "Not"
            ],
            "type": "string"
        },
        "Input": {
            "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"
                },
                "isIdentifier": {
                    "default": false,
                    "type": "boolean"
                },
                "key": {
                    "description": "The input key.",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "locked": {
                    "default": false,
                    "type": "boolean"
                },
                "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"
                },
                "source": {
                    "default": "Experience",
                    "type": "string"
                },
                "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"
                    ]
                },
                "visibleInReport": {
                    "default": false,
                    "type": "boolean"
                }
            },
            "required": [
                "display",
                "isIdentifier",
                "key",
                "locked",
                "name",
                "required",
                "source",
                "visibleInReport"
            ],
            "type": "object"
        },
        "KpiSourceType": {
            "enum": [
                "Standard",
                "Custom",
                "Link",
                "StoryEvent",
                "ExternalEvent"
            ],
            "type": "string"
        },
        "LatencyStrategyType": {
            "enum": [
                "Allow",
                "Reschedule",
                "Cancel"
            ],
            "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"
        },
        "OrganizationConfiguration": {
            "defaultProperties": [],
            "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"
        },
        "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"
        },
        "RuleType": {
            "enum": [
                "Progress",
                "Event",
                "Data",
                "CreatedDate",
                "CampaignKey",
                "BatchKey",
                "StoryVersion",
                "CreatedAnonymously",
                "Episode"
            ],
            "type": "string"
        },
        "ScheduleWindow": {
            "defaultProperties": [],
            "properties": {
                "daysOfWeek": {
                    "default": [],
                    "description": "Which days are okay to send? Provide an array of DayOfWeek types.",
                    "items": {
                        "$ref": "#/definitions/DayOfWeek"
                    },
                    "type": "array"
                },
                "endTime": {
                    "description": "The local time-window stop time for this action to fire within.",
                    "type": "string"
                },
                "latencyStrategy": {
                    "$ref": "#/definitions/LatencyStrategyType",
                    "description": "How should we handle late fires?"
                },
                "startTime": {
                    "description": "The local time-window start time for this action to fire within.",
                    "type": "string"
                },
                "timeZone": {
                    "description": "The local time zone to use:  http://www.xiirus.net/articles/article-_net-convert-datetime-from-one-timezone-to-another-7e44y.aspx",
                    "type": "string"
                }
            },
            "required": [
                "daysOfWeek",
                "endTime",
                "latencyStrategy",
                "startTime",
                "timeZone"
            ],
            "type": "object"
        },
        "ServiceProviderType": {
            "enum": [
                "DXP",
                "SMTP",
                "HipChat",
                "Slack",
                "Postmark",
                "LeadExec",
                "Twilio",
                "SparkPost",
                "SendGrid"
            ],
            "type": "string"
        },
        "StoryAction": {
            "defaultProperties": [],
            "properties": {
                "actionType": {
                    "$ref": "#/definitions/ActionType",
                    "description": "Action to fire"
                },
                "configurationModifier": {
                    "description": "Configuration Modifier Script",
                    "type": [
                        "string",
                        "null"
                    ]
                },
                "configurationSource": {
                    "$ref": "#/definitions/ConfigurationSource",
                    "description": "The model that holds the configuration"
                },
                "enabled": {
                    "description": "Enabled",
                    "type": "boolean"
                },
                "enabledFor": {
                    "$ref": "#/definitions/EnabledForType",
                    "description": "Enabled for new only or ALL experiences"
                },
                "eventData": {
                    "description": "Action conditional trigger data (for certain events with certain data, usually a key)",
                    "type": [
                        "string",
                        "null"
                    ]
                },
                "eventType": {
                    "$ref": "#/definitions/EventType",
                    "description": "Action triggering event"
                },
                "executionWindow": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/ScheduleWindow",
                            "description": "The time window this action is safe to fire within"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "fireMultiple": {
                    "default": false,
                    "description": "Should this fire each time the event is triggered?",
                    "type": "boolean"
                },
                "groupingOperator": {
                    "$ref": "#/definitions/GroupingOperatorType",
                    "description": "Rule grouping method (And vs Or)"
                },
                "isDeliveryAction": {
                    "description": "If this is the first email that delivers the XID",
                    "type": "boolean"
                },
                "key": {
                    "description": "Action key, also used in aid parameter tracking",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "Action friendly name",
                    "type": "string"
                },
                "onDemand": {
                    "description": "Should we be able to fire this action from the experience grid?",
                    "type": "boolean"
                },
                "parameters": {
                    "additionalProperties": {
                        "type": [
                            "string",
                            "number",
                            "boolean"
                        ]
                    },
                    "defaultProperties": [],
                    "description": "Action parameters. These vary by action and provider.",
                    "type": "object"
                },
                "responseModifier": {
                    "description": "Response Modifier Script",
                    "type": [
                        "string",
                        "null"
                    ]
                },
                "rules": {
                    "default": [],
                    "description": "A list of rules that have to be satisfied before this action will fire.",
                    "items": {
                        "$ref": "#/definitions/StoryActionRule"
                    },
                    "type": "array"
                },
                "serviceProvider": {
                    "$ref": "#/definitions/ServiceProviderType",
                    "description": "Service provider for this action"
                },
                "visibleInReport": {
                    "description": "Should we record this action results in analytics? Makes queries slower.",
                    "type": "boolean"
                },
                "wait": {
                    "$ref": "#/definitions/WaitType",
                    "default": "None",
                    "description": "Wait/delay after event?"
                },
                "waitValue": {
                    "default": 0,
                    "description": "The units to delay before firing when WaitType is not None",
                    "type": "number"
                }
            },
            "required": [
                "actionType",
                "configurationSource",
                "enabled",
                "enabledFor",
                "eventType",
                "fireMultiple",
                "groupingOperator",
                "isDeliveryAction",
                "key",
                "name",
                "onDemand",
                "parameters",
                "rules",
                "serviceProvider",
                "visibleInReport",
                "wait",
                "waitValue"
            ],
            "type": "object"
        },
        "StoryActionRule": {
            "defaultProperties": [],
            "properties": {
                "key": {
                    "type": "string"
                },
                "member": {
                    "type": "string"
                },
                "memberType": {
                    "$ref": "#/definitions/DataType"
                },
                "operator": {
                    "enum": [
                        "Contains",
                        "DoesNotContain",
                        "DoesNotEndWith",
                        "DoesNotEqual",
                        "DoesNotStartWit",
                        "EndsWith",
                        "Equal",
                        "Equals",
                        "GreaterThan",
                        "GreaterThanOrEqual",
                        "HasFired",
                        "HasNotFired",
                        "IsFalse",
                        "IsNotNull",
                        "IsNull",
                        "IsTrue",
                        "LessThan",
                        "LessThanOrEqual",
                        "StartsWith"
                    ],
                    "type": "string"
                },
                "type": {
                    "$ref": "#/definitions/RuleType"
                },
                "value": {
                    "type": "string"
                }
            },
            "required": [
                "key",
                "memberType",
                "operator",
                "type"
            ],
            "type": "object"
        },
        "StoryConfiguration": {
            "defaultProperties": [],
            "description": "STORY CONFIG:\n-----------------------------------------------------\nThis file defines configurable story settings hosted in the DXP platform.",
            "properties": {
                "actions": {
                    "default": [],
                    "description": "A list of configured actions that are triggered via events fired during the lifetime of an experience.\n\nThese actions use services configured with the organization-configuration.",
                    "items": {
                        "$ref": "#/definitions/StoryAction"
                    },
                    "type": "array"
                },
                "apiVersion": {
                    "default": "api.view.do/v1",
                    "description": "API version, model location (read-only)",
                    "type": "string"
                },
                "customKpis": {
                    "default": [],
                    "description": "A list of story KPIs counters that can be incremented with published web-hooks.",
                    "items": {
                        "$ref": "#/definitions/StoryCustomKpi"
                    },
                    "type": "array"
                },
                "customLinks": {
                    "default": [],
                    "description": "A list of story custom links to distribute trackable redirection URLs.",
                    "items": {
                        "$ref": "#/definitions/StoryCustomLink"
                    },
                    "type": "array"
                },
                "description": {
                    "type": "string"
                },
                "emailTemplates": {
                    "default": [],
                    "description": "A list of story email templates, usable in Actions",
                    "items": {
                        "$ref": "#/definitions/EmailTemplate"
                    },
                    "type": "array"
                },
                "episodes": {
                    "default": [],
                    "description": "A list of alternative story data, css and js sets that have the same data inputs and contacts.",
                    "items": {
                        "$ref": "#/definitions/EpisodeConfiguration"
                    },
                    "type": "array"
                },
                "events": {
                    "default": [],
                    "description": "A list of story events that can be raised during the experience.",
                    "items": {
                        "$ref": "#/definitions/StoryEvent"
                    },
                    "type": "array"
                },
                "externalEvents": {
                    "default": [],
                    "description": "A list of external events that can be raised using our published web-hooks.",
                    "items": {
                        "$ref": "#/definitions/StoryExternalEvent"
                    },
                    "type": "array"
                },
                "funnelEnabled": {
                    "description": "Toggle to allow anonymous experiences",
                    "type": "boolean"
                },
                "host": {
                    "default": "Hosted",
                    "description": "The host-type this story is meant for.\nHosted for NENT-based stories served from the platform, otherwise\nWebsite for stories served from a website.",
                    "enum": [
                        "Hosted",
                        "Website"
                    ],
                    "type": "string"
                },
                "htmlTemplates": {
                    "default": [],
                    "description": "A list of story HTML templates that will be hosted and rendered using DXP tokens.",
                    "items": {
                        "$ref": "#/definitions/TemplateMeta"
                    },
                    "type": "array"
                },
                "inputMaps": {
                    "default": [],
                    "description": "A set of maps usable in actions or in the XAPI to translate input keys to external keys.",
                    "items": {
                        "$ref": "#/definitions/StoryInputMap"
                    },
                    "type": "array"
                },
                "inputs": {
                    "default": [],
                    "description": "A list of story inputs, used to define the story database.",
                    "items": {
                        "$ref": "#/definitions/Input"
                    },
                    "type": "array"
                },
                "key": {
                    "description": "The key for this model in the DXP platform (readonly)",
                    "pattern": "^[A-Za-z0-9-_]{1,18}$",
                    "type": "string"
                },
                "kind": {
                    "default": "Story",
                    "description": "DXP model-type (read-only)",
                    "type": "string"
                },
                "milestones": {
                    "default": [],
                    "description": "A list of story milestones, in order.",
                    "items": {
                        "pattern": "^[A-Za-z0-9-_\\s]{1,30}$"
                    },
                    "type": "array"
                },
                "name": {
                    "type": "string"
                },
                "organization": {
                    "$ref": "#/definitions/OrganizationConfiguration",
                    "description": "Optional (but encouraged) org model to be used during validateOnly story pushes"
                },
                "organizationKey": {
                    "type": "string"
                },
                "preventDuplicates": {
                    "description": "Set this value to true to prevent duplicates\nin public-created experiences. Be sure to\nannotate which contact-experiences is the\nidentifier to check.",
                    "type": "boolean"
                },
                "publicKey": {
                    "description": "The key for this model in the DXP platform (readonly)",
                    "pattern": "^[A-Za-z0-9-_]{1,18}$",
                    "type": "string"
                },
                "stripoRootDirectory": {
                    "default": "{{org-key}}/production",
                    "description": "Root directory where email templates are stored in Stripo.",
                    "type": "string"
                },
                "textTemplates": {
                    "default": [],
                    "description": "A list of story text templates usable in Actions or in the story as a URL reference.",
                    "items": {
                        "$ref": "#/definitions/TemplateMeta"
                    },
                    "type": "array"
                },
                "url": {
                    "description": "Hosted URL for the story.\nIf set manually, overrides default convention-based URL.",
                    "type": "string"
                },
                "vanityUrl": {
                    "description": "Hosted production-facing URL for the story.\nIf set manually, overrides default convention-based production URL.",
                    "type": "string"
                }
            },
            "required": [
                "actions",
                "apiVersion",
                "customKpis",
                "customLinks",
                "emailTemplates",
                "episodes",
                "events",
                "externalEvents",
                "funnelEnabled",
                "host",
                "htmlTemplates",
                "inputMaps",
                "inputs",
                "key",
                "kind",
                "milestones",
                "name",
                "organization",
                "organizationKey",
                "preventDuplicates",
                "publicKey",
                "stripoRootDirectory",
                "textTemplates",
                "url",
                "vanityUrl"
            ],
            "type": "object"
        },
        "StoryCustomKpi": {
            "defaultProperties": [],
            "properties": {
                "key": {
                    "description": "The id for this KPI",
                    "pattern": "^[A-Za-z0-9-]{1,16}$",
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "slug": {
                    "type": "string"
                }
            },
            "required": [
                "key",
                "name"
            ],
            "type": "object"
        },
        "StoryCustomLink": {
            "defaultProperties": [],
            "properties": {
                "isKpi": {
                    "default": true,
                    "description": "True if we should capture the counts and report on them.",
                    "type": "boolean"
                },
                "key": {
                    "description": "The unique id for this item",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "Friendly name",
                    "type": "string"
                },
                "targetUrl": {
                    "description": "The external url to redirect the browser after clicking.",
                    "type": "string"
                }
            },
            "required": [
                "isKpi",
                "key",
                "name",
                "targetUrl"
            ],
            "type": "object"
        },
        "StoryEvent": {
            "defaultProperties": [],
            "properties": {
                "key": {
                    "description": "The unique id for this item",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "Friendly name",
                    "type": "string"
                }
            },
            "required": [
                "key",
                "name"
            ],
            "type": "object"
        },
        "StoryExternalEvent": {
            "defaultProperties": [],
            "properties": {
                "key": {
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            },
            "required": [
                "key",
                "name"
            ],
            "type": "object"
        },
        "StoryInputMap": {
            "defaultProperties": [],
            "properties": {
                "key": {
                    "description": "The unique id for this item",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "map": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "defaultProperties": [],
                    "description": "A map of input keys with their translations.",
                    "examples": [
                        "local-key: foreign-key"
                    ],
                    "type": "object"
                },
                "name": {
                    "description": "Friendly name",
                    "type": "string"
                }
            },
            "required": [
                "key",
                "map",
                "name"
            ],
            "type": "object"
        },
        "TemplateMeta": {
            "defaultProperties": [],
            "properties": {
                "file": {
                    "type": "string"
                },
                "key": {
                    "description": "The unique id for this item",
                    "pattern": "^[A-Za-z0-9-_]{1,30}$",
                    "type": "string"
                },
                "name": {
                    "description": "Friendly name",
                    "type": "string"
                },
                "path": {
                    "type": "string"
                },
                "type": {
                    "$ref": "#/definitions/ContentType"
                }
            },
            "required": [
                "file",
                "key",
                "name",
                "path",
                "type"
            ],
            "type": "object"
        },
        "WaitType": {
            "enum": [
                "None",
                "Minutes",
                "Hours",
                "Days"
            ],
            "type": "string"
        }
    },
    "properties": {
        "action_templates": {
            "items": {
                "$ref": "#/definitions/ActionTemplate"
            },
            "type": "array"
        },
        "apiVersion": {
            "default": "api.view.do/v1",
            "description": "API version, model location (read-only)",
            "type": "string"
        },
        "description": {
            "description": "The description for this template",
            "type": "string"
        },
        "key": {
            "description": "The key for this template",
            "type": "string"
        },
        "kind": {
            "default": "ActionTemplate",
            "description": "DXP model-type (read-only)",
            "type": "string"
        },
        "name": {
            "description": "The key for this template",
            "type": "string"
        },
        "organization_configuration": {
            "$ref": "#/definitions/OrganizationConfiguration"
        },
        "parameter_templates": {
            "additionalProperties": {
                "defaultProperties": [],
                "properties": {
                    "content": {
                        "type": "string"
                    },
                    "key": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "supportFiles": {
                        "items": {
                            "type": "string"
                        },
                        "type": "array"
                    },
                    "type": {
                        "type": "string"
                    }
                },
                "required": [
                    "content",
                    "key",
                    "name",
                    "supportFiles",
                    "type"
                ],
                "type": "object"
            },
            "defaultProperties": [],
            "type": "object"
        },
        "story_configuration": {
            "$ref": "#/definitions/StoryConfiguration"
        }
    },
    "required": [
        "action_templates",
        "apiVersion",
        "key",
        "kind",
        "name",
        "organization_configuration",
        "parameter_templates",
        "story_configuration"
    ],
    "type": "object"
}

