REST API
This is the specification of the PROMINENCE REST API.
Table of contents
Jobs API
This API exposes endpoints for managing jobs.
List Jobs
GET /v1/jobs
List jobs.
Example Request
GET /v1/jobs HTTP/1.1
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Query Parameters
- completed - If parameter is 
true, completed jobs will be returned. The default is for only idle and running jobs to be returned. - num - Number of jobs to return.
 - constraint - Constraint in the form of key-value pairs.
 
Status Codes
- 200 - no error
 - 401 - unauthorized
 
Get a Job
GET /v1/jobs/<id>
Get detailed information about a job.
Example Request
GET /v1/jobs/1 HTTP/1.1
Example Response
HTTP/1.1 200 OK
Content-Type: application/json
Query Parameters
- completed - If parameter is 
true, completed jobs will be returned. The default is for only idle and running jobs to be returned. 
Status Codes
- 200 - no error
 - 401 - unauthorized
 - 404 - not found
 
Create a Job
POST /v1/jobs
Content-Type: application/json
Create a job.
Example Request
Example Response
HTTP/1.1 201 Created
Content-Type: application/json
{
  "id": 1
}
Request Body
The following fields are used in the request body for creating a job:
| Field | Type | Required | Description | 
|---|---|---|---|
resources |  resources |  Yes | Resource requirements, defined below. | 
inputs |  No | List of filenames and their base64-encoded content to be made available to jobs. | |
outputFiles |  array[string] |  No | List of output filenames to be uploaded to storage. | 
outputDirs |  array[string] |  No | List of output directories to be uploaded to storage. | 
artifacts |  array[string] |  No | List of URLs to fetch before the job starts. | 
labels |  array[string] |  No | List of arbitrary labels in the form of name-value pairs, e.g. name=value. |  
tasks |  array[task] |  Yes | List of tasks, defined below. | 
policies |  policies |  No | Job policies, defined below. | 
notifications |  array[notification] |  No | Job notifications, defined below. | 
resources:
| Field | Type | Required | Description | 
|---|---|---|---|
nodes |  integer |  No | Number of nodes required. | 
cpus |  integer |  No | Number of CPU cores per node required. | 
cpusRange |  array[integer] |  No | Minimum and maximum number of CPU cores per node required. | 
cpusOptions |  array[integer] |  No | Minimum and maximum number of CPU cores per node required. | 
totalCpusRange |  array[integer] |  No | Minimum and maximum number of total CPU cores across all nodes required. | 
memory |  integer |  No | Memory per node required in GB. | 
memoryPerCpu |  integer |  No | Memory per CPU core required in GB. | 
disk |  integer |  No | Disk space required in GB. | 
walltime |  integer |  No | Walltime required in mins. | 
task:
| Field | Type | Required | Description | 
|---|---|---|---|
image |  string |  Yes | Container image name. | 
runtime |  string |  No | Container runtime, either singularity (default) or udocker. |  
cmd |  string |  No | Command to run inside the container. | 
args |  string |  No | Arguments of command run inside the container. | 
env |  dict |  No | Dictionary of key-value pairs. | 
workDir |  string |  No | Working directory. | 
type |  string |  No | Type of task, one of basic, sidecar, openmpi, mpich, or intelmpi. |  
policies:
| Field | Type | Required | Description | 
|---|---|---|---|
maximumRetries |  integer |  No | Maximum number of times a task will be retried in the event of failures. By default there will be no retries. | 
maximumTimeInQueue |  integer |  No | Maximum time in minutes the job will remain in the queue. If a job cannot be run immediately it will wait in the queue (up to the specified time limit) until resources become available. The value -1 means that the job will remain in the queue until it starts running. The default value 0 means that the job will remain in the queue until it starts running or there is a failure. | 
leaveInQueue |  bool |  No | Normally completed jobs are only listed when explicitly requested. When set to True the job will be listed along with active jobs (idle, running) until explictly removed from the queue. |  
ignoreTaskTailures |  bool |  No | Normally if a task fails (i.e. exit code non-zero) no further tasks will be executed in a job. If set to True, all tasks will be executed. | 
reportJobSuccessOnTaskFailure |  bool |  No | When the job is run as part of a workflow, if the exit code of any tasks are non-zero the job will be reported as running successfully. This means that if retries are enabled within a workflow or a workflow is re-run, only jobs which failed because of infrastructure problems will be retried (e.g. problems pulling the container image or staging files in or out). The default value is False. tasks in a job will be run irrespective of any failures. The default value is False. |  
autoScalingType |  string |  No | If set to none only existing resources will be considered to run the job and no additional resources will be provisioned. |  
runSerialTasksOnAllNodes |  bool |  No | By default serial tasks are only run on one node for the case of multi-node jobs. Setting this to True results in serial tasks being run on all nodes. |  
priority |  integer |  No | Job priority. | 
placement |  placement |  No | 
notifications is a list where each notification is of the form:
| Field | Type | Required | Description | 
|---|---|---|---|
event |  string |  Yes | When to send the notification, currently the only option is jobFinished |  
type |  string |  Yes | Type of notification, currently the only option is email |  
Status Codes
- 201 - no error
 - 400 - bad request
 - 401 - unauthorized
 
Clone a Job
PUT /v1/jobs/<id>/clone
Create a copy of an existing job.
Example Request
PUT /v1/jobs/2/clone HTTP/1.1
Example Response
HTTP/1.1 201 Created
Content-Type: application/json
{
  "id": 1
}
Status Codes
- 201 - no error
 - 400 - bad request
 - 401 - unauthorized
 - 404 - not found
 
Delete a Job
DELETE /v1/jobs/<id>
Delete a job.
Example Request
DELETE /v1/jobs/2 HTTP/1.1
Example Response
Status Codes
- 200 - no error
 - 400 - bad request
 - 401 - unauthorized
 - 404 - not found
 
Remove a Job
PUT /v1/jobs/<id>/remove
Remove a job from the queue. This is only applicable to jobs which were created with leaveInQueue in policies set to True.
Example Request
PUT /v1/jobs/2/remove HTTP/1.1
Example Response
Status Codes
- 200 - no error
 - 400 - bad request
 - 401 - unauthorized
 - 404 - not found
 
Get standard output
GET /v1/jobs/<id>/stdout
Get the stdout from a completed job.
Example Request
GET /v1/jobs/3/stdout HTTP/1.1
Example Response
HTTP/1.1 200 OK
Content-Type: text/plain
Status Codes
- 200 - no error - stdout, if any, wil be returned
 - 400 - bad request - job does not exist
 - 401 - unauthorized
 - 403 - forbidden - user does not have permission to access the job
 - 404 - not found - stdout does not exist
 
Get standard error
GET /v1/jobs/<id>/stderr
Get the stderr from a completed job.
Example Request
GET /v1/jobs/4/stderr HTTP/1.1
Example Response
HTTP/1.1 200 OK
Content-Type: text/plain
Status Codes
- 200 - no error - stderr, if any, will be returned
 - 400 - bad request - job does not exist
 - 401 - unauthorized
 - 403 - forbidden - user does not have permission to access the job
 - 404 - not found - stderr does not exist
 
Workflows API
This API exposes endpoints for managing workflows.
Data API
This API exposes endpoints for managing data.
Key-value store API
This API exposes endpoints for accessing a key-value store.