RESTful API specification

This appendix provides a full specification of the RESTful interface to CLAM.

Note

Note that for each webservice, an auto-generated and human readable RESTful API specification is available at the /info/ endpoint which provides a more tailored overview. This info page also presents auto-generated example code for interacting with the webservice.

General Webservice Information

Endpoint:/porch/ or /info/ (or / if no authentication credentials are provided)
Method:GET
Request Parameters:
 (none)
Description:Retrieves the general webservice specification (profiles, formats, etc). This also works without authentication even on authenticated webservices (unless explicitly disabled). /porch/ and /info/ and almost identical from a webservice perspective, but render very differently in the browser.
Response:200 - OK & CLAM XML

Project Index

Endpoint:/index/ (or / if proper authentication credentials are provided)
Method:GET
Request Parameters:
 (none)
Description:Retrieves the project index and general webservice specification
Response:200 - OK & CLAM XML, 401 - Unauthorised

Project Endpoint

Endpoint:/[project]/
Method:GET
Request Parameters:
 (none)
Response:200 - OK & CLAM XML, 401 - Unauthorised, 404 - Not Found
Description:This returns the current state of the project in CLAM XML format. Depending on the state this contains a specification of all accepted parameters, all input files, and all output files. Note that errors in parameter validation are encoded in the CLAM XML response; the system will still return a 200 response.
Method:PUT
Request Parameters:
 (none)
Response:201 - Created, 401 - Unauthorised, 403 - Forbidden (Invalid project ID), 403 - Forbidden (No project name)
Description:This is necessary before attempting to upload any files; it initialises an empty new project.
Method:POST
Request Parameters:
 Accepted parameters are defined in the Service Configuration file (and thus differ per service). The parameter ID corresponds to the parameter keys in the request parameters
Response:202 - Accepted & CLAM XML, 401 - Unauthorised, 404 - Not Found, 403 - Permission Denied & CLAM XML, 500 - Internal Server Error
Description:This starts the running of a project, i.e. starts the actual background program with the specified service-specific parameters and provided input files. The parameters are provided in the query string; the input files are provided in separate POST requests to /[project]/input/[filename], prior to this query. If any parameter errors occur or no profiles match the input files and parameters, a 403 response will be returned with errors marked in the CLAM XML. If a 500 - Server Error is returned, CLAM most likely is not able to invoke the underlying application or the server has insufficient free resources.
Method:DELETE
Request Parameters:
 The parameter abortonly can be set to 1 if you only want to abort a running process without deleting the entire project
Response:200 - OK, 401 - Unauthorised, 404 - Not Found
Description:Deletes a project. Any running processes will be aborted.

Input files

Endpoint:/[project]/input/[filename]
Method:GET
Request Parameters:
 (none)
Response:200 - OK & File contents, 401 - Unauthorised, 404 - Not Found
Description:Retrieves the specified input file.
Method:DELETE
Request Parameters:
 (none)
Response:200 - OK & File contents, 401 - Unauthorised, 404 - Not Found
Description:Deletes the specified input file.
Endpoint:/[project]/input/[filename] or /[project]/input/[inputtemplate]/[filename]
Method:POST
Request Parameters:
 inputtemplate=[inputtemplate\_id] file=[HTTP file]* url=[download-url]* contents=[text-content]* metafile=[HTTP file] metadata=[CLAM Metadata XML] Other accepted parameters are defined in the various Input Templates in the Service Configuration file (and thus differs per service and input template). The parameter ID corresponds to the parameter keys in the query string.
Response:200 - OK & CLAM-Upload XML, 403 - Permission Denied & CLAM-Upload XML, 401 - Unauthorised, 404 - Not Found
Description:This method adds a new input file, which is transmitted in the multipart/form-data encoding along with request parameters and metadata parameters. . The response is returned in CLAM-Upload XML (distinct from CLAM XML!). Two arguments are mandatory: the input template, which designates what kind of file will be added and points to one of the InputTemplate IDs the webservice supports, and one of the query arguments marked with an asterisk. Adding a file can proceed either by uploading it from the client machine (file), by downloading it from another URL (url), or by passing the contents in the POST message itself (contents). Only one of these can be used at a time. Metadata can be passed in three different ways: 1) by simply specifying a metadata field as request parameters, with the same ID as defined in the input template. 2) setting the metafile attribute to an HTTP file, or 3) by setting metadata to the full XML string of the metadata specification.
Endpoint:/[project]/input/[filename]/metadata
Method:GET
Request Parameters:
 (none)
Response:200 - OK & CLAM Metadata XML, 401 - Unauthorised, 404 - Not Found
Description:Retrieves the metadata for the specified input file.

Output Files

Endpoint:/[project]/output/[filename]
Method:GET
Request Parameters:
 (none)
Response:200 - OK & File contents, 401 - Unauthorised, 404 - Not Found
Description:Retrieves the specified output file.
Method:DELETE
Request Parameters:
 (none)
Response:200 - OK & File contents, 401 - Unauthorised, 404 - Not Found
Description:Deletes the specified output file.
Method:PUT
Request Parameters:
 (none)
Response:200 - OK & JSON reply with field url indicating where the file can be downloaded (one time only) publicly, 401 - Unauthorised, 404 - Not Found
Description:Shares the file using unauthenticated temporary storage; returns a JSON response with a URL (key: url). where the file can be downloaded (one time only). The URL contains a random 128-bit ID and is safe as long as it is kept secret (only share over encrypted connections).
Endpoint:/[project]/output/[filename]/metadata
Method:GET
Request Parameters:
 (none)
Response:200 - OK & CLAM Metadata XML, 401 - Unauthorised, 404 - Not Found
Description:Retrieves the metadata for the specified output file.

Archive Download

Endpoint:/[project]/output/
Method:GET
Request Parameters:
 format=zip|tar.gz|tar.bz2
Response:200 - OK & File contents, 401 - Unauthorised, 404 - Not Found
Description:Offers a single archive, of the desired format, including all output files
Method:DELETE
Request Parameters:
 (none)
Response:200 - OK & File contents, 401 - Unauthorised
Description:Deletes all output files and resets the project for another run.

Temporary Storage

Endpoint:/storage/[id]
Method:GET
Request Parameters:
 keep (optional) - Set to 1 to preserve the link for another use after download.
Response:200 - OK & File contents, 401 - Unauthorised, 404 - Not Found
Description:Retrieves the specified output file from unauthenticated temporary storage. Files will need to be explicitly made available for this storage (using a PUT request on /[project]/output/[filename]. The download will only work once unless the parameter keep is set to 1.

Actions

Endpoint:/actions/[action_id]/
Method:GET and/or POST, may be constrained by the action
Request Parameters:
 Determined by the action
Response:200 - OK & Result data determined by the action, 401 - Unauthorised, 404 - Not Found
Description:This is a remote procedure call to run the specified action and obtain the results. The parameters are specific to the action.

Project entry shortcut

This is a shortcut method (available since CLAM v0.99.17) that
combines the steps of project creation, file adding and upload, in one single GET or POST request. Although more limited than the invididual calls, and less RESTful, it facilitates the job for simpler callers:
Endpoint:/
Method:GET or POST
Request Parameters:
 project=[name|new] (mandatory), selects and if necessary creates the project with the specified name. If the value is set to new, a random project name will be generated. {inputtemplate}=[contents] – Pass file contents for the specified input templateJ (the variable name is the inputtemplate ID), this corresponds to the contents variable in the non-shortcut method. {inputtemplate}_url=[url] – Pass a url where to obtain the file for the specified input templateJ (the variable name contains the inputtemplate ID), this corresponds to the url variable in the non-shortcut method. {inputtemplate}_filename=[filename] – Sets the desired filename for the specified input template, use in combination with one of the two parameters above. Not needed when the webservice assigns a fixed filename. start=[0|1] – Set this parameter to 1 if you want the project to start automatically. The default is not to start automatically. Other accepted parameters are defined in the Service Configuration file (and thus differ per service). For global parameters, the parameter ID corresponds to the parameter keys in the request parameters, for parameters pertaining to a specific input template, prepend the ID of the input template and an underscore to the parameter ID ({inputtemplate}_).
Response:200 - OK & CLAM XML, 401 - Unauthorised, 403 - Permission denied

If OAuth authentication is enabled and no access token is passed, almost all URLs return HTTP 303 - See Other and redirect to the authentication provider. At this stage, user input may be required, stopping automated clients. After the user input, or if no user input is required, the authorization provider should relay the user back to a special CLAM login page with another HTTP 303. This implies the client should then redo the request with the proper access token. See the section on OAuth2 authentication for more details.