//{siteUrl}/{webApp}/service
Get basic information about the WDK service.
GET /
success response
Media type: application/json
Type:
{
"type": "object",
"properties": {
"changePasswordUrl": {
"type": "string"
},
"releaseDate": {
"type": "string",
"examples": [
"1 January 1900 00:00"
]
},
"displayName": {
"type": "string",
"examples": [
"PlasmoDB"
]
},
"userDatasetStoreStatus": {
"type": "object",
"properties": {
"isAvailable": {
"type": "boolean"
}
}
},
"categoriesOntologyName": {
"type": "string",
"examples": [
"Categories"
]
},
"description": {
"type": "string",
"examples": [
"Welcome to the WDK 3.0 Web Service"
]
},
"startupTime": {
"type": "integer",
"examples": [
1534167789601
]
},
"projectId": {
"type": "string",
"examples": [
"PlasmoDB"
]
},
"buildNumber": {
"type": "string",
"examples": [
"38"
]
},
"userProfileProperties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isRequired": {
"type": "boolean",
"examples": [
true
]
},
"displayName": {
"type": "string",
"examples": [
"First Name"
]
},
"name": {
"type": "string",
"examples": [
"firstName"
]
},
"isPublic": {
"type": "boolean",
"examples": [
true
]
}
}
}
},
"authentication": {
"type": "object",
"properties": {
"oauthUrl": {
"type": "string",
"examples": [
""
]
},
"method": {
"type": "string",
"examples": [
"USER_DB"
]
},
"oauthClientId": {
"type": "string",
"examples": [
""
]
},
"oauthClientUrl": {
"type": "string",
"examples": [
"http://plasmodb.vm.ebrc.org/plasmo.vm/service"
]
}
}
}
}
}
Log a client side error.
POST /client-errors
Media type: application/json
Type: any
No content
Not Acceptable
GET /login
GET /login/verification
Logs the current user out and adds them to a guest session.
GET /logout
Create an anti-forgery state token, add to the session, and return. This is requested by the client when the user tries to log in using an OAuth2 server. The value generated will be used to check the state token passed to the oauth processing action. They must match for the login to succeed. A new value is generated each time. All but one of "overlapping" login attempts by the same user will thus fail.
GET /oauth/state-token
GET /ontologies
Get the details of the specified ontology.
GET /ontologies/{ontologyName}
(This should be changed to a GET.) Get a report of ontology terms, each shown as a path indicating the term's place in the ontology tree. The filters are key-value pairs that are applied to the Properties of each term. Terms that match the provided filters exactly are returned.
POST /ontologies/{ontologyName}/filteredOntologyTerms
Get a listing of supported record types, either in summary or detail. Each Record Type describes one of the (potentially many) types of records that are available through the API . Each Record Type includes a set of records of that type, and a set of searches that return different sets of those records. The sets of records and searches are available in sub-endpoints. Record types, and their records and searches, are the primary means of accessing data through this API. Individual records serve their data through "attributes," which are single-valued (e.g. "age") and "tables," which are multi-valued (e.g. "friends").
GET /record-types
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-04/schema",
"oneOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "array",
"items": {
"type": "object",
"definitions": {
"properties": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"required": [
"urlSegment",
"useBasket",
"formats",
"hasAllRecordsQuery",
"displayName",
"description",
"shortDisplayName",
"shortDisplayNamePlural",
"tables",
"displayNamePlural",
"fullName",
"attributes",
"primaryKeyColumnRefs",
"searches"
],
"additionalProperties": false,
"properties": {
"fullName": {
"type": "string"
},
"displayName": {
"type": "string"
},
"displayNamePlural": {
"type": "string"
},
"shortDisplayName": {
"type": "string"
},
"shortDisplayNamePlural": {
"type": "string"
},
"nativeDisplayName": {
"type": "string"
},
"nativeDisplayNamePlural": {
"type": "string"
},
"nativeShortDisplayName": {
"type": "string"
},
"nativeShortDisplayNamePlural": {
"type": "string"
},
"urlSegment": {
"type": "string"
},
"iconName": {
"type": "string"
},
"useBasket": {
"type": "boolean"
},
"description": {
"type": "string"
},
"formats": {
"description": "List of reporters",
"type": "array",
"items": {
"type": "object",
"required": [
"isInReport",
"displayName",
"name",
"scopes",
"type"
],
"additionalProperties": false,
"properties": {
"isInReport": {
"type": "boolean"
},
"displayName": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"enum": [
"record",
"results"
]
}
},
"type": {
"type": "string"
},
"newBuild": {
"type": "string"
},
"reviseBuild": {
"type": "string"
}
}
}
},
"properties": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"hasAllRecordsQuery": {
"type": "boolean"
},
"primaryKeyColumnRefs": {
"type": "array",
"items": {
"type": "string"
}
},
"recordIdAttributeName": {
"type": "string"
},
"attributes": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"align": {
"type": "string",
"enum": [
"center",
"left",
"right"
]
},
"displayName": {
"type": "string"
},
"formats": {
"description": "List of reporters",
"type": "array",
"items": {
"type": "object",
"required": [
"isInReport",
"displayName",
"name",
"scopes",
"type"
],
"additionalProperties": false,
"properties": {
"isInReport": {
"type": "boolean"
},
"displayName": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"enum": [
"record",
"results"
]
}
},
"type": {
"type": "string"
},
"newBuild": {
"type": "string"
},
"reviseBuild": {
"type": "string"
}
}
}
},
"help": {
"type": "string"
},
"isDisplayable": {
"type": "boolean"
},
"isInReport": {
"type": "boolean"
},
"isRemovable": {
"type": "boolean"
},
"isSortable": {
"type": "boolean"
},
"name": {
"type": "string"
},
"properties": {
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"truncateTo": {
"type": "integer"
},
"type": {
"type": "string"
}
}
}
},
"tables": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"attributes"
],
"properties": {
"displayName": {
"type": "string"
},
"help": {
"type": "string"
},
"isDisplayable": {
"type": "boolean"
},
"isInReport": {
"type": "boolean"
},
"name": {
"type": "string"
},
"attributes": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"align": {
"type": "string",
"enum": [
"center",
"left",
"right"
]
},
"displayName": {
"type": "string"
},
"formats": {
"description": "List of reporters",
"type": "array",
"items": {
"type": "object",
"required": [
"isInReport",
"displayName",
"name",
"scopes",
"type"
],
"additionalProperties": false,
"properties": {
"isInReport": {
"type": "boolean"
},
"displayName": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"enum": [
"record",
"results"
]
}
},
"type": {
"type": "string"
},
"newBuild": {
"type": "string"
},
"reviseBuild": {
"type": "string"
}
}
}
},
"help": {
"type": "string"
},
"isDisplayable": {
"type": "boolean"
},
"isInReport": {
"type": "boolean"
},
"isRemovable": {
"type": "boolean"
},
"isSortable": {
"type": "boolean"
},
"name": {
"type": "string"
},
"properties": {
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"truncateTo": {
"type": "integer"
},
"type": {
"type": "string"
}
}
}
},
"properties": {
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"type": {
"type": "string"
}
}
}
},
"searches": {
"type": "array",
"items": {
"type": "object",
"definitions": {
"properties": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"filter-def-array": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"isViewOnly"
],
"properties": {
"name": {
"type": "string"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string"
},
"isViewOnly": {
"type": "boolean"
}
}
}
}
},
"required": [
"urlSegment",
"fullName",
"displayName",
"shortDisplayName",
"outputRecordClassName",
"defaultAttributes",
"defaultSorting",
"dynamicAttributes",
"defaultSummaryView",
"noSummaryOnSingleRecord",
"summaryViewPlugins",
"filters",
"isAnalyzable",
"properties",
"groups",
"paramNames",
"isCacheable"
],
"additionalProperties": false,
"properties": {
"defaultAttributes": {
"type": "array",
"items": {
"type": "string"
}
},
"defaultSummaryView": {
"type": "string"
},
"noSummaryOnSingleRecord": {
"type": "boolean"
},
"description": {
"type": "string"
},
"displayName": {
"type": "string"
},
"fullName": {
"type": "string"
},
"newBuild": {
"type": "string"
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"isViewOnly"
],
"properties": {
"name": {
"type": "string"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string"
},
"isViewOnly": {
"type": "boolean"
}
}
}
},
"isAnalyzable": {
"type": "boolean"
},
"allowedPrimaryInputRecordClassNames": {
"type": "array",
"items": {
"type": "string"
}
},
"allowedSecondaryInputRecordClassNames": {
"type": "array",
"items": {
"type": "string"
}
},
"dynamicAttributes": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"align": {
"type": "string",
"enum": [
"center",
"left",
"right"
]
},
"displayName": {
"type": "string"
},
"formats": {
"description": "List of reporters",
"type": "array",
"items": {
"type": "object",
"required": [
"isInReport",
"displayName",
"name",
"scopes",
"type"
],
"additionalProperties": false,
"properties": {
"isInReport": {
"type": "boolean"
},
"displayName": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string",
"enum": [
"record",
"results"
]
}
},
"type": {
"type": "string"
},
"newBuild": {
"type": "string"
},
"reviseBuild": {
"type": "string"
}
}
}
},
"help": {
"type": "string"
},
"isDisplayable": {
"type": "boolean"
},
"isInReport": {
"type": "boolean"
},
"isRemovable": {
"type": "boolean"
},
"isSortable": {
"type": "boolean"
},
"name": {
"type": "string"
},
"properties": {
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"truncateTo": {
"type": "integer"
},
"type": {
"type": "string"
}
}
}
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"description",
"displayName",
"displayType",
"name",
"isVisible"
],
"additionalProperties": false,
"properties": {
"description": {
"type": "string"
},
"displayName": {
"type": "string"
},
"displayType": {
"type": "string"
},
"name": {
"type": "string"
},
"isVisible": {
"type": "boolean"
},
"parameters": {
"oneOf": [
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
}
}
},
"parameters": {
"type": "array",
"items": [
{
"type": "object",
"required": [
"countOnlyLeaves",
"dependentParams",
"displayName",
"filterDataTypeDisplayName",
"group",
"help",
"hideEmptyOntologyNodes",
"isReadOnly",
"length",
"minSelectedCount",
"name",
"ontology",
"type",
"values"
],
"additionalProperties": false,
"properties": {
"dependentParams": {
"type": "array",
"description": "TODO: type of array elements"
},
"displayName": {
"type": "string"
},
"group": {
"type": "string"
},
"help": {
"type": "string"
},
"isReadOnly": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"name": {
"type": "string"
},
"initialDisplayValue": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"filter"
]
},
"countOnlyLeaves": {
"type": "boolean"
},
"filterDataTypeDisplayName": {
"type": "string"
},
"hideEmptyOntologyNodes": {
"type": "boolean"
},
"minSelectedCount": {
"type": "integer"
},
"ontology": {
"type": "array",
"items": {
"type": "object",
"properties": {
"term": {
"type": "string"
},
"parent": {
"type": "string"
},
"display": {
"type": "string"
},
"description": {
"type": "string"
},
"type": {
"type": "string"
},
"units": {
"type": "string"
},
"isRange": {
"type": "boolean"
},
"precision": {
"type": "integer"
},
"variableName": {
"type": "string"
}
}
}
},
"values": {
"type": "object",
"patternProperties": {
"^.+$": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
},
{
"type": "object",
"required": [
"dependentParams",
"displayName",
"group",
"help",
"isReadOnly",
"length",
"name",
"type"
],
"additionalProperties": false,
"properties": {
"dependentParams": {
"type": "array",
"description": "TODO: type of array elements"
},
"displayName": {
"type": "string"
},
"group": {
"type": "string"
},
"help": {
"type": "string"
},
"isReadOnly": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"name": {
"type": "string"
},
"initialDisplayValue": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"input-step"
]
}
}
},
{
"type": "object",
"required": [
"countOnlyLeaves",
"dependentParams",
"depthExpanded",
"displayName",
"displayType",
"group",
"help",
"isReadOnly",
"length",
"maxSelectedCount",
"minSelectedCount",
"multiPick",
"name",
"type",
"vocabulary"
],
"additionalProperties": false,
"properties": {
"dependentParams": {
"type": "array",
"description": "TODO: type of array elements"
},
"displayName": {
"type": "string"
},
"group": {
"type": "string"
},
"help": {
"type": "string"
},
"isReadOnly": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"name": {
"type": "string"
},
"initialDisplayValue": {
"type": "string"
},
"countOnlyLeaves": {
"type": "boolean"
},
"depthExpanded": {
"type": "integer"
},
"displayType": {
"type": "string",
"enum": [
"select"
]
},
"maxSelectedCount": {
"type": "integer"
},
"minSelectedCount": {
"type": "integer"
},
"multiPick": {
"type": "boolean"
},
"type": {
"type": "string",
"enum": [
"vocabulary"
]
},
"vocabulary": {
"type": "array",
"items": {
"type": "array",
"maxItems": 3,
"minItems": 3,
"items": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
}
},
{
"type": "object",
"required": [
"dependentParams",
"displayName",
"group",
"help",
"increment",
"isReadOnly",
"length",
"max",
"min",
"name",
"type"
],
"additionalProperties": false,
"properties": {
"dependentParams": {
"type": "array",
"description": "TODO: type of array elements"
},
"displayName": {
"type": "string"
},
"group": {
"type": "string"
},
"help": {
"type": "string"
},
"isReadOnly": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"name": {
"type": "string"
},
"initialDisplayValue": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"number"
]
},
"min": {
"type": "number"
},
"max": {
"type": "number"
},
"increment": {
"type": "number"
}
}
},
{
"type": "object",
"required": [
"dependentParams",
"displayName",
"group",
"help",
"isReadOnly",
"length",
"maxDate",
"minDate",
"name",
"type"
],
"additionalProperties": false,
"properties": {
"dependentParams": {
"type": "array",
"description": "TODO: type of array elements"
},
"displayName": {
"type": "string"
},
"group": {
"type": "string"
},
"help": {
"type": "string"
},
"isReadOnly": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"name": {
"type": "string"
},
"initialDisplayValue": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"date"
]
},
"minDate": {
"type": "string"
},
"maxDate": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"dependentParams",
"displayName",
"group",
"help",
"isReadOnly",
"length",
"name",
"parsers",
"type"
],
"additionalProperties": false,
"properties": {
"dependentParams": {
"type": "array",
"description": "TODO: type of array elements"
},
"displayName": {
"type": "string"
},
"group": {
"type": "string"
},
"help": {
"type": "string"
},
"isReadOnly": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"name": {
"type": "string"
},
"initialDisplayValue": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"input-dataset"
]
},
"defaultIdList": {
"type": "string"
},
"parsers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
},
{
"type": "object",
"required": [
"dependentParams",
"displayName",
"group",
"help",
"isReadOnly",
"length",
"name",
"type"
],
"additionalProperties": false,
"properties": {
"dependentParams": {
"type": "array",
"description": "TODO: type of array elements"
},
"displayName": {
"type": "string"
},
"group": {
"type": "string"
},
"help": {
"type": "string"
},
"isReadOnly": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"name": {
"type": "string"
},
"initialDisplayValue": {
"type": "string"
},
"length": {
"type": "integer"
},
"type": {
"type": "string",
"enum": [
"string"
]
}
}
},
{
"type": "object",
"required": [
"dependentParams",
"displayName",
"group",
"help",
"isReadOnly",
"length",
"name",
"type"
],
"additionalProperties": false,
"properties": {
"dependentParams": {
"type": "array",
"description": "TODO: type of array elements"
},
"displayName": {
"type": "string"
},
"group": {
"type": "string"
},
"help": {
"type": "string"
},
"isReadOnly": {
"type": "boolean"
},
"isVisible": {
"type": "boolean"
},
"name": {
"type": "string"
},
"initialDisplayValue": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"timestamp"
]
}
}
}
]
},
"properties": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"outputRecordClassName": {
"type": "string"
},
"shortDisplayName": {
"type": "string"
},
"summary": {
"type": "string"
},
"summaryViewPlugins": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"description": {
"type": "string"
},
"displayName": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"urlSegment": {
"type": "string"
},
"iconName": {
"type": "string"
},
"help": {
"type": "string"
},
"searchVisibleHelp": {
"type": "string"
},
"reviseBuild": {
"type": "string"
},
"defaultSorting": {
"type": "array",
"items": {
"type": "object",
"required": [
"attributeName",
"direction"
],
"additionalProperties": false,
"properties": {
"attributeName": {
"type": "string"
},
"direction": {
"type": "string",
"enum": [
"ASC",
"DESC"
]
}
}
}
},
"paramNames": {
"type": "array",
"items": {
"type": "string"
}
},
"queryName": {
"type": "string"
},
"isCacheable": {
"type": "boolean"
}
}
}
}
}
}
}
]
}
Get a detailed description of the specified record type. This includes properties of the type, eg, whether it is displayable, and the attributes and tables that each record of this type will have, as well as the details of searches available for this record type.
GET /record-types/{recordType}
(GET by POST) get the attributes and tables of a record instance
POST /record-types/{recordType}/records
Media type: application/json
Type: any
Get a list of searches available for this record type. The information returned here is sufficient to form a menu of available searches for this record type. It does not include information about the parameters of each search. (The record-types endpoint returns similar information for a comprehensive list of searches for all record types, suitable to build a comprehensive menu of searches.)
GET /record-types/{record-type}/searches
Get detailed information about the specified search, including all parameters and the allowed values for them. Some types of parameters (vocabulary and filter) might depend on the value of other parameters to determine their allowed values. For example, the allowed values for a City parameter might depend on the previously set value for a State/Province parameter. This endpoint uses default parameter values to resolve those dependencies. The response has detailed parameter information, including vocabularies and metadata as appropriate. This endpoint is typically used to render a "new" search page (i.e. filled with default parameter values).
GET /record-types/{record-type}/searches/{searchName}
Similar to the GET endpoint but uses supplied parameter values, rather than default parameter values. Missing or invalid parameter values are replaced with valid default values. Response is the same as the GET, but includes error messages for any invalid or missing parameter values. This endpoint is typically used to render a page to revise a search.
POST /record-types/{record-type}/searches/{searchName}
POST /record-types/{record-type}/searches/{searchName}/refreshed-dependent-params
Get a get parameter's details, including vocab if appropriate. For dependent params, if stepId
provided, this is a step revise; use the step to get depended param values. Otherwise, use defaults. Client will need to call this to get filter params and enum params with displayType="typeAhead".
GET /record-types/{record-type}/searches/{searchName}/{paramName}
GET by POST. Get a dependent parameter's details, including vocab.. The body must contain a JSON map of depended param values. (These will be validated). Because of complexity of dependent parameters' relationship, the client must guarantee these calls are ordered correctly.
POST /record-types/{record-type}/searches/{searchName}/{paramName}
POST /record-types/{record-type}/searches/{searchName}/{paramName}/ontology-term-summary
POST /record-types/{record-type}/searches/{searchName}/{paramName}/summary-counts
GET /record-types/{record-type}/searches/{search-name}/reports
POST /record-types/{record-type}/searches/{search-name}/reports/standard
POST /record-types/{record-type}/searches/{search-name}/reports/{reportName}
POST /record-types/{record-type}/searches/{search-name}/reports/filter-summary/{filterName}
Get a list of summary info about a set of strategies
GET /strategy-list
idList
open, close, delete
a multi-column list of public strategies
GET /strategy-list/public
Administrative access required for this function. Unclosed connection info for the app database.
GET /system/appdb/connections
Administrative access required for this function. Usage stats for various in memory data stores.
GET /system/caches
This service provides the ability to store a combination of the specification for a search + a specification for a report (i.e. everything WDK needs to produce a reporter output data stream), to be accessed later via a produced ID.
The POST creates and validates a temporary result specification and stores it in the answer request cache. The submitted JSON must contain either a step ID or a search name+config, i.e.
{ stepId: integer, // valid step ID for this user reportName: string, // name of report reportConfig: object // configuration of this report }
OR
{ searchName: string, // question name = url segment searchConfig: object, // standard answer spec object reportName: string, // name of report reportConfig: object // configuration of this report }
POST /temporary-results
Looks up the spec, executes the search, creates the specified report, and streams the result
GET /temporary-results/{id}
ID returned by a temporary results POST request
Success
Accepts an array of email addresses and attempts to locate the user ids (if any) associated with them. Returns an array of objects containing a single email as a key mapped to the matching user id.
If an email address is not in the system, it will be excluded from the output list.
POST /user-id-query
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
"emails": {
"type": "array",
"items": {
"type": "string",
"format": "email"
}
}
},
"required": [
"emails"
]
}
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"^.+$": {
"description": "Key/value object where the key is an email address and the value is the id for the user matching that email",
"type": "integer"
}
}
}
}
},
"required": [
"results"
]
}
Reset a user's password.
POST /user-password-reset
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email"
}
},
"required": [
"email"
]
}
GET /user-datasets/config
Register a new, unverified user, and return the user's new ID.
POST /users
Media type: application/json
Type: any
Media type: responses
Type: any
Get the details of the current user or a user by ID.
GET /users/{user-id}
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-04/schema",
"definitions": {
"userProperties": {
"type": "object",
"required": [
"firstName",
"lastName",
"organization",
"middleName"
],
"additionalProperties": false,
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"organization": {
"type": "string"
},
"middleName": {
"type": "string"
}
}
},
"userPreferences": {
"type": "object",
"required": [
"global",
"project"
],
"additionalProperties": false,
"properties": {
"global": {
"title": "Map <String, String>",
"description": "An object which can only contain string values.",
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^.+$": {
"type": "string"
}
}
},
"project": {
"title": "Map <String, String>",
"description": "An object which can only contain string values.",
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^.+$": {
"type": "string"
}
}
}
}
}
},
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "integer"
},
"isGuest": {
"type": "boolean"
},
"preferences": {
"type": "object",
"required": [
"global",
"project"
],
"additionalProperties": false,
"properties": {
"global": {
"title": "Map <String, String>",
"description": "An object which can only contain string values.",
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^.+$": {
"type": "string"
}
}
},
"project": {
"title": "Map <String, String>",
"description": "An object which can only contain string values.",
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^.+$": {
"type": "string"
}
}
}
}
},
"properties": {
"type": "object",
"required": [
"firstName",
"lastName",
"organization",
"middleName"
],
"additionalProperties": false,
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"organization": {
"type": "string"
},
"middleName": {
"type": "string"
}
}
}
},
"required": [
"email",
"id",
"isGuest",
"properties"
],
"additionalProperties": false
}
Update one or more details about a user. Only supplied fields are updated.
PATCH /users/{user-id}
Replace all user details with those provided.
PUT /users/{user-id}
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type: any
Delete this user.
DELETE /users/{user-id}
Either the ID of a user or the string "current" for the current user.
Get a list of the user's baskets. Returns a JSON object mapping basket name to the number of records in that basket. For now only one basket is supported per record-type, for those record-types that allow baskets. All allowed baskets, including empty ones, are returned in this listing.
GET /users/{user-id}/baskets
Either the ID of a user or the string "current" for the current user.
Success
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"patternProperties": {
"^.+$": {
"type": "integer"
}
}
}
Returns detailed information for the basket of the specified name.
GET /users/{user-id}/baskets/{basketName}
Either the ID of a user or the string "current" for the current user.
Add and/or remove records to/from this basket.
PATCH /users/{user-id}/baskets/{basketName}
Either the ID of a user or the string "current" for the current user.
DELETE /users/{user-id}/baskets/{basketName}
Either the ID of a user or the string "current" for the current user.
Get a list of the user's baskets. Returns a JSON object mapping basket name to the number of records in that basket. For now only one basket is supported per record-type, for those record-types that allow baskets. All allowed baskets, including empty ones, are returned in this listing.
GET /users/{user-id}/datasets
Either the ID of a user or the string "current" for the current user.
Success
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"patternProperties": {
"^.+$": {
"type": "integer"
}
}
}
Returns detailed information for the basket of the specified name.
GET /users/{user-id}/datasets/{basketName}
Either the ID of a user or the string "current" for the current user.
Add and/or remove records to/from this basket.
PATCH /users/{user-id}/datasets/{basketName}
Either the ID of a user or the string "current" for the current user.
DELETE /users/{user-id}/datasets/{basketName}
Either the ID of a user or the string "current" for the current user.
Returns array of user's favorites (takes rc param to filter)
GET /users/{user-id}/favorites
Either the ID of a user or the string "current" for the current user.
Success
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"primaryKey",
"recordClassName",
"displayName",
"description",
"group"
],
"properties": {
"id": {
"type": "integer"
},
"primaryKey": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
},
"recordClassName": {
"type": "string"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string",
"maxLength": 200
},
"group": {
"type": "string",
"maxLength": 50
}
}
}
}
Accepts instructions for editing/deleting multiple favorites
PATCH /users/{user-id}/favorites
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"anyOf": [
{
"required": [
"delete"
]
},
{
"required": [
"undelete"
]
}
],
"properties": {
"delete": {
"type": "array",
"items": {
"type": "integer"
}
},
"undelete": {
"type": "array",
"items": {
"type": "integer"
}
}
}
}
Success
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"required": [
"delete",
"undelete"
],
"properties": {
"delete": {
"type": "integer"
},
"undelete": {
"type": "integer"
}
}
}
Adds the passed favorite (object) or favorites (array) to user's favorites and returns with IDs
POST /users/{user-id}/favorites
Either the ID of a user or the string "current" for the current user.
Returns the specified favorite
GET /users/{user-id}/favorites/{favoriteId}
Either the ID of a user or the string "current" for the current user.
user favorite id
Success
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"primaryKey",
"recordClassName",
"displayName",
"description",
"group"
],
"properties": {
"id": {
"type": "integer"
},
"primaryKey": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
},
"recordClassName": {
"type": "string"
},
"displayName": {
"type": "string"
},
"description": {
"type": "string",
"maxLength": 200
},
"group": {
"type": "string",
"maxLength": 50
}
}
}
}
Replaces the specified favorite with the passed one
PATCH /users/{user-id}/favorites/{favoriteId}
Either the ID of a user or the string "current" for the current user.
user favorite id
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
"description": {
"type": "string",
"maxLength": 200
},
"group": {
"type": "string",
"maxLength": 50
}
},
"required": [
"description",
"group"
]
}
No content
Deletes the specified favorite
DELETE /users/{user-id}/favorites/{favoriteId}
Either the ID of a user or the string "current" for the current user.
user favorite id
No content
Takes array of {record-type + primary keys} objects as JSON and returns object containing the subset of those that are favorites.
POST /users/{user-id}/favorites/query
Either the ID of a user or the string "current" for the current user.
Get a listing of this user's preferences. (For preferences associated with a specific search strategy step, see the /step endpoints). Returns a JSON map of user preference name to user preference value.
GET /users/{user-id}/preference
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
"project": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"global": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
Update preferences passed (missing prefs are unaffected)
PATCH /users/{user-id}/preference
Either the ID of a user or the string "current" for the current user.
Replace all user preferences with those passed in (delete missing prefs)
PUT /users/{user-id}/preference
Either the ID of a user or the string "current" for the current user.
POST /users/{user-id}/steps
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-04/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"customName": {
"type": "string"
},
"expanded": {
"type": "boolean"
},
"expandedName": {
"type": "string"
},
"searchName": {
"type": "string"
},
"searchConfig": {
"type": "object",
"additionalProperties": false,
"properties": {
"parameters": {
"title": "Map <String, String>",
"description": "An object which can only contain string values.",
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^.+$": {
"type": "string"
}
}
},
"legacyFilterName": {
"type": "string"
},
"wdkWeight": {
"type": "integer"
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"value": {},
"disabled": {
"type": "boolean"
}
}
}
},
"columnFilters": {
"type": "object",
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "object"
}
}
}
}
},
"viewFilters": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "object"
}
}
}
},
"displayPreferences": {
"type": "object",
"properties": {
"columnSelection": {
"description": "Names of user selected display columns for a step",
"type": "array",
"minItems": 1,
"items": {
"type": "string"
}
},
"sortColumns": {
"description": "Ordered list of column names to sort direction",
"type": "array",
"items": {
"type": "object",
"minProperties": 1,
"maxProperties": 3,
"properties": {
"name": {
"description": "The name of a column",
"type": "string"
},
"direction": {
"description": "The direction to sort the column",
"type": "string",
"enum": [
"ASC",
"DESC"
]
}
}
}
}
}
}
},
"required": [
"searchConfig",
"searchName"
]
}
Success
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-04/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "number"
}
}
}
GET /users/{user-id}/steps/{step-id}
Either the ID of a user or the string "current" for the current user.
Retrieve a list of analyses that have been run on this step.
GET /users/{user-id}/steps/{stepId}/analyses
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "array",
"items": {
"type": "object",
"required": [
"analysisId",
"displayName"
],
"properties": {
"analysisId": {
"type": "integer",
"examples": [
100108390
]
},
"displayName": {
"type": "string",
"examples": [
"Gene Ontology Enrichment"
]
}
}
}
}
Example:
[
{
"analysisId": 100108390,
"displayName": "Gene Ontology Enrichment"
}
]
Creates a new analysis (i.e. tab)
POST /users/{user-id}/steps/{stepId}/analyses
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type: any
Example:
{
"analysisType": "string",
"parameters": {},
"customName": "string" // optional, generated if absent
}
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
"analysisName": {
"type": "string"
},
"answerValueHash": {
"type": "string"
},
"formParams": {
"type": "object",
"patternProperties": {
"^.+$": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"analysisId": {
"type": "integer"
},
"stepId": {
"type": "integer"
},
"displayName": {
"type": "string"
},
"shortDescription": {
"type": "string"
},
"description": {
"type": "string"
},
"hasParams": {
"type": "boolean"
},
"status": {
"type": "string"
},
"invalidStepReason": {
"type": [
"string",
"null"
]
}
},
"required": [
"analysisName",
"answerValueHash",
"formParams",
"analysisId",
"stepId",
"displayName",
"shortDescription",
"description",
"hasParams",
"status",
"invalidStepReason"
]
}
Example:
{
"analysisName": "some analysis name",
"analysisId": 1234,
"stepId": 1234,
"answerValueHash": "MD5 hash",
"displayName": "some customizable name",
"shortDescription": "a short description",
"description": "a longer description",
"hasParams": true,
"status": "a status?",
"formParams": {
"param name": [
"some",
"param",
"values"
]
},
"invalidStepReason": null
}
Deletes this analysis and associated run if present
DELETE /users/{user-id}/steps/{stepId}/analyses/{analysis-id}
Either the ID of a user or the string "current" for the current user.
Analysis instance id.
Returns the resource above for form population
GET /users/{user-id}/steps/{stepId}/analyses/{analysis-id}
Either the ID of a user or the string "current" for the current user.
Analysis instance id.
analysisType is not supported; if parameters is modified, then results are cleared
PATCH /users/{user-id}/steps/{stepId}/analyses/{analysis-id}
Either the ID of a user or the string "current" for the current user.
Analysis instance id.
Media type: application/json
Type: any
Example:
{
"parameters": {}, // (optional)
"customName": "string" // (optional)
}
No Content
Unprocessable entry
Media type: application/json
Type: Can not resolve ../../../../schema/includes/string-array.json
COMPLETE: return 200 + plugin-specific JSON object result, else 204: No Content or some other code meaning use view for the current status code rather than the custom component to display the result
GET /users/{user-id}/steps/{stepId}/analyses/{analysis-id}/result
Either the ID of a user or the string "current" for the current user.
Analysis instance id.
Kicks off a run
HTTP codes based on status:
- RUNNING: return 202: Accepted
- INVALID: 400 or 406
- Any of the other statuses (below), run it, return 202: Accepted
COMPLETE
NOT_YET_RUN
STEP_REVISED // new analysis, created as copy during step revise
INTERRUPTED // server shutdown or other interruption
ERROR // no longer running due to runtime error
EXPIRED // plugin ran too long and was shut down
OUT_OF_DATE // has been run but results cache purged
POST /users/{user-id}/steps/{stepId}/analyses/{analysis-id}/result
Either the ID of a user or the string "current" for the current user.
Analysis instance id.
status RUNNING
, COMPLETE
, NOT_YET_RUN
, STEP_REVISED
, INTERRUPTED
, ERROR
, EXPIRED
, OUT_OF_DATE
status INVALID
status INVALID
GET /users/{user-id}/steps/{stepId}/analyses/{analysis-id}/result/status
Either the ID of a user or the string "current" for the current user.
Analysis instance id.
status: enum
NOT_YET_RUN = user never submitted form and not auto-run
STEP_REVISED = new analysis, created as copy during step revise
INVALID = made for a step it does not support; should never be run
RUNNING = currently running (or interrupted but not yet 'fixed')
COMPLETE = completed successfully
INTERRUPTED = server shutdown or other interruption
ERROR = no longer running due to runtime error
EXPIRED = plugin ran too long and was shut down
OUT_OF_DATE = has been run but results cache purged
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"NOT_YET_RUN",
"STEP_REVISED",
"INVALID",
"RUNNING",
"COMPLETE",
"INTERRUPTED",
"ERROR",
"EXPIRED",
"OUT_OF_DATE"
]
}
},
"additionalProperties": false,
"required": [
"status"
]
}
Get names, display names, and icons of available tools.
GET /users/{user-id}/steps/{stepId}/analysis-types
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"type": "array",
"items": {
"type": "object",
"properties": {
"hasParameters": {
"type": "boolean"
},
"displayName": {
"type": "string",
"examples": [
"Gene Ontology Enrichment"
]
},
"releaseVersion": {
"type": "string",
"examples": [
"22"
]
},
"name": {
"type": "string",
"examples": [
"go-enrichment"
]
},
"description": {
"type": "string",
"examples": [
"<p>Some HTML String</p>"
]
},
"customThumbnail": {
"type": "string",
"examples": [
"wdkCustomization/images/go-analysis-logo.png"
]
},
"shortDescription": {
"type": "string",
"examples": [
"Find Gene Ontology terms that are enriched in your gene result."
]
}
}
}
}
Get (possibly dynamic) form creation information + default values.
GET /users/{user-id}/steps/{stepId}/analysis-types/{analysis-type-name}
Either the ID of a user or the string "current" for the current user.
Returns an array of strategies, ordered by strategy ID. Does not run steps or update their estimated size. This endpoint is fast, to support a strategies listing display. estimatedSize is absent if not known.
GET /users/{user-id}/strategy
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-04/schema",
"type": "array",
"items": {
"type": "object",
"required": [
"rootStepId",
"isDeleted",
"isSaved",
"isValid",
"isPublic",
"isExample"
],
"additionalProperties": false,
"properties": {
"strategyId": {
"type": "integer"
},
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"author": {
"type": "string"
},
"rootStepId": {
"type": "integer"
},
"recordClassName": {
"type": [
"string",
"null"
]
},
"signature": {
"type": "string"
},
"createdTime": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{1,6})?$"
},
"lastViewed": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{1,6})?$"
},
"lastModified": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{1,6})?$"
},
"releaseVersion": {
"type": "string"
},
"isPublic": {
"type": "boolean"
},
"isSaved": {
"type": "boolean"
},
"isValid": {
"type": "boolean"
},
"isDeleted": {
"type": "boolean"
},
"isExample": {
"type": "boolean"
},
"organization": {
"type": "string"
},
"estimatedSize": {
"type": "integer"
},
"leafAndTransformStepCount": {
"type": "integer"
},
"nameOfFirstStep": {
"type": "string"
}
}
}
}
Create a new strategy either from a provided tree of steps, or by duplicating an existing strategy. In the former case, provide the tree of steps in the 'stepsTree' property, and do not provide the 'sourceStrategy' property. In the latter case, do the opposite.
Using the stepsTree property
With Source Strategy
POST /users/{user-id}/strategy
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-04/schema",
"definitions": {
"step": {
"type": "object",
"required": [
"stepId"
],
"additionalProperties": false,
"properties": {
"stepId": {
"type": "integer"
},
"primaryInput": {
"$ref": "#/definitions/step"
},
"secondaryInput": {
"$ref": "#/definitions/step"
}
}
}
},
"oneOf": [
{
"type": "object",
"description": "Strategy copy request",
"properties": {
"sourceStrategySignature": {
"description": "signature of the source strategy to copy",
"type": "string"
}
},
"additionalProperties": false,
"required": [
"sourceStrategySignature"
]
},
{
"type": "object",
"description": "New strategy request",
"properties": {
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"savedName": {
"type": "string"
},
"isSaved": {
"type": "boolean"
},
"isPublic": {
"type": "boolean"
},
"stepTree": {
"$ref": "#/definitions/step"
}
},
"additionalProperties": false,
"required": [
"name",
"isSaved",
"isPublic",
"stepTree"
]
}
]
}
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-04/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "number"
}
}
}
Update the isDeleted status of one or more strategies. Setting the flag to true deletes the strategy; setting it to false restores it. See DELETE strategies/{id} for a description of the semantics of delete.
PATCH /users/{user-id}/strategy
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type:
{
"$schema": "http://json-schema.org/draft-04/schema",
"type": "array",
"description": "Collection of strategies to delete/restore",
"items": {
"type": "object",
"required": [
"isDeleted",
"strategyId"
],
"additionalProperties": false,
"properties": {
"strategyId": {
"description": "Strategy ID",
"type": "integer"
},
"isDeleted": {
"description": "Whether or not the given strategy ID should be marked as deleted.",
"type": "boolean"
}
}
}
}
No Content
GET /users/{user-id}/strategy/{strategy-id}
Either the ID of a user or the string "current" for the current user.
GET /users/{user-id}/user-datasets
Either the ID of a user or the string "current" for the current user.
DELETE /users/{user-id}/user-datasets/{datasetId}
Either the ID of a user or the string "current" for the current user.
GET /users/{user-id}/user-datasets/{datasetId}
Either the ID of a user or the string "current" for the current user.
PUT /users/{user-id}/user-datasets/{datasetId}/meta
Either the ID of a user or the string "current" for the current user.
Media type: application/json
Type: any
GET /users/{user-id}/user-datasets/{datasetId}/user-datafiles/{datafileName}
Either the ID of a user or the string "current" for the current user.
PATCH /users/{user-id}/user-datasets/sharing