Scenario resources
Operation | Description |
---|---|
POST /api/scenarios | Create or clone a scenario |
POST /api/scenarios/queries/any-modified-since | Queries whether any scenarios have been modified |
DELETE /api/scenarios/{id} | Delete a scenario |
GET /api/scenarios/{id} | Get a scenario |
PATCH /api/scenarios/{id} | Update a scenario |
PATCH /api/scenarios/{id}/data | Modify scenario data |
POST /api/scenarios/{id}/data | Get the data from a scenario |
GET /api/scenarios/{id}/job-metrics | Get the job metrics |
GET /api/scenarios/{id}/run-log | Get the scenario run log |
POST /api/scenarios
The payload specifies the attributes of the new scenario. The name attribute specifies the preferred name for the scenario; a suffix will be applied to ensure its name is unique among its siblings. The scenarioType attribute specifies the type of scenario to create; the app defines the available scenario types. If no scenarioType is supplied it defaults to SCENARIO. The parent attribute specifies the folder or app the scenario will be created within. It must be an app or a folder and must declare its objectType and ID. To clone a scenario specify a sourceScenario. When cloning, the new scenario will have the same scenario type as the source and any supplied scenarioType will be ignored. The scenario will be cloned into the same location as the source scenario if the parent attribute is omitted.
Security: SCENARIO_NEW is required to create a new scenario and the user must have permission to modify the contents of the parent folder or app. When cloning, the user must also have permission to read the source scenario.
Request Body
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Responses
- 201 Created
-
The scenario was successfully created
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Location The URL of the created resource
string - 403 Forbidden
-
The user did not have authorization to create this scenario
- 422 Unprocessable Entity
-
The app, parent folder or source scenario were unavailable to the current user
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-422",
"desc": "Unprocessable Entity",
"innerError": {
"code": "FICO-Platform-Validation-InvalidValue",
"desc": "Entity processing failed",
"message": "parent.id is unavailable"
},
"message": "Unprocessable Entity",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
POST /api/scenarios/queries/any-modified-since
Discover whether the scenarios under the given root in the folder structure have been modified since the provided timestamp.
Request Body
The dashboard query
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Responses
- 200 OK
-
Whether or not the scenarios have been modified
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
- 422 Unprocessable Entity
-
The root app or folder or excluded folders did not exist, were unavailable to the current user, or the excluded folders belong to another app
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-422",
"desc": "Unprocessable Entity",
"innerError": {
"code": "FICO-Platform-Validation-InvalidValue",
"desc": "Entity processing failed",
"message": "Entity processing failed"
},
"message": "Unprocessable Entity",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
DELETE /api/scenarios/{id}
Delete a scenario including its data, attachments and run log. If a job exists for the scenario it will also be deleted.
Request Parameters
Name | Description | Type | Data Type | |
---|---|---|---|---|
id | The scenario ID |
path | string (uuid) | required |
Responses
- 204 No Content
-
The scenario was successfully deleted
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
-
Empty response body
- 403 Forbidden
-
The user did not have authorization to delete this scenario
- 404 Not Found
-
The scenario did not exist or was unavailable to the current user
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-404",
"desc": "Not Found",
"innerError": {
"code": "OPTI-Insight-Persistence-DocumentNotFound",
"desc": "Document not found",
"message": "Unable to find document"
},
"message": "Not Found",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
GET /api/scenarios/{id}
Get a scenario by ID. A user can only see a scenario that they have read-access to.
Request Parameters
Name | Description | Type | Data Type | |
---|---|---|---|---|
id | The scenario ID |
path | string (uuid) | required |
Responses
- 200 OK
-
The requested scenario
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
- 404 Not Found
-
The scenario did not exist or was unavailable to the current user
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-404",
"desc": "Not Found",
"innerError": {
"code": "OPTI-Insight-Persistence-DocumentNotFound",
"desc": "Document not found",
"message": "Unable to find document"
},
"message": "Not Found",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
PATCH /api/scenarios/{id}
The payload contains the updates to apply to the scenario. They are all optional. The name attribute specifies the new preferred name for the scenario; a suffix will be applied to ensure its name is unique among its siblings. The share status and owner attributes control visibility of the scenario. When the share status is set to PRIVATE and no owner is supplied then the current user becomes the owner to ensure they do not lose access to the scenario. The scenario ID attribute is optional, but if it is supplied then it must match the ID in the URL. The objectType is optional, but if it is supplied then it must be SCENARIO. All other attributes are ignored.
Security: SCENARIO_EDIT is required to change the folder name, SCENARIO_SHARE is required to change the share status, and SCENARIO_OWNER is required to change the owner, and the user must have write access to the scenario.
Request Body
The updates to apply
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Request Parameters
Name | Description | Type | Data Type | |
---|---|---|---|---|
id | The scenario ID |
path | string (uuid) | required |
Responses
- 200 OK
-
The scenario was successfully updated
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
- 403 Forbidden
-
The user did not have authorization to update this scenario
- 404 Not Found
-
The scenario did not exist or was unavailable to the current user
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-404",
"desc": "Not Found",
"innerError": {
"code": "OPTI-Insight-Persistence-DocumentNotFound",
"desc": "Document not found",
"message": "Unable to find document"
},
"message": "Not Found",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
} - 422 Unprocessable Entity
-
Validation of the requested changes failed. e.g. the name was too long.
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-422",
"desc": "Unprocessable Entity",
"details": [
{
"code": "FICO-Platform-Http-422",
"desc": "Unprocessable Entity",
"message": "Must not be empty, and must not start or end with space characters",
"target": "name",
"timestamp": "1970-01-03T02:01:33.219Z"
}
],
"message": "Validation failed",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
PATCH /api/scenarios/{id}/data
Modify the scenario data. The data is modified by supplying a list of entity deltas. These entity deltas contain only the elements that are added, removed or changed. The scenario data cannot be modified if the scenario is in the job queue.
Security: SCENARIO_EDIT is required to modify the scenario data and the user must have write access to the scenario.
Request Body
The changes to apply
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Request Parameters
Name | Description | Type | Data Type | |
---|---|---|---|---|
id | The scenario ID |
path | string (uuid) | required |
Responses
- 204 No Content
-
The scenario data was modified
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
-
Empty response body
- 403 Forbidden
-
The current user did not have permission to modify the scenario data
- 404 Not Found
-
The scenario did not exist or was unavailable to the current user
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-404",
"desc": "Not Found",
"innerError": {
"code": "OPTI-Insight-Persistence-DocumentNotFound",
"desc": "Document not found",
"message": "Unable to find document"
},
"message": "Not Found",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
} - 422 Unprocessable Entity
-
The modification contained an invalid change that could not be applied
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-422",
"desc": "Unprocessable Entity",
"innerError": {
"code": "FICO-Platform-Validation-InvalidValue",
"desc": "Entity processing failed",
"message": "Entity processing failed"
},
"message": "Unprocessable Entity",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
} - 423 Locked
-
The scenario is already in the job queue
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-423",
"desc": "Locked",
"innerError": {
"code": "OPTI-Insight-Locks-JobExists",
"desc": "Job already exists for scenario",
"message": "Scenario is already in the job queue"
},
"message": "Locked",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
POST /api/scenarios/{id}/data
Get the entity data from this scenario as described by the supplied query object.
Request Body
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Request Parameters
Name | Description | Type | Data Type | |
---|---|---|---|---|
id | The scenario ID |
path | string (uuid) | required |
Responses
- 200 OK
-
The scenario data
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
- 404 Not Found
-
The scenario did not exist or was unavailable to the current user
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-404",
"desc": "Not Found",
"innerError": {
"code": "OPTI-Insight-Persistence-DocumentNotFound",
"desc": "Document not found",
"message": "Unable to find document"
},
"message": "Not Found",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
GET /api/scenarios/{id}/job-metrics
Get the job metrics generated for the last execution of this scenario.
Request Parameters
Name | Description | Type | Data Type | |
---|---|---|---|---|
id | The scenario ID |
path | string (uuid) | required |
Responses
- 200 OK
-
The requested job metrics
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
- 404 Not Found
-
The scenario did not exist or was unavailable to the current user
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
Example: {
"error": {
"code": "FICO-Platform-Http-404",
"desc": "Not Found",
"innerError": {
"code": "OPTI-Insight-Persistence-DocumentNotFound",
"desc": "Document not found",
"message": "Unable to find document"
},
"message": "Not Found",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
GET /api/scenarios/{id}/run-log
The run log is generated by the job during execution and captured against the scenario when execution completes.
Request Parameters
Name | Description | Type | Data Type | |
---|---|---|---|---|
id | The scenario ID |
path | string (uuid) | required |
Responses
- 200 OK
-
The requested run log
- Content-Type text/vnd.com.fico.xpress.insight.v2+plain
-
string (binary)
- 404 Not Found
-
The scenario did not exist or was unavailable to the current user or there was no completed run log
- Content-Type application/vnd.com.fico.xpress.insight.v2+json
- Content-Type text/vnd.com.fico.xpress.insight.v2+plain
-
Empty response body
Example: {
"error": {
"code": "FICO-Platform-Http-404",
"desc": "Not Found",
"innerError": {
"code": "OPTI-Insight-Persistence-DocumentNotFound",
"desc": "Document not found",
"message": "Unable to find document"
},
"message": "Not Found",
"parentId": "0000000000000def",
"spanId": "0000000000000123",
"timestamp": "1970-01-03T02:01:33.219Z",
"traceId": "0000000000000abc"
}
}
Details changes to a scenario array entity.
Properties
- add: object[]
-
Array elements to add to the array entity.
Array of ArrayElement - remove: object[][]
-
The keys of elements to remove from the array entity.
Accepts Strings, Numbers and Booleans.
Example: [
[
"1",
"2"
],
[
"3",
"4"
]
]Array of object[] Array of object
An element in an array entity.
Properties
- key: object[]
-
The key of the element.
Accepts strings, numbers and booleans.
Example: [
"1"
]Array of object - value: object
-
The value of the element.
Accepts strings, numbers and booleans.
Example: false
A filter that can be applied to an array, matching a subset of keys and values. This filter can specify for each index set the set elements that match the filter. When an array is filtered by the filter, the result is an array with only the values whose keys match the set elements of the filter for each index set. If an index set is not included in the filter then it is equivalent to including all set elements of that index set.
Properties
- entityName: string
-
The name of the entity this filter applies to
Example: "entity_704"
- filterId: string
-
The id of this filter
Example: "filter_17"
- indexFilters: object
-
A map of index set name to the array of set elements to use when filtering the array. The index set name may be substituted with the ordinal of the index set within the array. (The first index set of the array has ordinal 0.)
Example: {
"setA": [
"red",
"green",
"blue"
],
"setB": [
true
],
"setC": [
1,
2,
3,
4,
5
]
}object[] Array of object
Properties
- excludedFolderIds: string[]
-
Folders to exclude from the query
Array of string (uuid) - root:
-
The starting point of the query
- timestamp: string (date-time)
-
Scenarios in the defined folder hierarchy will be checked to see whether they have been modified since this time
Properties
- modified: boolean
-
Whether any of the scenarios have been modified
Details changes to a scenario entity.
Properties
- arrayDelta:
-
The changes to apply to an array entity.
- entityName: string
-
The name of the scenario entity being changed.
Example: "MDEVCOST"
- setDelta:
-
The changes to apply to a set entity.
- value: object
-
The new value for the entity.
Accepts strings, numbers and booleans.
Example: -12345.456
An error detail
Properties
- code: string
-
The unique code for this error
Example: "FICO_PLATFORM_VALIDATION_INVALID_VALUE"
- desc: string
-
A description of this error for client information, not intended for display to the end user
Example: "Conflict"
- message: string
-
A message providing further information which may be displayed to the end user
Example: "Conflict"
- target: string
-
An identifier to help the client locate the error. Typically a JSON property name.
- timestamp: string (date-time)
-
When the error was first detected
An error response containing fault or error information
Properties
- error:
-
The top level error
More specific error information
Properties
- code: string
-
The unique code for this error
Example: "FICO-Platform-Validation-FileTooLarge"
- desc: string
-
A description of this error for client information, not intended for display to the end user
Example: "Attachment upload too large"
- innerError:
-
More specific error information
- message: string
-
A message providing further information which may be displayed to the end user
Example: "Files larger than 300 MB cannot be uploaded as attachments."
Metrics for a job that is either executing or has completed execution. Job metrics consist of 3 distinct stages that a job progresses through in order to complete execution.
Properties
- duration: integer (int64)
-
The current duration of this job
- execution:
-
The execution stage
- queued:
-
The queued stage
- started: string (date-time)
-
When this job started
- worker:
-
The worker stage
A phase of a job stage. Each phase may have one or more phase metrics.
Properties
- duration: integer (int64)
-
The current duration of this job phase
- metrics: object
-
This phase's metrics, keyed by name
- name: string
-
The name of this phase
- started: string (date-time)
-
When this phase started
A metric of a job phase
Properties
- count: integer (int32)
-
The count of this phase metric
- dataSize: integer (int64)
-
The size of this phase metric
- duration: integer (int64)
-
The current duration of this job phase metric
- name: string
-
The name of this phase metric
- started: string (date-time)
-
When this phase metric started
A stage of a job metric. A stage is sub-divided into phases.
Properties
- duration: integer (int64)
-
The current duration of this job stage
- name: string
-
The name of this job stage
- phases: object[]
-
This stage's phases
Array of JobPhase - started: string (date-time)
-
When this stage started
The top level error
Properties
- code: string , one of { FICO-Platform-Http-400 , FICO-Platform-Http-404 , FICO-Platform-Http-406 , FICO-Platform-Http-409 , FICO-Platform-Http-413 , FICO-Platform-Http-422 , FICO-Platform-Http-423 , FICO-Platform-Http-429 , FICO-Platform-Http-500 , FICO-Platform-Http-502 , FICO-Platform-Http-503 }
-
The unique code for this error
Example: "FICO-Platform-Http-409"
- desc: string
-
A description of this error for client information, not intended for display to the end user
Example: "Conflict"
- details: object[]
-
Details about specific errors that led to this reported error
Array of ErrorDetail - innerError:
-
More specific error information
- message: string
-
A message providing further information which may be displayed to the end user
Example: "Conflict"
- parentId: string
-
An OpenTracing parent-span ID
Example: "0020000000000001"
- spanId: string
-
An OpenTracing span ID
Example: "b2fb4a1d1a96d312"
- timestamp: string (date-time)
-
When the error was first detected
- traceId: string
-
An OpenTracing trace ID
Example: "463ac35c9f6413ad48485a3953bb6125"
The basic details of an app
Properties
- id: string (uuid)
-
The ID of this app
Example: "00007eff-83f9-05fe-ffff-81007c05fc01"
- name: string (1 to 255 chars) , must match ^[^\p{Cntrl}]*$ & ^\S(?:[\s\S]*\S)?$
-
The name of this app
Example: "My app"
- objectType: string , one of { APP }
-
- url: string (uri)
-
The URL of this app
Example: "/api/apps/00007eff-83f9-05fe-ffff-81007c05fc01"
The basic details of a scenario
Properties
- id: string (uuid)
-
The ID of this scenario
Example: "003584bb-9e7b-eb70-ffca-7b446118b100"
- name: string (1 to 255 chars) , must match ^[^\p{Cntrl}]*$ & ^\S(?:[\s\S]*\S)?$
-
The name of this scenario
Example: "My scenario"
- objectType: string , one of { SCENARIO }
-
- url: string (uri)
-
The URL of this scenario
Example: "/api/scenarios/003584bb-9e7b-eb70-ffca-7b446118b100"
The basic details of a user
Properties
- id: string (uuid)
-
The ID of this user
Example: "0013ebae-4d4c-793c-ffec-1451b28ba2f9"
- name: string (1 to 255 chars) , must match ^[^\p{Cntrl}]*$ & ^\S(?:[\s\S]*\S)?$
-
The name of this user
Example: "My user"
- objectType: string , one of { USER }
-
- url: string (uri)
-
The URL of this user
Example: "/api/admin/users/0013ebae-4d4c-793c-ffec-1451b28ba2f9"
This object represents one scenario in the system. See the wider product documentation for an explanation of what a scenario is used for.
Properties
- app:
-
The app that owns this scenario
- created: string (date-time)
-
The datetime this scenario was created
- id: string (uuid)
-
The ID of this scenario
Example: "003584bb-9e7b-eb70-ffca-7b446118b100"
- name: string (1 to 255 chars) , must match ^[^\p{Cntrl}]*$ & ^\S(?:[\s\S]*\S)?$
-
The name of this scenario
Example: "My scenario"
- objectType: string , one of { SCENARIO }
-
- owner:
-
The user that owns this scenario
- parent:
-
The parent of this scenario
- path: string
-
The path within the repository
Example: "/app-name/folder-a/folder-b/scenario-a"
- scenarioType: string
-
The scenario's custom type if it has one, otherwise SCENARIO.
Example: "SCENARIO"
- shareStatus: string , one of { PRIVATE , READONLY , FULLACCESS }
-
The share status of this scenario
- summary:
-
The summary of this scenario's data
- url: string (uri)
-
The URL of this scenario
Example: "/api/scenarios/003584bb-9e7b-eb70-ffca-7b446118b100"
Properties
- name: string (1 to 255 chars) , must match ^[^\p{Cntrl}]*$ & ^\S(?:[\s\S]*\S)?$
-
The name for the scenario; a suffix will be applied to ensure its name is unique among its siblings
Example: "Scenario Five"
- parent:
-
The parent of the new scenario, an app or folder
- scenarioType: string
-
The type for the new scenario; the app defines the available scenario types. If no scenarioType is supplied it defaults to SCENARIO.
Example: "SCENARIO"
- sourceScenario:
-
The scenario to clone if this is a clone operation. When cloning, the new scenario will have the same scenario type as the source and any supplied scenarioType will be ignored. The scenario will be cloned into the same location as the source scenario if the parent attribute is omitted.
Contains summary information and entity data for a scenario
Properties
- entities: object
-
Array, set and scalar entities, mapped by name
- summary:
-
The data summary for this scenario
A list of changes to apply to the scenario data.
Properties
- deltas: object[]
-
A list of deltas to apply to the scenario data.
Array of EntityDelta - forceLoad: boolean
-
Specifies that the scenario should be loaded.
The entities to retrieve from the scenario data, optionally filtering the arrays
Properties
- entityNames: string[]
-
The names of the entities to retrieve
Example: [
"entity_700",
"entity_701",
"entity_702",
"entity_703",
"entity_704",
"entity_705"
]Array of string - filters: object[]
-
The array filters to apply
Array of ArrayFilter
This object is a container for a number of properties describing the state of a scenario, its data and the most recent job that executed it.
Properties
- executionDuration: integer (int64)
-
The duration of the last execution of this scenario in milliseconds
Example: 500
- executionFinished: string (date-time)
-
When this scenario last finished loading or executing
- executionMode: string
-
The execution mode for the last execution
- executionStarted: string (date-time)
-
When this scenario last started loading or executing
- executionUser:
-
The user that last executed this scenario
- modelDataVersion: integer (int32)
-
The version number of the model data
Example: 2
- modelStatus: string , one of { NA , OK , INSTR , MATHERR , UNKN_PF , UNKN_SYS , PROB , ERROR , EXIT , IOERR , BREAK , NIFCT , NULL , LICERR , STOP , UNKNOWN }
-
The model status for this scenario
Example: "OK"
- objective: number (double)
-
The objective result for this scenario
- problemStatus: string , one of { NA , UNKNOWN , SOLUTION , OPTIMAL , UNFINISHED , INFEASIBLE , UNBOUNDED , OTHER }
-
The problem status for this scenario
Example: "SOLUTION"
- reservedForJob: boolean
-
Whether the scenario is reserved for a job
- state: string , one of { UNLOADED , LOADED , RESULTS , RESULTS_DIRTY }
-
The states that scenario data can be in. UNLOADED - the scenario input data has not been loaded. LOADED - the scenario input data has been loaded but no results have been generated. RESULTS - the scenario has input data has been loaded and the results have been generated. RESULTS_DIRTY - the scenario input data has been changed since the results have been generated.
Example: "LOADED"
Details changes to a scenario set entity.
Properties
- add: object[]
-
The values to add to the set.
Accepts Strings, Numbers and Booleans.
Example: [
"One",
"Two",
"Three",
""
]Array of object - remove: object[]
-
The values to remove from the set.
Accepts Strings, Numbers and Booleans.
Example: [
"alpha",
"charlie",
""
]Array of object
© 2001-2025 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.