diff --git a/services/api-server/openapi.json b/services/api-server/openapi.json
new file mode 100644
index 00000000000..29d7dda206b
--- /dev/null
+++ b/services/api-server/openapi.json
@@ -0,0 +1,7121 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "osparc.io public API",
+ "description": "osparc-simcore public API specifications",
+ "version": "0.7.0"
+ },
+ "paths": {
+ "/v0/meta": {
+ "get": {
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get Service Metadata",
+ "operationId": "get_service_metadata",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Meta"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/me": {
+ "get": {
+ "tags": [
+ "users"
+ ],
+ "summary": "Get My Profile",
+ "operationId": "get_my_profile",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Profile"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "User not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ },
+ "put": {
+ "tags": [
+ "users"
+ ],
+ "summary": "Update My Profile",
+ "operationId": "update_my_profile",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ProfileUpdate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Profile"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "User not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ }
+ },
+ "/v0/files": {
+ "get": {
+ "tags": [
+ "files"
+ ],
+ "summary": "List Files",
+ "description": "Lists all files stored in the system\n\nSEE `get_files_page` for a paginated version of this function",
+ "operationId": "list_files",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/File"
+ },
+ "type": "array",
+ "title": "Response List Files V0 Files Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "File not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ }
+ },
+ "/v0/files/content": {
+ "put": {
+ "tags": [
+ "files"
+ ],
+ "summary": "Upload File",
+ "description": "Uploads a single file to the system",
+ "operationId": "upload_file",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "content-length",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Content-Length"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_upload_file_v0_files_content_put"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/File"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "File not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "files"
+ ],
+ "summary": "Get Upload Links",
+ "description": "Get upload links for uploading a file to storage",
+ "operationId": "get_upload_links",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientFile"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClientFileUploadData"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "File not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/files/{file_id}": {
+ "get": {
+ "tags": [
+ "files"
+ ],
+ "summary": "Get File",
+ "description": "Gets metadata for a given file resource",
+ "operationId": "get_file",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "file_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "File Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/File"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "File not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "files"
+ ],
+ "summary": "Delete File",
+ "operationId": "delete_file",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "file_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "File Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "File not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/files:search": {
+ "get": {
+ "tags": [
+ "files"
+ ],
+ "summary": "Search Files Page",
+ "description": "Search files",
+ "operationId": "search_files_page",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "sha256_checksum",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-fA-F0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Sha256 Checksum"
+ }
+ },
+ {
+ "name": "file_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "File Id"
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "maximum": 100,
+ "minimum": 1,
+ "default": 50,
+ "title": "Limit"
+ }
+ },
+ {
+ "name": "offset",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0,
+ "title": "Offset"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Page_File_"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "File not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/files/{file_id}:abort": {
+ "post": {
+ "tags": [
+ "files"
+ ],
+ "summary": "Abort Multipart Upload",
+ "operationId": "abort_multipart_upload",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "file_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "File Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_abort_multipart_upload_v0_files__file_id__abort_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/files/{file_id}:complete": {
+ "post": {
+ "tags": [
+ "files"
+ ],
+ "summary": "Complete Multipart Upload",
+ "operationId": "complete_multipart_upload",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "file_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "File Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_complete_multipart_upload_v0_files__file_id__complete_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/File"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "File not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/files/{file_id}/content": {
+ "get": {
+ "tags": [
+ "files"
+ ],
+ "summary": "Download File",
+ "operationId": "download_file",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "file_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "File Id"
+ }
+ }
+ ],
+ "responses": {
+ "307": {
+ "description": "Successful Response"
+ },
+ "404": {
+ "description": "File not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "200": {
+ "content": {
+ "application/octet-stream": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ },
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "description": "Returns a arbitrary binary data"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "List Solvers",
+ "description": "Lists all available solvers (latest version)\n\nSEE get_solvers_page for paginated version of this function",
+ "operationId": "list_solvers",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/Solver"
+ },
+ "type": "array",
+ "title": "Response List Solvers V0 Solvers Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ }
+ },
+ "/v0/solvers/releases": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Lists All Releases",
+ "description": "Lists all released solvers i.e. all released versions\n\nSEE get_solvers_releases_page for a paginated version of this function",
+ "operationId": "list_solvers_releases",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "items": {
+ "$ref": "#/components/schemas/Solver"
+ },
+ "type": "array",
+ "title": "Response List Solvers Releases V0 Solvers Releases Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ }
+ },
+ "/v0/solvers/{solver_key}/latest": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Latest Release of a Solver",
+ "description": "Gets latest release of a solver",
+ "operationId": "get_solver",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Solver"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "List Solver Releases",
+ "description": "Lists all releases of a given (one) solver\n\nSEE get_solver_releases_page for a paginated version of this function",
+ "operationId": "list_solver_releases",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Solver"
+ },
+ "title": "Response List Solver Releases V0 Solvers Solver Key Releases Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Solver Release",
+ "description": "Gets a specific release of a solver",
+ "operationId": "get_solver_release",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Solver"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/ports": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "List Solver Ports",
+ "description": "Lists inputs and outputs of a given solver\n\nNew in *version 0.5.0*",
+ "operationId": "list_solver_ports",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/OnePage_SolverPort_"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/pricing_plan": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Solver Pricing Plan",
+ "description": "Gets solver pricing plan\n\nNew in *version 0.7*",
+ "operationId": "get_solver_pricing_plan",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ServicePricingPlanGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs": {
+ "post": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Create Job",
+ "description": "Creates a job in a specific release with given inputs.\n\nNOTE: This operation does **not** start the job",
+ "operationId": "create_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "hidden",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "default": true,
+ "title": "Hidden"
+ }
+ },
+ {
+ "name": "x-simcore-parent-project-uuid",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Simcore-Parent-Project-Uuid"
+ }
+ },
+ {
+ "name": "x-simcore-parent-node-id",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Simcore-Parent-Node-Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobInputs"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Job"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "List Jobs",
+ "description": "List of jobs in a specific released solver (limited to 20 jobs)\n\n- DEPRECATION: This implementation and returned values are deprecated and the will be replaced by that of get_jobs_page\n- SEE `get_jobs_page` for paginated version of this function",
+ "operationId": "list_jobs",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Job"
+ },
+ "title": "Response List Jobs V0 Solvers Solver Key Releases Version Jobs Get"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}": {
+ "delete": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Delete Job",
+ "description": "Deletes an existing solver job\n\nNew in *version 0.7*",
+ "operationId": "delete_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Job",
+ "description": "Gets job of a given solver",
+ "operationId": "get_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Job"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}:start": {
+ "post": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Start Job",
+ "description": "Starts job job_id created with the solver solver_key:version\n\nAdded in *version 0.4.3*: query parameter `cluster_id`\nAdded in *version 0.6*: responds with a 202 when successfully starting a computation",
+ "operationId": "start_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ },
+ {
+ "name": "cluster_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Cluster Id"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobStatus"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "200": {
+ "description": "Job already started",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobStatus"
+ }
+ }
+ }
+ },
+ "406": {
+ "description": "Cluster not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Configuration error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}:stop": {
+ "post": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Stop Job",
+ "operationId": "stop_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobStatus"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}:inspect": {
+ "post": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Inspect Job",
+ "operationId": "inspect_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobStatus"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}/metadata": {
+ "patch": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Replace Job Custom Metadata",
+ "description": "Updates custom metadata from a job\n\nNew in *version 0.7*",
+ "operationId": "replace_job_custom_metadata",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobMetadataUpdate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobMetadata"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Metadata not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Job Custom Metadata",
+ "description": "Gets custom metadata from a job\n\nNew in *version 0.7*",
+ "operationId": "get_job_custom_metadata",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobMetadata"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Metadata not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/page": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Jobs Page",
+ "description": "List of jobs on a specific released solver (includes pagination)\n\nNew in *version 0.7*",
+ "operationId": "get_jobs_page",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "maximum": 100,
+ "minimum": 1,
+ "default": 50,
+ "title": "Limit"
+ }
+ },
+ {
+ "name": "offset",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0,
+ "title": "Offset"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Page_Job_"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}/outputs": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Job Outputs",
+ "operationId": "get_job_outputs",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobOutputs"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}/outputs/logfile": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Job Output Logfile",
+ "description": "Special extra output with persistent logs file for the solver run.\n\n**NOTE**: this is not a log stream but a predefined output that is only\navailable after the job is done.\n\nNew in *version 0.4.0*",
+ "operationId": "get_job_output_logfile",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "307": {
+ "description": "Successful Response"
+ },
+ "200": {
+ "content": {
+ "application/octet-stream": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ },
+ "application/zip": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ },
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "description": "Returns a log file"
+ },
+ "404": {
+ "description": "Log not found"
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}/wallet": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Job Wallet",
+ "description": "Get job wallet\n\nNew in *version 0.7*",
+ "operationId": "get_job_wallet",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/WalletGetWithAvailableCredits"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Wallet not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Access to wallet is not allowed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}/pricing_unit": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Job Pricing Unit",
+ "description": "Get job pricing unit\n\nNew in *version 0.7*",
+ "operationId": "get_job_pricing_unit",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PricingUnitGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Pricing unit not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/solvers/{solver_key}/releases/{version}/jobs/{job_id}/logstream": {
+ "get": {
+ "tags": [
+ "solvers"
+ ],
+ "summary": "Get Log Stream",
+ "operationId": "get_log_stream",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "solver_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Solver Key"
+ }
+ },
+ {
+ "name": "version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Returns a JobLog or an ErrorGet",
+ "content": {
+ "application/x-ndjson": {
+ "schema": {
+ "type": "string",
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/JobLog"
+ },
+ {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ ],
+ "title": "Response 200 Get Log Stream V0 Solvers Solver Key Releases Version Jobs Job Id Logstream Get"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "Conflict: Logs are already being streamed",
+ "content": {
+ "application/x-ndjson": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/x-ndjson": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/x-ndjson": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/x-ndjson": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/x-ndjson": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/x-ndjson": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies": {
+ "get": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "List Studies",
+ "description": "New in *version 0.5.0*",
+ "operationId": "list_studies",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "limit",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "maximum": 100,
+ "minimum": 1,
+ "default": 50,
+ "title": "Limit"
+ }
+ },
+ {
+ "name": "offset",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0,
+ "title": "Offset"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Page_Study_"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}": {
+ "get": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Get Study",
+ "description": "New in *version 0.5.0*",
+ "operationId": "get_study",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Study"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Study not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}:clone": {
+ "post": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Clone Study",
+ "operationId": "clone_study",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "x-simcore-parent-project-uuid",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Simcore-Parent-Project-Uuid"
+ }
+ },
+ {
+ "name": "x-simcore-parent-node-id",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Simcore-Parent-Node-Id"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Study"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Study not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/ports": {
+ "get": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "List Study Ports",
+ "description": "Lists metadata on ports of a given study\n\nNew in *version 0.5.0*",
+ "operationId": "list_study_ports",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/OnePage_StudyPort_"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Study not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/jobs": {
+ "post": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Create Study Job",
+ "description": "hidden -- if True (default) hides project from UI",
+ "operationId": "create_study_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "hidden",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "default": true,
+ "title": "Hidden"
+ }
+ },
+ {
+ "name": "x-simcore-parent-project-uuid",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Simcore-Parent-Project-Uuid"
+ }
+ },
+ {
+ "name": "x-simcore-parent-node-id",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Simcore-Parent-Node-Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobInputs"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Job"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/jobs/{job_id}": {
+ "delete": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Delete Study Job",
+ "description": "Deletes an existing study job",
+ "operationId": "delete_study_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ },
+ "description": "Not Found"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/jobs/{job_id}:start": {
+ "post": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Start Study Job",
+ "description": "Changed in *version 0.6.0*: Now responds with a 202 when successfully starting a computation",
+ "operationId": "start_study_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ },
+ {
+ "name": "cluster_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Cluster Id"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobStatus"
+ }
+ }
+ }
+ },
+ "402": {
+ "description": "Payment required",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Job/wallet/pricing details not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "200": {
+ "description": "Job already started",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobStatus"
+ }
+ }
+ }
+ },
+ "406": {
+ "description": "Cluster not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Configuration error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/jobs/{job_id}:stop": {
+ "post": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Stop Study Job",
+ "operationId": "stop_study_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobStatus"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/jobs/{job_id}:inspect": {
+ "post": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Inspect Study Job",
+ "operationId": "inspect_study_job",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobStatus"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/jobs/{job_id}/outputs": {
+ "post": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Get Study Job Outputs",
+ "operationId": "get_study_job_outputs",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobOutputs"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/jobs/{job_id}/outputs/log-links": {
+ "get": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Get download links for study job log files",
+ "operationId": "get_study_job_output_logfile",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobLogsMap"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/studies/{study_id}/jobs/{job_id}/metadata": {
+ "get": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Get Study Job Custom Metadata",
+ "description": "Get custom metadata from a study's job\n\nNew in *version 0.7*",
+ "operationId": "get_study_job_custom_metadata",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobMetadata"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "studies"
+ ],
+ "summary": "Replace Study Job Custom Metadata",
+ "description": "Changes custom metadata of a study's job\n\nNew in *version 0.7*",
+ "operationId": "replace_study_job_custom_metadata",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "study_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Study Id"
+ }
+ },
+ {
+ "name": "job_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobMetadataUpdate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JobMetadata"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/wallets/default": {
+ "get": {
+ "tags": [
+ "wallets"
+ ],
+ "summary": "Get Default Wallet",
+ "description": "Get default wallet\n\nNew in *version 0.7*",
+ "operationId": "get_default_wallet",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/WalletGetWithAvailableCredits"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Wallet not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Access to wallet is not allowed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ }
+ },
+ "/v0/wallets/{wallet_id}": {
+ "get": {
+ "tags": [
+ "wallets"
+ ],
+ "summary": "Get Wallet",
+ "description": "Get wallet\n\nNew in *version 0.7*",
+ "operationId": "get_wallet",
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "wallet_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "Wallet Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/WalletGetWithAvailableCredits"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Wallet not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Access to wallet is not allowed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Too many requests",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Internal server error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "502": {
+ "description": "Unexpected error when communicating with backend service",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service unavailable",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "504": {
+ "description": "Request to a backend service timed out.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/credits/price": {
+ "get": {
+ "tags": [
+ "credits"
+ ],
+ "summary": "Get Credits Price",
+ "description": "New in *version 0.6.0*",
+ "operationId": "get_credits_price",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GetCreditPriceApiServer"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "Body_abort_multipart_upload_v0_files__file_id__abort_post": {
+ "properties": {
+ "client_file": {
+ "$ref": "#/components/schemas/ClientFile"
+ }
+ },
+ "type": "object",
+ "required": [
+ "client_file"
+ ],
+ "title": "Body_abort_multipart_upload_v0_files__file_id__abort_post"
+ },
+ "Body_complete_multipart_upload_v0_files__file_id__complete_post": {
+ "properties": {
+ "client_file": {
+ "$ref": "#/components/schemas/ClientFile"
+ },
+ "uploaded_parts": {
+ "$ref": "#/components/schemas/FileUploadCompletionBody"
+ }
+ },
+ "type": "object",
+ "required": [
+ "client_file",
+ "uploaded_parts"
+ ],
+ "title": "Body_complete_multipart_upload_v0_files__file_id__complete_post"
+ },
+ "Body_upload_file_v0_files_content_put": {
+ "properties": {
+ "file": {
+ "type": "string",
+ "format": "binary",
+ "title": "File"
+ }
+ },
+ "type": "object",
+ "required": [
+ "file"
+ ],
+ "title": "Body_upload_file_v0_files_content_put"
+ },
+ "ClientFile": {
+ "properties": {
+ "filename": {
+ "type": "string",
+ "title": "Filename",
+ "description": "File name"
+ },
+ "filesize": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Filesize",
+ "description": "File size in bytes"
+ },
+ "sha256_checksum": {
+ "type": "string",
+ "pattern": "^[a-fA-F0-9]{64}$",
+ "title": "Sha256 Checksum",
+ "description": "SHA256 checksum"
+ }
+ },
+ "type": "object",
+ "required": [
+ "filename",
+ "filesize",
+ "sha256_checksum"
+ ],
+ "title": "ClientFile",
+ "description": "Represents a file stored on the client side"
+ },
+ "ClientFileUploadData": {
+ "properties": {
+ "file_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "File Id",
+ "description": "The file resource id"
+ },
+ "upload_schema": {
+ "$ref": "#/components/schemas/FileUploadData",
+ "description": "Schema for uploading file"
+ }
+ },
+ "type": "object",
+ "required": [
+ "file_id",
+ "upload_schema"
+ ],
+ "title": "ClientFileUploadData"
+ },
+ "ErrorGet": {
+ "properties": {
+ "errors": {
+ "items": {},
+ "type": "array",
+ "title": "Errors"
+ }
+ },
+ "type": "object",
+ "required": [
+ "errors"
+ ],
+ "title": "ErrorGet",
+ "example": {
+ "errors": [
+ "some error message",
+ "another error message"
+ ]
+ }
+ },
+ "File": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Id",
+ "description": "Resource identifier"
+ },
+ "filename": {
+ "type": "string",
+ "title": "Filename",
+ "description": "Name of the file with extension"
+ },
+ "content_type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Content Type",
+ "description": "Guess of type content [EXPERIMENTAL]"
+ },
+ "checksum": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-fA-F0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Checksum",
+ "description": "SHA256 hash of the file's content"
+ },
+ "e_tag": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "E Tag",
+ "description": "S3 entity tag"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "filename"
+ ],
+ "title": "File",
+ "description": "Represents a file stored on the server side i.e. a unique reference to a file in the cloud."
+ },
+ "FileUploadCompletionBody": {
+ "properties": {
+ "parts": {
+ "items": {
+ "$ref": "#/components/schemas/UploadedPart"
+ },
+ "type": "array",
+ "title": "Parts"
+ }
+ },
+ "type": "object",
+ "required": [
+ "parts"
+ ],
+ "title": "FileUploadCompletionBody"
+ },
+ "FileUploadData": {
+ "properties": {
+ "chunk_size": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Chunk Size"
+ },
+ "urls": {
+ "items": {
+ "type": "string",
+ "maxLength": 65536,
+ "minLength": 1,
+ "format": "uri"
+ },
+ "type": "array",
+ "title": "Urls"
+ },
+ "links": {
+ "$ref": "#/components/schemas/UploadLinks"
+ }
+ },
+ "type": "object",
+ "required": [
+ "chunk_size",
+ "urls",
+ "links"
+ ],
+ "title": "FileUploadData"
+ },
+ "GetCreditPriceApiServer": {
+ "properties": {
+ "productName": {
+ "type": "string",
+ "title": "Productname"
+ },
+ "usdPerCredit": {
+ "anyOf": [
+ {
+ "type": "number",
+ "minimum": 0.0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Usdpercredit",
+ "description": "Price of a credit in USD. If None, then this product's price is UNDEFINED"
+ },
+ "minPaymentAmountUsd": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Minpaymentamountusd",
+ "description": "Minimum amount (included) in USD that can be paid for this productCan be None if this product's price is UNDEFINED"
+ }
+ },
+ "type": "object",
+ "required": [
+ "productName",
+ "usdPerCredit",
+ "minPaymentAmountUsd"
+ ],
+ "title": "GetCreditPriceApiServer"
+ },
+ "Groups": {
+ "properties": {
+ "me": {
+ "$ref": "#/components/schemas/UsersGroup"
+ },
+ "organizations": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/UsersGroup"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Organizations",
+ "default": []
+ },
+ "all": {
+ "$ref": "#/components/schemas/UsersGroup"
+ }
+ },
+ "type": "object",
+ "required": [
+ "me",
+ "all"
+ ],
+ "title": "Groups"
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "errors": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Validation errors"
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError"
+ },
+ "Job": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Id"
+ },
+ "name": {
+ "type": "string",
+ "pattern": "^([^\\s/]+/?){1,10}$",
+ "title": "Name"
+ },
+ "inputs_checksum": {
+ "type": "string",
+ "title": "Inputs Checksum",
+ "description": "Input's checksum"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Created At",
+ "description": "Job creation timestamp"
+ },
+ "runner_name": {
+ "type": "string",
+ "pattern": "^([^\\s/]+/?){1,10}$",
+ "title": "Runner Name",
+ "description": "Runner that executes job"
+ },
+ "url": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Url",
+ "description": "Link to get this resource (self)"
+ },
+ "runner_url": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Runner Url",
+ "description": "Link to the solver's job (parent collection)"
+ },
+ "outputs_url": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Outputs Url",
+ "description": "Link to the job outputs (sub-collection)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "inputs_checksum",
+ "created_at",
+ "runner_name",
+ "url",
+ "runner_url",
+ "outputs_url"
+ ],
+ "title": "Job",
+ "example": {
+ "created_at": "2021-01-22T23:59:52.322176",
+ "id": "f622946d-fd29-35b9-a193-abdd1095167c",
+ "inputs_checksum": "12345",
+ "name": "solvers/isolve/releases/1.3.4/jobs/f622946d-fd29-35b9-a193-abdd1095167c",
+ "outputs_url": "https://api.osparc.io/v0/solvers/isolve/releases/1.3.4/jobs/f622946d-fd29-35b9-a193-abdd1095167c/outputs",
+ "runner_name": "solvers/isolve/releases/1.3.4",
+ "runner_url": "https://api.osparc.io/v0/solvers/isolve/releases/1.3.4",
+ "url": "https://api.osparc.io/v0/solvers/isolve/releases/1.3.4/jobs/f622946d-fd29-35b9-a193-abdd1095167c"
+ }
+ },
+ "JobInputs": {
+ "properties": {
+ "values": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/File"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "integer"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "type": "object",
+ "title": "Values"
+ }
+ },
+ "type": "object",
+ "required": [
+ "values"
+ ],
+ "title": "JobInputs",
+ "example": {
+ "values": {
+ "enabled": true,
+ "input_file": {
+ "filename": "input.txt",
+ "id": "0a3b2c56-dbcd-4871-b93b-d454b7883f9f"
+ },
+ "n": 55,
+ "title": "Temperature",
+ "x": 4.33
+ }
+ }
+ },
+ "JobLog": {
+ "properties": {
+ "job_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ },
+ "node_id": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Node Id"
+ },
+ "log_level": {
+ "type": "integer",
+ "title": "Log Level"
+ },
+ "messages": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Messages"
+ }
+ },
+ "type": "object",
+ "required": [
+ "job_id",
+ "log_level",
+ "messages"
+ ],
+ "title": "JobLog",
+ "example": {
+ "job_id": "145beae4-a3a8-4fde-adbb-4e8257c2c083",
+ "log_level": 10,
+ "messages": [
+ "PROGRESS: 5/10"
+ ],
+ "node_id": "3742215e-6756-48d2-8b73-4d043065309f"
+ }
+ },
+ "JobLogsMap": {
+ "properties": {
+ "log_links": {
+ "items": {
+ "$ref": "#/components/schemas/LogLink"
+ },
+ "type": "array",
+ "title": "Log Links",
+ "description": "Array of download links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "log_links"
+ ],
+ "title": "JobLogsMap"
+ },
+ "JobMetadata": {
+ "properties": {
+ "job_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id",
+ "description": "Parent Job"
+ },
+ "metadata": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ },
+ "type": "object",
+ "title": "Metadata",
+ "description": "Custom key-value map"
+ },
+ "url": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Url",
+ "description": "Link to get this resource (self)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "job_id",
+ "metadata",
+ "url"
+ ],
+ "title": "JobMetadata",
+ "example": {
+ "job_id": "3497e4de-0e69-41fb-b08f-7f3875a1ac4b",
+ "metadata": {
+ "bool": "true",
+ "float": "3.14",
+ "int": "42",
+ "str": "hej med dig"
+ },
+ "url": "https://f02b2452-1dd8-4882-b673-af06373b41b3.fake"
+ }
+ },
+ "JobMetadataUpdate": {
+ "properties": {
+ "metadata": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ },
+ "type": "object",
+ "title": "Metadata",
+ "description": "Custom key-value map"
+ }
+ },
+ "type": "object",
+ "title": "JobMetadataUpdate",
+ "example": {
+ "metadata": {
+ "bool": "true",
+ "float": "3.14",
+ "int": "42",
+ "str": "hej med dig"
+ }
+ }
+ },
+ "JobOutputs": {
+ "properties": {
+ "job_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id",
+ "description": "Job that produced this output"
+ },
+ "results": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/File"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "integer"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "type": "object",
+ "title": "Results"
+ }
+ },
+ "type": "object",
+ "required": [
+ "job_id",
+ "results"
+ ],
+ "title": "JobOutputs",
+ "example": {
+ "job_id": "99d9ac65-9f10-4e2f-a433-b5e412bb037b",
+ "results": {
+ "enabled": false,
+ "maxSAR": 4.33,
+ "n": 55,
+ "output_file": {
+ "filename": "sar_matrix.txt",
+ "id": "0a3b2c56-dbcd-4871-b93b-d454b7883f9f"
+ },
+ "title": "Specific Absorption Rate"
+ }
+ }
+ },
+ "JobStatus": {
+ "properties": {
+ "job_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Job Id"
+ },
+ "state": {
+ "$ref": "#/components/schemas/RunningState"
+ },
+ "progress": {
+ "type": "integer",
+ "maximum": 100,
+ "minimum": 0,
+ "title": "Progress",
+ "default": 0
+ },
+ "submitted_at": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Submitted At",
+ "description": "Last modification timestamp of the solver job"
+ },
+ "started_at": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Started At",
+ "description": "Timestamp that indicate the moment the solver starts execution or None if the event did not occur"
+ },
+ "stopped_at": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Stopped At",
+ "description": "Timestamp at which the solver finished or killed execution or None if the event did not occur"
+ }
+ },
+ "type": "object",
+ "required": [
+ "job_id",
+ "state",
+ "submitted_at"
+ ],
+ "title": "JobStatus",
+ "example": {
+ "job_id": "145beae4-a3a8-4fde-adbb-4e8257c2c083",
+ "progress": 3,
+ "started_at": "2021-04-01 07:16:43.670610",
+ "state": "STARTED",
+ "submitted_at": "2021-04-01 07:15:54.631007"
+ }
+ },
+ "Links": {
+ "properties": {
+ "first": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "First"
+ },
+ "last": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last"
+ },
+ "self": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Self"
+ },
+ "next": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Next"
+ },
+ "prev": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Prev"
+ }
+ },
+ "type": "object",
+ "required": [
+ "first",
+ "last",
+ "self",
+ "next",
+ "prev"
+ ],
+ "title": "Links"
+ },
+ "LogLink": {
+ "properties": {
+ "node_name": {
+ "type": "string",
+ "title": "Node Name"
+ },
+ "download_link": {
+ "type": "string",
+ "maxLength": 65536,
+ "minLength": 1,
+ "format": "uri",
+ "title": "Download Link"
+ }
+ },
+ "type": "object",
+ "required": [
+ "node_name",
+ "download_link"
+ ],
+ "title": "LogLink"
+ },
+ "Meta": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ },
+ "released": {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$"
+ },
+ "type": "object",
+ "title": "Released",
+ "description": "Maps every route's path tag with a released version"
+ },
+ "docs_url": {
+ "type": "string",
+ "maxLength": 65536,
+ "minLength": 1,
+ "format": "uri",
+ "title": "Docs Url"
+ },
+ "docs_dev_url": {
+ "type": "string",
+ "maxLength": 65536,
+ "minLength": 1,
+ "format": "uri",
+ "title": "Docs Dev Url"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "version",
+ "docs_url",
+ "docs_dev_url"
+ ],
+ "title": "Meta",
+ "example": {
+ "docs_dev_url": "https://api.osparc.io/dev/doc",
+ "docs_url": "https://api.osparc.io/dev/doc",
+ "name": "simcore_service_foo",
+ "released": {
+ "v1": "1.3.4",
+ "v2": "2.4.45"
+ },
+ "version": "2.4.45"
+ }
+ },
+ "OnePage_SolverPort_": {
+ "properties": {
+ "items": {
+ "items": {
+ "$ref": "#/components/schemas/SolverPort"
+ },
+ "type": "array",
+ "title": "Items"
+ },
+ "total": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Total"
+ }
+ },
+ "type": "object",
+ "required": [
+ "items"
+ ],
+ "title": "OnePage[SolverPort]"
+ },
+ "OnePage_StudyPort_": {
+ "properties": {
+ "items": {
+ "items": {
+ "$ref": "#/components/schemas/StudyPort"
+ },
+ "type": "array",
+ "title": "Items"
+ },
+ "total": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Total"
+ }
+ },
+ "type": "object",
+ "required": [
+ "items"
+ ],
+ "title": "OnePage[StudyPort]"
+ },
+ "Page_File_": {
+ "properties": {
+ "items": {
+ "items": {
+ "$ref": "#/components/schemas/File"
+ },
+ "type": "array",
+ "title": "Items"
+ },
+ "total": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Total"
+ },
+ "limit": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 1
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Limit"
+ },
+ "offset": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Offset"
+ },
+ "links": {
+ "$ref": "#/components/schemas/Links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "items",
+ "total",
+ "limit",
+ "offset",
+ "links"
+ ],
+ "title": "Page[File]"
+ },
+ "Page_Job_": {
+ "properties": {
+ "items": {
+ "items": {
+ "$ref": "#/components/schemas/Job"
+ },
+ "type": "array",
+ "title": "Items"
+ },
+ "total": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Total"
+ },
+ "limit": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 1
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Limit"
+ },
+ "offset": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Offset"
+ },
+ "links": {
+ "$ref": "#/components/schemas/Links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "items",
+ "total",
+ "limit",
+ "offset",
+ "links"
+ ],
+ "title": "Page[Job]"
+ },
+ "Page_Study_": {
+ "properties": {
+ "items": {
+ "items": {
+ "$ref": "#/components/schemas/Study"
+ },
+ "type": "array",
+ "title": "Items"
+ },
+ "total": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Total"
+ },
+ "limit": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 1
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Limit"
+ },
+ "offset": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Offset"
+ },
+ "links": {
+ "$ref": "#/components/schemas/Links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "items",
+ "total",
+ "limit",
+ "offset",
+ "links"
+ ],
+ "title": "Page[Study]"
+ },
+ "PricingPlanClassification": {
+ "type": "string",
+ "enum": [
+ "TIER"
+ ],
+ "const": "TIER",
+ "title": "PricingPlanClassification"
+ },
+ "PricingUnitGet": {
+ "properties": {
+ "pricingUnitId": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricingunitid",
+ "minimum": 0
+ },
+ "unitName": {
+ "type": "string",
+ "title": "Unitname"
+ },
+ "unitExtraInfo": {
+ "$ref": "#/components/schemas/UnitExtraInfo"
+ },
+ "currentCostPerUnit": {
+ "type": "number",
+ "title": "Currentcostperunit"
+ },
+ "default": {
+ "type": "boolean",
+ "title": "Default"
+ }
+ },
+ "type": "object",
+ "required": [
+ "pricingUnitId",
+ "unitName",
+ "unitExtraInfo",
+ "currentCostPerUnit",
+ "default"
+ ],
+ "title": "PricingUnitGet"
+ },
+ "Profile": {
+ "properties": {
+ "first_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 255
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "First Name"
+ },
+ "last_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 255
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Name"
+ },
+ "id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Id",
+ "minimum": 0
+ },
+ "login": {
+ "type": "string",
+ "format": "email",
+ "title": "Login"
+ },
+ "role": {
+ "$ref": "#/components/schemas/UserRoleEnum"
+ },
+ "groups": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Groups"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "gravatar_id": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 40
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Gravatar Id",
+ "description": "md5 hash value of email to retrieve an avatar image from https://www.gravatar.com"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "login",
+ "role"
+ ],
+ "title": "Profile",
+ "example": {
+ "first_name": "James",
+ "gravatar_id": "9a8930a5b20d7048e37740bac5c1ca4f",
+ "groups": {
+ "all": {
+ "description": "all users",
+ "gid": "1",
+ "label": "Everyone"
+ },
+ "me": {
+ "description": "primary group",
+ "gid": "123",
+ "label": "maxy"
+ },
+ "organizations": []
+ },
+ "id": "20",
+ "last_name": "Maxwell",
+ "login": "james-maxwell@itis.swiss",
+ "role": "USER"
+ }
+ },
+ "ProfileUpdate": {
+ "properties": {
+ "first_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 255
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "First Name"
+ },
+ "last_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 255
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Name"
+ }
+ },
+ "type": "object",
+ "title": "ProfileUpdate"
+ },
+ "RunningState": {
+ "type": "string",
+ "enum": [
+ "UNKNOWN",
+ "PUBLISHED",
+ "NOT_STARTED",
+ "PENDING",
+ "WAITING_FOR_RESOURCES",
+ "STARTED",
+ "SUCCESS",
+ "FAILED",
+ "ABORTED",
+ "WAITING_FOR_CLUSTER"
+ ],
+ "title": "RunningState",
+ "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state"
+ },
+ "ServicePricingPlanGet": {
+ "properties": {
+ "pricingPlanId": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricingplanid",
+ "minimum": 0
+ },
+ "displayName": {
+ "type": "string",
+ "title": "Displayname"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "classification": {
+ "$ref": "#/components/schemas/PricingPlanClassification"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Createdat"
+ },
+ "pricingPlanKey": {
+ "type": "string",
+ "title": "Pricingplankey"
+ },
+ "pricingUnits": {
+ "items": {
+ "$ref": "#/components/schemas/PricingUnitGet"
+ },
+ "type": "array",
+ "title": "Pricingunits"
+ }
+ },
+ "type": "object",
+ "required": [
+ "pricingPlanId",
+ "displayName",
+ "description",
+ "classification",
+ "createdAt",
+ "pricingPlanKey",
+ "pricingUnits"
+ ],
+ "title": "ServicePricingPlanGet"
+ },
+ "Solver": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^simcore/services/comp/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Id",
+ "description": "Solver identifier"
+ },
+ "version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version",
+ "description": "semantic version number of the node"
+ },
+ "title": {
+ "type": "string",
+ "title": "Title",
+ "description": "Human readable name"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "maintainer": {
+ "type": "string",
+ "title": "Maintainer"
+ },
+ "url": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Url",
+ "description": "Link to get this resource"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "version",
+ "title",
+ "maintainer",
+ "url"
+ ],
+ "title": "Solver",
+ "description": "A released solver with a specific version",
+ "example": {
+ "description": "EM solver",
+ "id": "simcore/services/comp/isolve",
+ "maintainer": "info@itis.swiss",
+ "title": "iSolve",
+ "url": "https://api.osparc.io/v0/solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.1",
+ "version": "2.1.1"
+ }
+ },
+ "SolverPort": {
+ "properties": {
+ "key": {
+ "type": "string",
+ "pattern": "^[^_\\W0-9]\\w*$",
+ "title": "Key name",
+ "description": "port identifier name"
+ },
+ "kind": {
+ "type": "string",
+ "enum": [
+ "input",
+ "output"
+ ],
+ "title": "Kind"
+ },
+ "content_schema": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Content Schema",
+ "description": "jsonschema for the port's value. SEE https://json-schema.org"
+ }
+ },
+ "type": "object",
+ "required": [
+ "key",
+ "kind"
+ ],
+ "title": "SolverPort",
+ "example": {
+ "content_schema": {
+ "maximum": 5,
+ "minimum": 0,
+ "title": "Sleep interval",
+ "type": "integer",
+ "x_unit": "second"
+ },
+ "key": "input_2",
+ "kind": "input"
+ }
+ },
+ "Study": {
+ "properties": {
+ "uid": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Uid"
+ },
+ "title": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Title"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ }
+ },
+ "type": "object",
+ "required": [
+ "uid"
+ ],
+ "title": "Study"
+ },
+ "StudyPort": {
+ "properties": {
+ "key": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Key name",
+ "description": "port identifier name.Correponds to the UUID of the parameter/probe node in the study"
+ },
+ "kind": {
+ "type": "string",
+ "enum": [
+ "input",
+ "output"
+ ],
+ "title": "Kind"
+ },
+ "content_schema": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Content Schema",
+ "description": "jsonschema for the port's value. SEE https://json-schema.org"
+ }
+ },
+ "type": "object",
+ "required": [
+ "key",
+ "kind"
+ ],
+ "title": "StudyPort",
+ "example": {
+ "content_schema": {
+ "maximum": 5,
+ "minimum": 0,
+ "title": "Sleep interval",
+ "type": "integer",
+ "x_unit": "second"
+ },
+ "key": "f763658f-a89a-4a90-ace4-c44631290f12",
+ "kind": "input"
+ }
+ },
+ "UnitExtraInfo": {
+ "properties": {
+ "CPU": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Cpu"
+ },
+ "RAM": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Ram"
+ },
+ "VRAM": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Vram"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "CPU",
+ "RAM",
+ "VRAM"
+ ],
+ "title": "UnitExtraInfo",
+ "description": "Custom information that is propagated to the frontend. Defined fields are mandatory."
+ },
+ "UploadLinks": {
+ "properties": {
+ "abort_upload": {
+ "type": "string",
+ "title": "Abort Upload"
+ },
+ "complete_upload": {
+ "type": "string",
+ "title": "Complete Upload"
+ }
+ },
+ "type": "object",
+ "required": [
+ "abort_upload",
+ "complete_upload"
+ ],
+ "title": "UploadLinks"
+ },
+ "UploadedPart": {
+ "properties": {
+ "number": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Number",
+ "minimum": 0
+ },
+ "e_tag": {
+ "type": "string",
+ "title": "E Tag"
+ }
+ },
+ "type": "object",
+ "required": [
+ "number",
+ "e_tag"
+ ],
+ "title": "UploadedPart"
+ },
+ "UserRoleEnum": {
+ "type": "string",
+ "enum": [
+ "ANONYMOUS",
+ "GUEST",
+ "USER",
+ "TESTER",
+ "PRODUCT_OWNER",
+ "ADMIN"
+ ],
+ "title": "UserRoleEnum"
+ },
+ "UsersGroup": {
+ "properties": {
+ "gid": {
+ "type": "string",
+ "title": "Gid"
+ },
+ "label": {
+ "type": "string",
+ "title": "Label"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ }
+ },
+ "type": "object",
+ "required": [
+ "gid",
+ "label"
+ ],
+ "title": "UsersGroup"
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Location"
+ },
+ "msg": {
+ "type": "string",
+ "title": "Message"
+ },
+ "type": {
+ "type": "string",
+ "title": "Error Type"
+ }
+ },
+ "type": "object",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "title": "ValidationError"
+ },
+ "WalletGetWithAvailableCredits": {
+ "properties": {
+ "walletId": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Walletid",
+ "minimum": 0
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 100,
+ "minLength": 1,
+ "title": "Name"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "owner": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Owner",
+ "minimum": 0
+ },
+ "thumbnail": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Thumbnail"
+ },
+ "status": {
+ "$ref": "#/components/schemas/WalletStatus"
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Created"
+ },
+ "modified": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Modified"
+ },
+ "availableCredits": {
+ "type": "number",
+ "title": "Availablecredits"
+ }
+ },
+ "type": "object",
+ "required": [
+ "walletId",
+ "name",
+ "description",
+ "owner",
+ "thumbnail",
+ "status",
+ "created",
+ "modified",
+ "availableCredits"
+ ],
+ "title": "WalletGetWithAvailableCredits"
+ },
+ "WalletStatus": {
+ "type": "string",
+ "enum": [
+ "ACTIVE",
+ "INACTIVE"
+ ],
+ "title": "WalletStatus"
+ }
+ },
+ "securitySchemes": {
+ "HTTPBasic": {
+ "type": "http",
+ "scheme": "basic"
+ }
+ }
+ }
+}
diff --git a/services/catalog/openapi.json b/services/catalog/openapi.json
new file mode 100644
index 00000000000..15f417f4f79
--- /dev/null
+++ b/services/catalog/openapi.json
@@ -0,0 +1,4178 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "simcore-service-catalog",
+ "description": "Manages and maintains a catalog of all published components (e.g. macro-algorithms, scripts, etc)",
+ "version": "0.6.0"
+ },
+ "paths": {
+ "/": {
+ "get": {
+ "summary": "Check Service Health",
+ "operationId": "check_service_health__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/": {
+ "get": {
+ "tags": [
+ "diagnostics"
+ ],
+ "summary": "Check Service Health",
+ "operationId": "check_service_health_v0__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/meta": {
+ "get": {
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get Service Metadata",
+ "operationId": "get_service_metadata_v0_meta_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BaseMeta"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/services/{service_key}/{service_version}/resources": {
+ "get": {
+ "tags": [
+ "services"
+ ],
+ "summary": "Get Service Resources",
+ "operationId": "get_service_resources_v0_services__service_key___service_version__resources_get",
+ "parameters": [
+ {
+ "name": "service_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ }
+ },
+ {
+ "name": "service_version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "if passed, and that user has custom resources, they will be merged with default resources and returned.",
+ "title": "User Id"
+ },
+ "description": "if passed, and that user has custom resources, they will be merged with default resources and returned."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Response Get Service Resources V0 Services Service Key Service Version Resources Get"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/services/{service_key}/{service_version}/specifications": {
+ "get": {
+ "tags": [
+ "services"
+ ],
+ "summary": "Get Service Specifications",
+ "operationId": "get_service_specifications_v0_services__service_key___service_version__specifications_get",
+ "parameters": [
+ {
+ "name": "service_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ }
+ },
+ {
+ "name": "service_version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ },
+ {
+ "name": "strict",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "description": "if True only the version specs will be retrieved, if False the latest version will be used instead",
+ "default": false,
+ "title": "Strict"
+ },
+ "description": "if True only the version specs will be retrieved, if False the latest version will be used instead"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceSpecificationsGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/services/{service_key}/{service_version}/ports": {
+ "get": {
+ "tags": [
+ "services"
+ ],
+ "summary": "List Service Ports",
+ "description": "Returns a list of service ports starting with inputs and followed by outputs",
+ "operationId": "list_service_ports_v0_services__service_key___service_version__ports_get",
+ "parameters": [
+ {
+ "name": "service_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ }
+ },
+ {
+ "name": "service_version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "User Id"
+ }
+ },
+ {
+ "name": "x-simcore-products-name",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "title": "X-Simcore-Products-Name"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ServicePortGet"
+ },
+ "title": "Response List Service Ports V0 Services Service Key Service Version Ports Get"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/services/{service_key}/{service_version}/accessRights": {
+ "get": {
+ "tags": [
+ "services"
+ ],
+ "summary": "Get Service Access Rights",
+ "description": "Returns access rights information for provided service and product",
+ "operationId": "get_service_access_rights_v0_services__service_key___service_version__accessRights_get",
+ "parameters": [
+ {
+ "name": "service_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ }
+ },
+ {
+ "name": "service_version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "User Id"
+ }
+ },
+ {
+ "name": "x-simcore-products-name",
+ "in": "header",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "X-Simcore-Products-Name"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceAccessRightsGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/services": {
+ "get": {
+ "tags": [
+ "services"
+ ],
+ "summary": "List Services",
+ "operationId": "list_services_v0_services_get",
+ "parameters": [
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ },
+ {
+ "name": "details",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "default": true,
+ "title": "Details"
+ }
+ },
+ {
+ "name": "x-simcore-products-name",
+ "in": "header",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "X-Simcore-Products-Name"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ServiceGet"
+ },
+ "title": "Response List Services V0 Services Get"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v0/services/{service_key}/{service_version}": {
+ "get": {
+ "tags": [
+ "services"
+ ],
+ "summary": "Get Service",
+ "operationId": "get_service_v0_services__service_key___service_version__get",
+ "parameters": [
+ {
+ "name": "service_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ }
+ },
+ {
+ "name": "service_version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "User Id"
+ }
+ },
+ {
+ "name": "x-simcore-products-name",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "title": "X-Simcore-Products-Name"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "patch": {
+ "tags": [
+ "services"
+ ],
+ "summary": "Update Service",
+ "operationId": "update_service_v0_services__service_key___service_version__patch",
+ "parameters": [
+ {
+ "name": "service_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ }
+ },
+ {
+ "name": "service_version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "User Id"
+ }
+ },
+ {
+ "name": "x-simcore-products-name",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Simcore-Products-Name"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceUpdate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ServiceGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "Author": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of the author"
+ },
+ "email": {
+ "type": "string",
+ "format": "email",
+ "title": "Email",
+ "description": "Email address"
+ },
+ "affiliation": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Affiliation"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "email"
+ ],
+ "title": "Author"
+ },
+ "Badge": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of the subject"
+ },
+ "image": {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri",
+ "title": "Image",
+ "description": "Url to the badge"
+ },
+ "url": {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri",
+ "title": "Url",
+ "description": "Link to the status"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "image",
+ "url"
+ ],
+ "title": "Badge",
+ "example": {
+ "image": "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation",
+ "name": "osparc.io",
+ "url": "https://itisfoundation.github.io/"
+ }
+ },
+ "BaseMeta": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ },
+ "released": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Released",
+ "description": "Maps every route's path tag with a released version"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "version"
+ ],
+ "title": "BaseMeta",
+ "example": {
+ "name": "simcore_service_foo",
+ "released": {
+ "v1": "1.3.4",
+ "v2": "2.4.45"
+ },
+ "version": "2.4.45"
+ }
+ },
+ "BindOptions": {
+ "properties": {
+ "Propagation": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Propagation"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`."
+ },
+ "NonRecursive": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Nonrecursive",
+ "description": "Disable recursive bind mount.",
+ "default": false
+ }
+ },
+ "type": "object",
+ "title": "BindOptions",
+ "description": "Optional configuration for the `bind` type."
+ },
+ "BootChoice": {
+ "properties": {
+ "label": {
+ "type": "string",
+ "title": "Label"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ }
+ },
+ "type": "object",
+ "required": [
+ "label",
+ "description"
+ ],
+ "title": "BootChoice"
+ },
+ "BootMode": {
+ "type": "string",
+ "enum": [
+ "CPU",
+ "GPU",
+ "MPI"
+ ],
+ "title": "BootMode"
+ },
+ "BootOption": {
+ "properties": {
+ "label": {
+ "type": "string",
+ "title": "Label"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "default": {
+ "type": "string",
+ "title": "Default"
+ },
+ "items": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/BootChoice"
+ },
+ "type": "object",
+ "title": "Items"
+ }
+ },
+ "type": "object",
+ "required": [
+ "label",
+ "description",
+ "default",
+ "items"
+ ],
+ "title": "BootOption"
+ },
+ "Condition": {
+ "type": "string",
+ "enum": [
+ "none",
+ "on-failure",
+ "any"
+ ],
+ "title": "Condition",
+ "description": "Condition for restart."
+ },
+ "Config1": {
+ "properties": {
+ "File": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/File1"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "File represents a specific target that is backed by a file.\n\n
\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n"
+ },
+ "Runtime": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Runtime",
+ "description": "Runtime represents a target that is not mounted into the\ncontainer but is used by the task\n\n
\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually\n> exclusive\n"
+ },
+ "ConfigID": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Configid",
+ "description": "ConfigID represents the ID of the specific config that we're\nreferencing.\n"
+ },
+ "ConfigName": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Configname",
+ "description": "ConfigName is the name of the config that this references,\nbut this is just provided for lookup/display purposes. The\nconfig in the reference will be identified by its ID.\n"
+ }
+ },
+ "type": "object",
+ "title": "Config1"
+ },
+ "ContainerSpec": {
+ "properties": {
+ "Image": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Image",
+ "description": "The image name to use for the container"
+ },
+ "Labels": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Labels",
+ "description": "User-defined key/value data."
+ },
+ "Command": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Command",
+ "description": "The command to be run in the image."
+ },
+ "Args": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Args",
+ "description": "Arguments to the command."
+ },
+ "Hostname": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Hostname",
+ "description": "The hostname to use for the container, as a valid\n[RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n"
+ },
+ "Env": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Env",
+ "description": "A list of environment variables in the form `VAR=value`.\n"
+ },
+ "Dir": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Dir",
+ "description": "The working directory for commands to run in."
+ },
+ "User": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User",
+ "description": "The user inside the container."
+ },
+ "Groups": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Groups",
+ "description": "A list of additional groups that the container process will run as.\n"
+ },
+ "Privileges": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Privileges"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Security options for the container"
+ },
+ "TTY": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Tty",
+ "description": "Whether a pseudo-TTY should be allocated."
+ },
+ "OpenStdin": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Openstdin",
+ "description": "Open `stdin`"
+ },
+ "ReadOnly": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Readonly",
+ "description": "Mount the container's root filesystem as read only."
+ },
+ "Mounts": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/Mount"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Mounts",
+ "description": "Specification for mounts to be added to containers created as part\nof the service.\n"
+ },
+ "StopSignal": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Stopsignal",
+ "description": "Signal to stop the container."
+ },
+ "StopGracePeriod": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Stopgraceperiod",
+ "description": "Amount of time to wait for the container to terminate before\nforcefully killing it.\n"
+ },
+ "HealthCheck": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/HealthConfig"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "Hosts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Hosts",
+ "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n"
+ },
+ "DNSConfig": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/DnsConfig"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`).\n"
+ },
+ "Secrets": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/Secret"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Secrets",
+ "description": "Secrets contains references to zero or more secrets that will be\nexposed to the service.\n"
+ },
+ "Configs": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/Config1"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Configs",
+ "description": "Configs contains references to zero or more configs that will be\nexposed to the service.\n"
+ },
+ "Isolation": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Isolation1"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Isolation technology of the containers running the service.\n(Windows only)\n"
+ },
+ "Init": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Init",
+ "description": "Run an init inside the container that forwards signals and reaps\nprocesses. This field is omitted if empty, and the default (as\nconfigured on the daemon) is used.\n"
+ },
+ "Sysctls": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Sysctls",
+ "description": "Set kernel namedspaced parameters (sysctls) in the container.\nThe Sysctls option on services accepts the same sysctls as the\nare supported on containers. Note that while the same sysctls are\nsupported, no guarantees or checks are made about their\nsuitability for a clustered environment, and it's up to the user\nto determine whether a given sysctl will work properly in a\nService.\n"
+ },
+ "CapabilityAdd": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Capabilityadd",
+ "description": "A list of kernel capabilities to add to the default set\nfor the container.\n"
+ },
+ "CapabilityDrop": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Capabilitydrop",
+ "description": "A list of kernel capabilities to drop from the default set\nfor the container.\n"
+ },
+ "Ulimits": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/Ulimit"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Ulimits",
+ "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n"
+ }
+ },
+ "type": "object",
+ "title": "ContainerSpec",
+ "description": "Container spec for the service.\n\n
\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`."
+ },
+ "CredentialSpec": {
+ "properties": {
+ "Config": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Config",
+ "description": "Load credential spec from a Swarm Config with the given ID.\nThe specified config must also be present in the Configs\nfield with the Runtime property set.\n\n
\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n"
+ },
+ "File": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "File",
+ "description": "Load credential spec from this file. The file is read by\nthe daemon, and must be present in the `CredentialSpecs`\nsubdirectory in the docker data directory, which defaults\nto `C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads\n`C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n
\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n"
+ },
+ "Registry": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Registry",
+ "description": "Load credential spec from this value in the Windows\nregistry. The specified registry value must be located in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n
\n\n\n> **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n> and `CredentialSpec.Config` are mutually exclusive.\n"
+ }
+ },
+ "type": "object",
+ "title": "CredentialSpec",
+ "description": "CredentialSpec for managed service account (Windows only)"
+ },
+ "DiscreteResourceSpec": {
+ "properties": {
+ "Kind": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Kind"
+ },
+ "Value": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Value"
+ }
+ },
+ "type": "object",
+ "title": "DiscreteResourceSpec"
+ },
+ "DnsConfig": {
+ "properties": {
+ "Nameservers": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Nameservers",
+ "description": "The IP addresses of the name servers."
+ },
+ "Search": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Search",
+ "description": "A search list for host-name lookup."
+ },
+ "Options": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Options",
+ "description": "A list of internal resolver variables to be modified (e.g.,\n`debug`, `ndots:3`, etc.).\n"
+ }
+ },
+ "type": "object",
+ "title": "DnsConfig",
+ "description": "Specification for DNS related configurations in resolver configuration\nfile (`resolv.conf`)."
+ },
+ "DriverConfig": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name",
+ "description": "Name of the driver to use to create the volume."
+ },
+ "Options": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Options",
+ "description": "key/value map of driver specific options."
+ }
+ },
+ "type": "object",
+ "title": "DriverConfig",
+ "description": "Map of driver specific options"
+ },
+ "EndpointPortConfig": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name"
+ },
+ "Protocol": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Type"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "TargetPort": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Targetport",
+ "description": "The port inside the container."
+ },
+ "PublishedPort": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Publishedport",
+ "description": "The port on the swarm hosts."
+ },
+ "PublishMode": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PublishMode"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The mode in which port is published.\n\n
\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n",
+ "default": "ingress"
+ }
+ },
+ "type": "object",
+ "title": "EndpointPortConfig"
+ },
+ "EndpointSpec": {
+ "properties": {
+ "Mode": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Mode1"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The mode of resolution to use for internal load balancing between tasks.\n",
+ "default": "vip"
+ },
+ "Ports": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/EndpointPortConfig"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Ports",
+ "description": "List of exposed ports that this service is accessible on from the\noutside. Ports can only be provided if `vip` resolution mode is used.\n"
+ }
+ },
+ "type": "object",
+ "title": "EndpointSpec",
+ "description": "Properties that can be configured to access and load balance a service."
+ },
+ "FailureAction": {
+ "type": "string",
+ "enum": [
+ "continue",
+ "pause",
+ "rollback"
+ ],
+ "title": "FailureAction",
+ "description": "Action to take if an updated task fails to run, or stops running\nduring the update."
+ },
+ "FailureAction1": {
+ "type": "string",
+ "enum": [
+ "continue",
+ "pause"
+ ],
+ "title": "FailureAction1",
+ "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback."
+ },
+ "File": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name",
+ "description": "Name represents the final filename in the filesystem.\n"
+ },
+ "UID": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Uid",
+ "description": "UID represents the file UID."
+ },
+ "GID": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Gid",
+ "description": "GID represents the file GID."
+ },
+ "Mode": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Mode",
+ "description": "Mode represents the FileMode of the file."
+ }
+ },
+ "type": "object",
+ "title": "File",
+ "description": "File represents a specific target that is backed by a file."
+ },
+ "File1": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name",
+ "description": "Name represents the final filename in the filesystem.\n"
+ },
+ "UID": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Uid",
+ "description": "UID represents the file UID."
+ },
+ "GID": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Gid",
+ "description": "GID represents the file GID."
+ },
+ "Mode": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Mode",
+ "description": "Mode represents the FileMode of the file."
+ }
+ },
+ "type": "object",
+ "title": "File1",
+ "description": "File represents a specific target that is backed by a file.\n\n
\n\n> **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive"
+ },
+ "GenericResource": {
+ "properties": {
+ "NamedResourceSpec": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/NamedResourceSpec"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "DiscreteResourceSpec": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/DiscreteResourceSpec"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "title": "GenericResource"
+ },
+ "GenericResources": {
+ "items": {
+ "$ref": "#/components/schemas/GenericResource"
+ },
+ "type": "array",
+ "title": "GenericResources",
+ "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or\nString resources (e.g, `GPU=UUID1`)."
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "errors": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Validation errors"
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError"
+ },
+ "HealthConfig": {
+ "properties": {
+ "Test": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Test",
+ "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n"
+ },
+ "Interval": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Interval",
+ "description": "The time to wait between checks in nanoseconds. It should be 0 or at\nleast 1000000 (1 ms). 0 means inherit.\n"
+ },
+ "Timeout": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Timeout",
+ "description": "The time to wait before considering the check to have hung. It should\nbe 0 or at least 1000000 (1 ms). 0 means inherit.\n"
+ },
+ "Retries": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Retries",
+ "description": "The number of consecutive failures needed to consider a container as\nunhealthy. 0 means inherit.\n"
+ },
+ "StartPeriod": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Startperiod",
+ "description": "Start period for the container to initialize before starting\nhealth-retries countdown in nanoseconds. It should be 0 or at least\n1000000 (1 ms). 0 means inherit.\n"
+ }
+ },
+ "type": "object",
+ "title": "HealthConfig",
+ "description": "A test to perform to check that the container is healthy."
+ },
+ "ImageResources": {
+ "properties": {
+ "image": {
+ "type": "string",
+ "pattern": "^(?:([a-z0-9-]+(?:\\.[a-z0-9-]+)+(?::\\d+)?|[a-z0-9-]+:\\d+)/)?((?:[a-z0-9][a-z0-9_.-]*/)*[a-z0-9-_]+[a-z0-9])(?::([\\w][\\w.-]{0,127}))?(\\@sha256:[a-fA-F0-9]{32,64})?$",
+ "title": "Image",
+ "description": "Used by the frontend to provide a context for the users.Services with a docker-compose spec will have multiple entries.Using the `image:version` instead of the docker-compose spec is more helpful for the end user."
+ },
+ "resources": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ResourceValue"
+ },
+ "type": "object",
+ "title": "Resources"
+ },
+ "boot_modes": {
+ "items": {
+ "$ref": "#/components/schemas/BootMode"
+ },
+ "type": "array",
+ "title": "Boot Modes",
+ "description": "describe how a service shall be booted, using CPU, MPI, openMP or GPU",
+ "default": [
+ "CPU"
+ ]
+ }
+ },
+ "type": "object",
+ "required": [
+ "image",
+ "resources"
+ ],
+ "title": "ImageResources",
+ "example": {
+ "image": "simcore/service/dynamic/pretty-intense:1.0.0",
+ "resources": {
+ "AIRAM": {
+ "limit": 1,
+ "reservation": 1
+ },
+ "ANY_resource": {
+ "limit": "some_value",
+ "reservation": "some_value"
+ },
+ "CPU": {
+ "limit": 4,
+ "reservation": 0.1
+ },
+ "RAM": {
+ "limit": 103079215104,
+ "reservation": 536870912
+ },
+ "VRAM": {
+ "limit": 1,
+ "reservation": 1
+ }
+ }
+ }
+ },
+ "Isolation1": {
+ "type": "string",
+ "enum": [
+ "default",
+ "process",
+ "hyperv"
+ ],
+ "title": "Isolation1",
+ "description": "Isolation technology of the containers running the service.\n(Windows only)"
+ },
+ "Limit": {
+ "properties": {
+ "NanoCPUs": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Nanocpus"
+ },
+ "MemoryBytes": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Memorybytes"
+ },
+ "Pids": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pids",
+ "description": "Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n",
+ "default": 0
+ }
+ },
+ "type": "object",
+ "title": "Limit",
+ "description": "An object describing a limit on resources which can be requested by a task."
+ },
+ "LogDriver1": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name"
+ },
+ "Options": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Options"
+ }
+ },
+ "type": "object",
+ "title": "LogDriver1",
+ "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified."
+ },
+ "Mode": {
+ "properties": {
+ "Replicated": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Replicated"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "Global": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Global"
+ },
+ "ReplicatedJob": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ReplicatedJob"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The mode used for services with a finite number of tasks that run\nto a completed state.\n"
+ },
+ "GlobalJob": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Globaljob",
+ "description": "The mode used for services which run a task to the completed state\non each valid node.\n"
+ }
+ },
+ "type": "object",
+ "title": "Mode",
+ "description": "Scheduling mode for the service."
+ },
+ "Mode1": {
+ "type": "string",
+ "enum": [
+ "vip",
+ "dnsrr"
+ ],
+ "title": "Mode1",
+ "description": "The mode of resolution to use for internal load balancing between tasks."
+ },
+ "Mount": {
+ "properties": {
+ "Target": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target",
+ "description": "Container path."
+ },
+ "Source": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Source",
+ "description": "Mount source (e.g. a volume name, a host path)."
+ },
+ "Type": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Type2"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n- `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container.\n"
+ },
+ "ReadOnly": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Readonly",
+ "description": "Whether the mount should be read-only."
+ },
+ "Consistency": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Consistency",
+ "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`."
+ },
+ "BindOptions": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/BindOptions"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional configuration for the `bind` type."
+ },
+ "VolumeOptions": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/VolumeOptions"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional configuration for the `volume` type."
+ },
+ "TmpfsOptions": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/TmpfsOptions"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional configuration for the `tmpfs` type."
+ }
+ },
+ "type": "object",
+ "title": "Mount"
+ },
+ "NamedResourceSpec": {
+ "properties": {
+ "Kind": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Kind"
+ },
+ "Value": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Value"
+ }
+ },
+ "type": "object",
+ "title": "NamedResourceSpec"
+ },
+ "NetworkAttachmentConfig": {
+ "properties": {
+ "Target": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target",
+ "description": "The target network for attachment. Must be a network name or ID.\n"
+ },
+ "Aliases": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Aliases",
+ "description": "Discoverable alternate names for the service on this network.\n"
+ },
+ "DriverOpts": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Driveropts",
+ "description": "Driver attachment options for the network target.\n"
+ }
+ },
+ "type": "object",
+ "title": "NetworkAttachmentConfig",
+ "description": "Specifies how a service should be attached to a particular network."
+ },
+ "NetworkAttachmentSpec": {
+ "properties": {
+ "ContainerID": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Containerid",
+ "description": "ID of the container represented by this task"
+ }
+ },
+ "type": "object",
+ "title": "NetworkAttachmentSpec",
+ "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n
\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`."
+ },
+ "Order": {
+ "type": "string",
+ "enum": [
+ "stop-first",
+ "start-first"
+ ],
+ "title": "Order",
+ "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down."
+ },
+ "Order1": {
+ "type": "string",
+ "enum": [
+ "stop-first",
+ "start-first"
+ ],
+ "title": "Order1",
+ "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down."
+ },
+ "Placement": {
+ "properties": {
+ "Constraints": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Constraints",
+ "description": "An array of constraint expressions to limit the set of nodes where\na task can be scheduled. Constraint expressions can either use a\n_match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\nnodes that satisfy every expression (AND match). Constraints can\nmatch node or Docker Engine labels as follows:\n\nnode attribute | matches | example\n---------------------|--------------------------------|-----------------------------------------------\n`node.id` | Node ID | `node.id==2ivku8v2gvtg4`\n`node.hostname` | Node hostname | `node.hostname!=node-2`\n`node.role` | Node role (`manager`/`worker`) | `node.role==manager`\n`node.platform.os` | Node operating system | `node.platform.os==windows`\n`node.platform.arch` | Node architecture | `node.platform.arch==x86_64`\n`node.labels` | User-defined node labels | `node.labels.security==high`\n`engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-14.04`\n\n`engine.labels` apply to Docker Engine labels like operating system,\ndrivers, etc. Swarm administrators add `node.labels` for operational\npurposes by using the [`node update endpoint`](#operation/NodeUpdate).\n"
+ },
+ "Preferences": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/Preference"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Preferences",
+ "description": "Preferences provide a way to make the scheduler aware of factors\nsuch as topology. They are provided in order from highest to\nlowest precedence.\n"
+ },
+ "MaxReplicas": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Maxreplicas",
+ "description": "Maximum number of replicas for per node (default value is 0, which\nis unlimited)\n",
+ "default": 0
+ },
+ "Platforms": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/Platform"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Platforms",
+ "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n"
+ }
+ },
+ "type": "object",
+ "title": "Placement"
+ },
+ "Platform": {
+ "properties": {
+ "Architecture": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Architecture",
+ "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n"
+ },
+ "OS": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Os",
+ "description": "OS represents the Operating System (for example, `linux` or `windows`).\n"
+ }
+ },
+ "type": "object",
+ "title": "Platform",
+ "description": "Platform represents the platform (Arch/OS)."
+ },
+ "PluginPrivilege": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name"
+ },
+ "Description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "Value": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Value"
+ }
+ },
+ "type": "object",
+ "title": "PluginPrivilege",
+ "description": "Describes a permission the user has to accept upon installing\nthe plugin."
+ },
+ "PluginSpec": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name",
+ "description": "The name or 'alias' to use for the plugin."
+ },
+ "Remote": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Remote",
+ "description": "The plugin image reference to use."
+ },
+ "Disabled": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Disabled",
+ "description": "Disable the plugin once scheduled."
+ },
+ "PluginPrivilege": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/PluginPrivilege"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pluginprivilege"
+ }
+ },
+ "type": "object",
+ "title": "PluginSpec",
+ "description": "Plugin spec for the service. *(Experimental release only.)*\n\n
\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`."
+ },
+ "Preference": {
+ "properties": {
+ "Spread": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Spread"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "title": "Preference"
+ },
+ "Privileges": {
+ "properties": {
+ "CredentialSpec": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/CredentialSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "CredentialSpec for managed service account (Windows only)"
+ },
+ "SELinuxContext": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SeLinuxContext"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "SELinux labels of the container"
+ }
+ },
+ "type": "object",
+ "title": "Privileges",
+ "description": "Security options for the container"
+ },
+ "Propagation": {
+ "type": "string",
+ "enum": [
+ "private",
+ "rprivate",
+ "shared",
+ "rshared",
+ "slave",
+ "rslave"
+ ],
+ "title": "Propagation",
+ "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`."
+ },
+ "PublishMode": {
+ "type": "string",
+ "enum": [
+ "ingress",
+ "host"
+ ],
+ "title": "PublishMode",
+ "description": "The mode in which port is published.\n\n
\n\n- \"ingress\" makes the target port accessible on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running."
+ },
+ "Replicated": {
+ "properties": {
+ "Replicas": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Replicas"
+ }
+ },
+ "type": "object",
+ "title": "Replicated"
+ },
+ "ReplicatedJob": {
+ "properties": {
+ "MaxConcurrent": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Maxconcurrent",
+ "description": "The maximum number of replicas to run simultaneously.\n",
+ "default": 1
+ },
+ "TotalCompletions": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Totalcompletions",
+ "description": "The total number of replicas desired to reach the Completed\nstate. If unset, will default to the value of `MaxConcurrent`\n"
+ }
+ },
+ "type": "object",
+ "title": "ReplicatedJob",
+ "description": "The mode used for services with a finite number of tasks that run\nto a completed state."
+ },
+ "ResourceObject": {
+ "properties": {
+ "NanoCPUs": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Nanocpus"
+ },
+ "MemoryBytes": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Memorybytes"
+ },
+ "GenericResources": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GenericResources"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "title": "ResourceObject",
+ "description": "An object describing the resources which can be advertised by a node and\nrequested by a task."
+ },
+ "ResourceValue": {
+ "properties": {
+ "limit": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Limit"
+ },
+ "reservation": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Reservation"
+ }
+ },
+ "type": "object",
+ "required": [
+ "limit",
+ "reservation"
+ ],
+ "title": "ResourceValue"
+ },
+ "Resources1": {
+ "properties": {
+ "Limits": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Limit"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Define resources limits."
+ },
+ "Reservations": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ResourceObject"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Define resources reservation."
+ }
+ },
+ "type": "object",
+ "title": "Resources1",
+ "description": "Resource requirements which apply to each individual container created\nas part of the service."
+ },
+ "RestartPolicy1": {
+ "properties": {
+ "Condition": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Condition"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Condition for restart."
+ },
+ "Delay": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Delay",
+ "description": "Delay between restart attempts."
+ },
+ "MaxAttempts": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Maxattempts",
+ "description": "Maximum attempts to restart a given container before giving up\n(default value is 0, which is ignored).\n",
+ "default": 0
+ },
+ "Window": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Window",
+ "description": "Windows is the time window used to evaluate the restart policy\n(default value is 0, which is unbounded).\n",
+ "default": 0
+ }
+ },
+ "type": "object",
+ "title": "RestartPolicy1",
+ "description": "Specification for the restart policy which applies to containers\ncreated as part of this service."
+ },
+ "RollbackConfig": {
+ "properties": {
+ "Parallelism": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Parallelism",
+ "description": "Maximum number of tasks to be rolled back in one iteration (0 means\nunlimited parallelism).\n"
+ },
+ "Delay": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Delay",
+ "description": "Amount of time between rollback iterations, in nanoseconds.\n"
+ },
+ "FailureAction": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/FailureAction1"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Action to take if an rolled back task fails to run, or stops\nrunning during the rollback.\n"
+ },
+ "Monitor": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Monitor",
+ "description": "Amount of time to monitor each rolled back task for failures, in\nnanoseconds.\n"
+ },
+ "MaxFailureRatio": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Maxfailureratio",
+ "description": "The fraction of tasks that may fail during a rollback before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n",
+ "default": 0
+ },
+ "Order": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Order1"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The order of operations when rolling back a task. Either the old\ntask is shut down before the new task is started, or the new task\nis started before the old task is shut down.\n"
+ }
+ },
+ "type": "object",
+ "title": "RollbackConfig",
+ "description": "Specification for the rollback strategy of the service."
+ },
+ "SeLinuxContext": {
+ "properties": {
+ "Disable": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Disable",
+ "description": "Disable SELinux"
+ },
+ "User": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User",
+ "description": "SELinux user label"
+ },
+ "Role": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Role",
+ "description": "SELinux role label"
+ },
+ "Type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Type",
+ "description": "SELinux type label"
+ },
+ "Level": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Level",
+ "description": "SELinux level label"
+ }
+ },
+ "type": "object",
+ "title": "SeLinuxContext",
+ "description": "SELinux labels of the container"
+ },
+ "Secret": {
+ "properties": {
+ "File": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/File"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "File represents a specific target that is backed by a file.\n"
+ },
+ "SecretID": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Secretid",
+ "description": "SecretID represents the ID of the specific secret that we're\nreferencing.\n"
+ },
+ "SecretName": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Secretname",
+ "description": "SecretName is the name of the secret that this references,\nbut this is just provided for lookup/display purposes. The\nsecret in the reference will be identified by its ID.\n"
+ }
+ },
+ "type": "object",
+ "title": "Secret"
+ },
+ "SelectBox": {
+ "properties": {
+ "structure": {
+ "items": {
+ "$ref": "#/components/schemas/Structure"
+ },
+ "type": "array",
+ "minItems": 1,
+ "title": "Structure"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "structure"
+ ],
+ "title": "SelectBox"
+ },
+ "ServiceAccessRightsGet": {
+ "properties": {
+ "service_key": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ },
+ "service_version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ },
+ "gids_with_access_rights": {
+ "additionalProperties": {
+ "additionalProperties": {
+ "type": "boolean"
+ },
+ "type": "object"
+ },
+ "type": "object",
+ "title": "Gids With Access Rights"
+ }
+ },
+ "type": "object",
+ "required": [
+ "service_key",
+ "service_version",
+ "gids_with_access_rights"
+ ],
+ "title": "ServiceAccessRightsGet"
+ },
+ "ServiceGet": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Display name: short, human readable name for the node"
+ },
+ "thumbnail": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Thumbnail",
+ "description": "url to the thumbnail"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "human readable description of the purpose of the node"
+ },
+ "description_ui": {
+ "type": "boolean",
+ "title": "Description Ui",
+ "description": "A flag to enable the `description` to be presented as a single web page (=true) or in another structured format (default=false).",
+ "default": false
+ },
+ "version_display": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Version Display",
+ "description": "A user-friendly or marketing name for the release. This can be used to reference the release in a more readable and recognizable format, such as 'Matterhorn Release,' 'Spring Update,' or 'Holiday Edition.' This name is not used for version comparison but is useful for communication and documentation purposes."
+ },
+ "deprecated": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Deprecated",
+ "description": "Owner can set the date to retire the service. Three possibilities:If None, the service is marked as `published`;If now=deprecated, the service is retired"
+ },
+ "classifiers": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Classifiers"
+ },
+ "quality": {
+ "type": "object",
+ "title": "Quality",
+ "default": {}
+ },
+ "accessRights": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ServiceGroupAccessRights"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Accessrights",
+ "description": "service access rights per group id"
+ },
+ "key": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Key",
+ "description": "distinctive name for the node based on the docker registry path"
+ },
+ "version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version",
+ "description": "service version number"
+ },
+ "release_date": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Release Date",
+ "description": "A timestamp when the specific version of the service was released. This field helps in tracking the timeline of releases and understanding the sequence of updates. A timestamp string should be formatted as YYYY-MM-DD[T]HH:MM[:SS[.ffffff]][Z or [\u00b1]HH[:]MM]"
+ },
+ "integration-version": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Integration-Version",
+ "description": "This version is used to maintain backward compatibility when there are changes in the way a service is integrated into the framework"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ServiceType",
+ "description": "service type"
+ },
+ "badges": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/Badge"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Badges",
+ "deprecated": true
+ },
+ "authors": {
+ "items": {
+ "$ref": "#/components/schemas/Author"
+ },
+ "type": "array",
+ "minItems": 1,
+ "title": "Authors"
+ },
+ "contact": {
+ "type": "string",
+ "format": "email",
+ "title": "Contact",
+ "description": "email to correspond to the authors about the node"
+ },
+ "inputs": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Inputs",
+ "description": "definition of the inputs of this node"
+ },
+ "outputs": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Outputs",
+ "description": "definition of the outputs of this node"
+ },
+ "boot-options": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Boot-Options",
+ "description": "Service defined boot options. These get injected in the service as env variables."
+ },
+ "min-visible-inputs": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Min-Visible-Inputs",
+ "description": "The number of 'data type inputs' displayed by default in the UI. When None all 'data type inputs' are displayed."
+ },
+ "progress_regexp": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Progress Regexp",
+ "description": "regexp pattern for detecting computational service's progress"
+ },
+ "image_digest": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Image Digest",
+ "description": "Image manifest digest. Note that this is NOT injected as an image label"
+ },
+ "owner": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "email"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Owner",
+ "description": "None when the owner email cannot be found in the database"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "description",
+ "classifiers",
+ "key",
+ "version",
+ "type",
+ "authors",
+ "contact",
+ "inputs",
+ "outputs",
+ "owner"
+ ],
+ "title": "ServiceGet"
+ },
+ "ServiceGroupAccessRights": {
+ "properties": {
+ "execute_access": {
+ "type": "boolean",
+ "title": "Execute Access",
+ "description": "defines whether the group can execute the service",
+ "default": false
+ },
+ "write_access": {
+ "type": "boolean",
+ "title": "Write Access",
+ "description": "defines whether the group can modify the service",
+ "default": false
+ }
+ },
+ "type": "object",
+ "title": "ServiceGroupAccessRights"
+ },
+ "ServiceInput": {
+ "properties": {
+ "displayOrder": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Displayorder",
+ "description": "DEPRECATED: new display order is taken from the item position. This will be removed.",
+ "deprecated": true
+ },
+ "label": {
+ "type": "string",
+ "title": "Label",
+ "description": "short name for the property"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "description of the property"
+ },
+ "type": {
+ "type": "string",
+ "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$",
+ "title": "Type",
+ "description": "data type expected on this input glob matching for data type is allowed"
+ },
+ "contentSchema": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Contentschema",
+ "description": "jsonschema of this input/output. Required when type='ref_contentSchema'"
+ },
+ "fileToKeyMap": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Filetokeymap",
+ "description": "Place the data associated with the named keys in files"
+ },
+ "unit": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Unit",
+ "description": "Units, when it refers to a physical quantity",
+ "deprecated": true
+ },
+ "defaultValue": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Defaultvalue",
+ "deprecated": true
+ },
+ "widget": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Widget"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "custom widget to use instead of the default one determined from the data-type"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "label",
+ "description",
+ "type"
+ ],
+ "title": "ServiceInput",
+ "description": "Metadata on a service input port"
+ },
+ "ServiceOutput": {
+ "properties": {
+ "displayOrder": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Displayorder",
+ "description": "DEPRECATED: new display order is taken from the item position. This will be removed.",
+ "deprecated": true
+ },
+ "label": {
+ "type": "string",
+ "title": "Label",
+ "description": "short name for the property"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "description of the property"
+ },
+ "type": {
+ "type": "string",
+ "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$",
+ "title": "Type",
+ "description": "data type expected on this input glob matching for data type is allowed"
+ },
+ "contentSchema": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Contentschema",
+ "description": "jsonschema of this input/output. Required when type='ref_contentSchema'"
+ },
+ "fileToKeyMap": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Filetokeymap",
+ "description": "Place the data associated with the named keys in files"
+ },
+ "unit": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Unit",
+ "description": "Units, when it refers to a physical quantity",
+ "deprecated": true
+ },
+ "widget": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Widget"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "custom widget to use instead of the default one determined from the data-type",
+ "deprecated": true
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "label",
+ "description",
+ "type"
+ ],
+ "title": "ServiceOutput"
+ },
+ "ServicePortGet": {
+ "properties": {
+ "key": {
+ "type": "string",
+ "pattern": "^[^_\\W0-9]\\w*$",
+ "title": "Key name",
+ "description": "port identifier name"
+ },
+ "kind": {
+ "type": "string",
+ "enum": [
+ "input",
+ "output"
+ ],
+ "title": "Kind"
+ },
+ "content_media_type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Content Media Type"
+ },
+ "content_schema": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Content Schema",
+ "description": "jsonschema for the port's value. SEE https://json-schema.org/understanding-json-schema/"
+ }
+ },
+ "type": "object",
+ "required": [
+ "key",
+ "kind"
+ ],
+ "title": "ServicePortGet",
+ "example": {
+ "content_schema": {
+ "maximum": 5,
+ "minimum": 0,
+ "title": "Sleep interval",
+ "type": "integer",
+ "x_unit": "second"
+ },
+ "key": "input_1",
+ "kind": "input"
+ }
+ },
+ "ServiceSpec": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name",
+ "description": "Name of the service."
+ },
+ "Labels": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Labels",
+ "description": "User-defined key/value metadata."
+ },
+ "TaskTemplate": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/TaskSpec"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "Mode": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Mode"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Scheduling mode for the service."
+ },
+ "UpdateConfig": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/UpdateConfig"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Specification for the update strategy of the service."
+ },
+ "RollbackConfig": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RollbackConfig"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Specification for the rollback strategy of the service."
+ },
+ "Networks": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/NetworkAttachmentConfig"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Networks",
+ "description": "Specifies which networks the service should attach to."
+ },
+ "EndpointSpec": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/EndpointSpec"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "title": "ServiceSpec",
+ "description": "User modifiable configuration for a service."
+ },
+ "ServiceSpecificationsGet": {
+ "properties": {
+ "sidecar": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ServiceSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "schedule-time specifications for the service sidecar (follows Docker Service creation API, see https://docs.docker.com/engine/api/v1.25/#operation/ServiceCreate)"
+ },
+ "service": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ServiceSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "schedule-time specifications specifications for the service (follows Docker Service creation API (specifically only the Resources part), see https://docs.docker.com/engine/api/v1.41/#tag/Service/operation/ServiceCreate"
+ }
+ },
+ "type": "object",
+ "title": "ServiceSpecificationsGet"
+ },
+ "ServiceType": {
+ "type": "string",
+ "enum": [
+ "computational",
+ "dynamic",
+ "frontend",
+ "backend"
+ ],
+ "title": "ServiceType"
+ },
+ "ServiceUpdate": {
+ "properties": {
+ "accessRights": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ServiceGroupAccessRights"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Accessrights",
+ "description": "service access rights per group id"
+ },
+ "name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name"
+ },
+ "thumbnail": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Thumbnail"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "description_ui": {
+ "type": "boolean",
+ "title": "Description Ui",
+ "default": false
+ },
+ "version_display": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Version Display"
+ },
+ "deprecated": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Deprecated",
+ "description": "Owner can set the date to retire the service. Three possibilities:If None, the service is marked as `published`;If now=deprecated, the service is retired"
+ },
+ "classifiers": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Classifiers"
+ },
+ "quality": {
+ "type": "object",
+ "title": "Quality",
+ "default": {}
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "thumbnail",
+ "description",
+ "classifiers"
+ ],
+ "title": "ServiceUpdate",
+ "example": {
+ "accessRights": {
+ "1": {
+ "execute_access": false,
+ "write_access": false
+ },
+ "2": {
+ "execute_access": true,
+ "write_access": true
+ },
+ "44": {
+ "execute_access": false,
+ "write_access": false
+ }
+ },
+ "classifiers": [
+ "RRID:SCR_018997",
+ "RRID:SCR_019001"
+ ],
+ "description": "An interesting service that does something",
+ "name": "My Human Readable Service Name",
+ "quality": {
+ "annotations": {
+ "certificationLink": "",
+ "certificationStatus": "Uncertified",
+ "documentation": "",
+ "limitations": "",
+ "purpose": "",
+ "standards": "",
+ "vandv": ""
+ },
+ "enabled": true,
+ "tsr": {
+ "r01": {
+ "level": 3,
+ "references": ""
+ },
+ "r02": {
+ "level": 2,
+ "references": ""
+ },
+ "r03": {
+ "level": 0,
+ "references": ""
+ },
+ "r04": {
+ "level": 0,
+ "references": ""
+ },
+ "r05": {
+ "level": 2,
+ "references": ""
+ },
+ "r06": {
+ "level": 0,
+ "references": ""
+ },
+ "r07": {
+ "level": 0,
+ "references": ""
+ },
+ "r08": {
+ "level": 1,
+ "references": ""
+ },
+ "r09": {
+ "level": 0,
+ "references": ""
+ },
+ "r10": {
+ "level": 0,
+ "references": ""
+ }
+ }
+ }
+ }
+ },
+ "Spread": {
+ "properties": {
+ "SpreadDescriptor": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Spreaddescriptor",
+ "description": "label descriptor, such as `engine.labels.az`.\n"
+ }
+ },
+ "type": "object",
+ "title": "Spread"
+ },
+ "Structure": {
+ "properties": {
+ "key": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "number"
+ }
+ ],
+ "title": "Key"
+ },
+ "label": {
+ "type": "string",
+ "title": "Label"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "key",
+ "label"
+ ],
+ "title": "Structure"
+ },
+ "TaskSpec": {
+ "properties": {
+ "PluginSpec": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PluginSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Plugin spec for the service. *(Experimental release only.)*\n\n
\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n"
+ },
+ "ContainerSpec": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ContainerSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Container spec for the service.\n\n
\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n"
+ },
+ "NetworkAttachmentSpec": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/NetworkAttachmentSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n
\n\n> **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n> mutually exclusive. PluginSpec is only used when the Runtime field\n> is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n> field is set to `attachment`.\n"
+ },
+ "Resources": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Resources1"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Resource requirements which apply to each individual container created\nas part of the service.\n"
+ },
+ "RestartPolicy": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RestartPolicy1"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Specification for the restart policy which applies to containers\ncreated as part of this service.\n"
+ },
+ "Placement": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Placement"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "ForceUpdate": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Forceupdate",
+ "description": "A counter that triggers an update even if no relevant parameters have\nbeen changed.\n"
+ },
+ "Runtime": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Runtime",
+ "description": "Runtime is the type of runtime specified for the task executor.\n"
+ },
+ "Networks": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/NetworkAttachmentConfig"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Networks",
+ "description": "Specifies which networks the service should attach to."
+ },
+ "LogDriver": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/LogDriver1"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Specifies the log driver to use for tasks created from this spec. If\nnot present, the default one for the swarm will be used, finally\nfalling back to the engine default if not specified.\n"
+ }
+ },
+ "type": "object",
+ "title": "TaskSpec",
+ "description": "User modifiable task configuration."
+ },
+ "TextArea": {
+ "properties": {
+ "minHeight": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Minheight",
+ "description": "minimum Height of the textarea",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "minHeight"
+ ],
+ "title": "TextArea"
+ },
+ "TmpfsOptions": {
+ "properties": {
+ "SizeBytes": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Sizebytes",
+ "description": "The size for the tmpfs mount in bytes."
+ },
+ "Mode": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Mode",
+ "description": "The permission mode for the tmpfs mount in an integer."
+ }
+ },
+ "type": "object",
+ "title": "TmpfsOptions",
+ "description": "Optional configuration for the `tmpfs` type."
+ },
+ "Type": {
+ "type": "string",
+ "enum": [
+ "tcp",
+ "udp",
+ "sctp"
+ ],
+ "title": "Type"
+ },
+ "Type2": {
+ "type": "string",
+ "enum": [
+ "bind",
+ "volume",
+ "tmpfs",
+ "npipe"
+ ],
+ "title": "Type2",
+ "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n- `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container."
+ },
+ "Ulimit": {
+ "properties": {
+ "Name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name",
+ "description": "Name of ulimit"
+ },
+ "Soft": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Soft",
+ "description": "Soft limit"
+ },
+ "Hard": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Hard",
+ "description": "Hard limit"
+ }
+ },
+ "type": "object",
+ "title": "Ulimit"
+ },
+ "UpdateConfig": {
+ "properties": {
+ "Parallelism": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Parallelism",
+ "description": "Maximum number of tasks to be updated in one iteration (0 means\nunlimited parallelism).\n"
+ },
+ "Delay": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Delay",
+ "description": "Amount of time between updates, in nanoseconds."
+ },
+ "FailureAction": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/FailureAction"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Action to take if an updated task fails to run, or stops running\nduring the update.\n"
+ },
+ "Monitor": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Monitor",
+ "description": "Amount of time to monitor each updated task for failures, in\nnanoseconds.\n"
+ },
+ "MaxFailureRatio": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Maxfailureratio",
+ "description": "The fraction of tasks that may fail during an update before the\nfailure action is invoked, specified as a floating point number\nbetween 0 and 1.\n",
+ "default": 0
+ },
+ "Order": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Order"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The order of operations when rolling out an updated task. Either\nthe old task is shut down before the new task is started, or the\nnew task is started before the old task is shut down.\n"
+ }
+ },
+ "type": "object",
+ "title": "UpdateConfig",
+ "description": "Specification for the update strategy of the service."
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Location"
+ },
+ "msg": {
+ "type": "string",
+ "title": "Message"
+ },
+ "type": {
+ "type": "string",
+ "title": "Error Type"
+ }
+ },
+ "type": "object",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "title": "ValidationError"
+ },
+ "VolumeOptions": {
+ "properties": {
+ "NoCopy": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Nocopy",
+ "description": "Populate volume with data from the target.",
+ "default": false
+ },
+ "Labels": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Labels",
+ "description": "User-defined key/value metadata."
+ },
+ "DriverConfig": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/DriverConfig"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Map of driver specific options"
+ }
+ },
+ "type": "object",
+ "title": "VolumeOptions",
+ "description": "Optional configuration for the `volume` type."
+ },
+ "Widget": {
+ "properties": {
+ "type": {
+ "$ref": "#/components/schemas/WidgetType",
+ "description": "type of the property"
+ },
+ "details": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/TextArea"
+ },
+ {
+ "$ref": "#/components/schemas/SelectBox"
+ }
+ ],
+ "title": "Details"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "type",
+ "details"
+ ],
+ "title": "Widget"
+ },
+ "WidgetType": {
+ "type": "string",
+ "enum": [
+ "TextArea",
+ "SelectBox"
+ ],
+ "title": "WidgetType"
+ }
+ }
+ }
+}
diff --git a/services/director-v2/openapi.json b/services/director-v2/openapi.json
new file mode 100644
index 00000000000..a4183f53d9f
--- /dev/null
+++ b/services/director-v2/openapi.json
@@ -0,0 +1,4548 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "simcore-service-director-v2",
+ "description": "Orchestrates the pipeline of services defined by the user",
+ "version": "2.3.0"
+ },
+ "servers": [
+ {
+ "url": "/",
+ "description": "Default server: requests directed to serving url"
+ },
+ {
+ "url": "http://{host}:{port}",
+ "description": "Development server: can configure any base url",
+ "variables": {
+ "host": {
+ "default": "127.0.0.1"
+ },
+ "port": {
+ "default": "8000"
+ }
+ }
+ }
+ ],
+ "paths": {
+ "/": {
+ "get": {
+ "summary": "Check Service Health",
+ "operationId": "check_service_health__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HealthCheckGet"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/meta": {
+ "get": {
+ "summary": "Get Service Metadata",
+ "operationId": "get_service_metadata_meta_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BaseMeta"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/computations": {
+ "post": {
+ "tags": [
+ "computations"
+ ],
+ "summary": "Create and optionally start a new computation",
+ "operationId": "create_computation_v2_computations_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ComputationCreate"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ComputationGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Project or pricing details not found"
+ },
+ "406": {
+ "description": "Cluster not found"
+ },
+ "503": {
+ "description": "Service not available"
+ },
+ "422": {
+ "description": "Configuration error"
+ },
+ "402": {
+ "description": "Payment required"
+ },
+ "409": {
+ "description": "Project already started"
+ }
+ }
+ }
+ },
+ "/v2/computations/{project_id}": {
+ "get": {
+ "tags": [
+ "computations"
+ ],
+ "summary": "Returns a computation pipeline state",
+ "operationId": "get_computation_v2_computations__project_id__get",
+ "parameters": [
+ {
+ "name": "project_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ComputationGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "computations"
+ ],
+ "summary": "Deletes a computation pipeline",
+ "operationId": "delete_computation_v2_computations__project_id__delete",
+ "parameters": [
+ {
+ "name": "project_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ComputationDelete"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/computations/{project_id}:stop": {
+ "post": {
+ "tags": [
+ "computations"
+ ],
+ "summary": "Stops a computation pipeline",
+ "operationId": "stop_computation_v2_computations__project_id__stop_post",
+ "parameters": [
+ {
+ "name": "project_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ComputationStop"
+ }
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ComputationGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/computations/{project_id}/tasks/-/logfile": {
+ "get": {
+ "tags": [
+ "computations"
+ ],
+ "summary": "Gets computation task logs file after is done",
+ "description": "Returns download links to log-files of each task in a computation.\nEach log is only available when the corresponding task is done",
+ "operationId": "get_all_tasks_log_files_v2_computations__project_id__tasks___logfile_get",
+ "parameters": [
+ {
+ "name": "project_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/TaskLogFileGet"
+ },
+ "title": "Response Get All Tasks Log Files V2 Computations Project Id Tasks Logfile Get"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/computations/{project_id}/tasks/{node_uuid}/logfile": {
+ "get": {
+ "tags": [
+ "computations"
+ ],
+ "summary": "Gets computation task logs file after is done",
+ "description": "Returns a link to download logs file of a give task.\nThe log is only available when the task is done",
+ "operationId": "get_task_log_file_v2_computations__project_id__tasks__node_uuid__logfile_get",
+ "parameters": [
+ {
+ "name": "project_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ }
+ },
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TaskLogFileGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/computations/{project_id}/tasks/-/outputs:batchGet": {
+ "post": {
+ "tags": [
+ "computations"
+ ],
+ "summary": "Gets all outputs for selected tasks",
+ "operationId": "get_batch_tasks_outputs_v2_computations__project_id__tasks___outputs_batchGet_post",
+ "parameters": [
+ {
+ "name": "project_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TasksSelection"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TasksOutputs"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Cannot find computation or the tasks in it"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_services": {
+ "get": {
+ "tags": [
+ "dynamic services"
+ ],
+ "summary": "returns a list of running interactive services filtered by user_id and/or project_idboth legacy (director-v0) and modern (director-v2)",
+ "operationId": "list_tracked_dynamic_services_v2_dynamic_services_get",
+ "parameters": [
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Id"
+ }
+ },
+ {
+ "name": "project_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "uuid"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Project Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/RunningDynamicServiceDetails"
+ },
+ "title": "Response List Tracked Dynamic Services V2 Dynamic Services Get"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "dynamic services"
+ ],
+ "summary": "creates & starts the dynamic service",
+ "operationId": "create_dynamic_service_v2_dynamic_services_post",
+ "parameters": [
+ {
+ "name": "x-dynamic-sidecar-request-dns",
+ "in": "header",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "X-Dynamic-Sidecar-Request-Dns"
+ }
+ },
+ {
+ "name": "x-dynamic-sidecar-request-scheme",
+ "in": "header",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "X-Dynamic-Sidecar-Request-Scheme"
+ }
+ },
+ {
+ "name": "x-simcore-user-agent",
+ "in": "header",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "X-Simcore-User-Agent"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DynamicServiceCreate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RunningDynamicServiceDetails"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_services/{node_uuid}": {
+ "get": {
+ "tags": [
+ "dynamic services"
+ ],
+ "summary": "assembles the status for the dynamic-sidecar",
+ "operationId": "get_dynamic_sidecar_status_v2_dynamic_services__node_uuid__get",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RunningDynamicServiceDetails"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "dynamic services"
+ ],
+ "summary": "stops previously spawned dynamic-sidecar",
+ "operationId": "stop_dynamic_service_v2_dynamic_services__node_uuid__delete",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ },
+ {
+ "name": "can_save",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": true,
+ "title": "Can Save"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_services/{node_uuid}:retrieve": {
+ "post": {
+ "tags": [
+ "dynamic services"
+ ],
+ "summary": "Calls the dynamic service's retrieve endpoint with optional port_keys",
+ "operationId": "service_retrieve_data_on_ports_v2_dynamic_services__node_uuid__retrieve_post",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RetrieveDataIn"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RetrieveDataOutEnveloped"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_services/{node_uuid}:restart": {
+ "post": {
+ "tags": [
+ "dynamic services"
+ ],
+ "summary": "Calls the dynamic service's restart containers endpoint",
+ "operationId": "service_restart_containers_v2_dynamic_services__node_uuid__restart_post",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_services/projects/{project_id}/-/networks": {
+ "patch": {
+ "tags": [
+ "dynamic services"
+ ],
+ "summary": "Updates the project networks according to the current project's workbench",
+ "operationId": "update_projects_networks_v2_dynamic_services_projects__project_id____networks_patch",
+ "parameters": [
+ {
+ "name": "project_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_services/projects/{project_id}/inactivity": {
+ "get": {
+ "tags": [
+ "dynamic services"
+ ],
+ "summary": "returns if the project is inactive",
+ "operationId": "get_project_inactivity_v2_dynamic_services_projects__project_id__inactivity_get",
+ "parameters": [
+ {
+ "name": "project_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ }
+ },
+ {
+ "name": "max_inactivity_seconds",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "number",
+ "minimum": 0.0,
+ "title": "Max Inactivity Seconds"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GetProjectInactivityResponse"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/clusters": {
+ "post": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Create a new cluster for a user",
+ "operationId": "create_cluster_v2_clusters_post",
+ "parameters": [
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterCreate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "get": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Lists clusters for user",
+ "operationId": "list_clusters_v2_clusters_get",
+ "parameters": [
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ClusterGet"
+ },
+ "title": "Response List Clusters V2 Clusters Get"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/clusters/default": {
+ "get": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Returns the default cluster",
+ "operationId": "get_default_cluster_v2_clusters_default_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterGet"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/clusters/{cluster_id}": {
+ "get": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Get one cluster for user",
+ "operationId": "get_cluster_v2_clusters__cluster_id__get",
+ "parameters": [
+ {
+ "name": "cluster_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Cluster Id"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "patch": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Modify a cluster for user",
+ "operationId": "update_cluster_v2_clusters__cluster_id__patch",
+ "parameters": [
+ {
+ "name": "cluster_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Cluster Id"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterPatch"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Remove a cluster for user",
+ "operationId": "delete_cluster_v2_clusters__cluster_id__delete",
+ "parameters": [
+ {
+ "name": "cluster_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Cluster Id"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/clusters/default/details": {
+ "get": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Returns the cluster details",
+ "operationId": "get_default_cluster_details_v2_clusters_default_details_get",
+ "parameters": [
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterDetailsGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/clusters/{cluster_id}/details": {
+ "get": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Returns the cluster details",
+ "operationId": "get_cluster_details_v2_clusters__cluster_id__details_get",
+ "parameters": [
+ {
+ "name": "cluster_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Cluster Id"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterDetailsGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/clusters:ping": {
+ "post": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Test cluster connection",
+ "operationId": "test_cluster_connection_v2_clusters_ping_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ClusterPing"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/clusters/default:ping": {
+ "post": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Test cluster connection",
+ "operationId": "test_default_cluster_connection_v2_clusters_default_ping_post",
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ }
+ }
+ }
+ },
+ "/v2/clusters/{cluster_id}:ping": {
+ "post": {
+ "tags": [
+ "clusters"
+ ],
+ "summary": "Test cluster connection",
+ "operationId": "test_specific_cluster_connection_v2_clusters__cluster_id__ping_post",
+ "parameters": [
+ {
+ "name": "cluster_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Cluster Id"
+ }
+ },
+ {
+ "name": "user_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_scheduler/services/{node_uuid}/observation": {
+ "patch": {
+ "tags": [
+ "dynamic scheduler"
+ ],
+ "summary": "Enable/disable observation of the service",
+ "operationId": "update_service_observation_v2_dynamic_scheduler_services__node_uuid__observation_patch",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ObservationItem"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_scheduler/services/{node_uuid}/containers": {
+ "delete": {
+ "tags": [
+ "dynamic scheduler"
+ ],
+ "summary": "Removes the service's user services",
+ "operationId": "delete_service_containers_v2_dynamic_scheduler_services__node_uuid__containers_delete",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Delete Service Containers V2 Dynamic Scheduler Services Node Uuid Containers Delete"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "Task already running, cannot start a new one"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_scheduler/services/{node_uuid}/state": {
+ "get": {
+ "tags": [
+ "dynamic scheduler"
+ ],
+ "summary": "Returns the internals of the scheduler for the given service",
+ "operationId": "get_service_state_v2_dynamic_scheduler_services__node_uuid__state_get",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SchedulerData"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_scheduler/services/{node_uuid}/state:save": {
+ "post": {
+ "tags": [
+ "dynamic scheduler"
+ ],
+ "summary": "Starts the saving of the state for the service",
+ "operationId": "save_service_state_v2_dynamic_scheduler_services__node_uuid__state_save_post",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Save Service State V2 Dynamic Scheduler Services Node Uuid State Save Post"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "Task already running, cannot start a new one"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_scheduler/services/{node_uuid}/outputs:push": {
+ "post": {
+ "tags": [
+ "dynamic scheduler"
+ ],
+ "summary": "Starts the pushing of the outputs for the service",
+ "operationId": "push_service_outputs_v2_dynamic_scheduler_services__node_uuid__outputs_push_post",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Push Service Outputs V2 Dynamic Scheduler Services Node Uuid Outputs Push Post"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "Task already running, cannot start a new one"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_scheduler/services/{node_uuid}/docker-resources": {
+ "delete": {
+ "tags": [
+ "dynamic scheduler"
+ ],
+ "summary": "Removes the service's sidecar, proxy and docker networks & volumes",
+ "operationId": "delete_service_docker_resources_v2_dynamic_scheduler_services__node_uuid__docker_resources_delete",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Delete Service Docker Resources V2 Dynamic Scheduler Services Node Uuid Docker Resources Delete"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "Task already running, cannot start a new one"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v2/dynamic_scheduler/services/{node_uuid}/disk/reserved:free": {
+ "post": {
+ "tags": [
+ "dynamic scheduler"
+ ],
+ "summary": "Free up reserved disk space",
+ "operationId": "free_reserved_disk_space_v2_dynamic_scheduler_services__node_uuid__disk_reserved_free_post",
+ "parameters": [
+ {
+ "name": "node_uuid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Node Uuid"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "BaseMeta": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ },
+ "released": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Released",
+ "description": "Maps every route's path tag with a released version"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "version"
+ ],
+ "title": "BaseMeta",
+ "example": {
+ "name": "simcore_service_foo",
+ "released": {
+ "v1": "1.3.4",
+ "v2": "2.4.45"
+ },
+ "version": "2.4.45"
+ }
+ },
+ "BootMode": {
+ "type": "string",
+ "enum": [
+ "CPU",
+ "GPU",
+ "MPI"
+ ],
+ "title": "BootMode"
+ },
+ "CallbacksMapping": {
+ "properties": {
+ "metrics": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/UserServiceCommand"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "command to recover prometheus metrics from a specific user service"
+ },
+ "before_shutdown": {
+ "items": {
+ "$ref": "#/components/schemas/UserServiceCommand"
+ },
+ "type": "array",
+ "title": "Before Shutdown",
+ "description": "commands to run before shutting down the user servicescommands get executed first to last, multiple commands for the sameuser services are allowed"
+ },
+ "inactivity": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/UserServiceCommand"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "command used to figure out for how much time the user service(s) were inactive for"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "CallbacksMapping"
+ },
+ "ClusterAccessRights": {
+ "properties": {
+ "read": {
+ "type": "boolean",
+ "title": "Read",
+ "description": "allows to run pipelines on that cluster"
+ },
+ "write": {
+ "type": "boolean",
+ "title": "Write",
+ "description": "allows to modify the cluster"
+ },
+ "delete": {
+ "type": "boolean",
+ "title": "Delete",
+ "description": "allows to delete a cluster"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "read",
+ "write",
+ "delete"
+ ],
+ "title": "ClusterAccessRights"
+ },
+ "ClusterCreate": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "The human readable name of the cluster"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ClusterTypeInModel"
+ },
+ "owner": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Owner"
+ },
+ "thumbnail": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Thumbnail",
+ "description": "url to the image describing this cluster"
+ },
+ "endpoint": {
+ "type": "string",
+ "minLength": 1,
+ "format": "uri",
+ "title": "Endpoint"
+ },
+ "authentication": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/SimpleAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/KerberosAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/JupyterHubTokenAuthentication"
+ }
+ ],
+ "title": "Authentication",
+ "discriminator": {
+ "propertyName": "type",
+ "mapping": {
+ "jupyterhub": "#/components/schemas/JupyterHubTokenAuthentication",
+ "kerberos": "#/components/schemas/KerberosAuthentication",
+ "simple": "#/components/schemas/SimpleAuthentication"
+ }
+ }
+ },
+ "accessRights": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ClusterAccessRights"
+ },
+ "type": "object",
+ "title": "Accessrights"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name",
+ "type",
+ "endpoint",
+ "authentication"
+ ],
+ "title": "ClusterCreate"
+ },
+ "ClusterDetailsGet": {
+ "properties": {
+ "scheduler": {
+ "$ref": "#/components/schemas/Scheduler",
+ "description": "This contains dask scheduler information given by the underlying dask library"
+ },
+ "dashboard_link": {
+ "type": "string",
+ "minLength": 1,
+ "format": "uri",
+ "title": "Dashboard Link",
+ "description": "Link to this scheduler's dashboard"
+ }
+ },
+ "type": "object",
+ "required": [
+ "scheduler",
+ "dashboard_link"
+ ],
+ "title": "ClusterDetailsGet"
+ },
+ "ClusterGet": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "The human readable name of the cluster"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "type": {
+ "$ref": "#/components/schemas/ClusterTypeInModel"
+ },
+ "owner": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Owner",
+ "minimum": 0
+ },
+ "thumbnail": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Thumbnail",
+ "description": "url to the image describing this cluster"
+ },
+ "endpoint": {
+ "type": "string",
+ "minLength": 1,
+ "format": "uri",
+ "title": "Endpoint"
+ },
+ "authentication": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/SimpleAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/KerberosAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/JupyterHubTokenAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/NoAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/TLSAuthentication"
+ }
+ ],
+ "title": "Authentication",
+ "description": "Dask gateway authentication",
+ "discriminator": {
+ "propertyName": "type",
+ "mapping": {
+ "jupyterhub": "#/components/schemas/JupyterHubTokenAuthentication",
+ "kerberos": "#/components/schemas/KerberosAuthentication",
+ "none": "#/components/schemas/NoAuthentication",
+ "simple": "#/components/schemas/SimpleAuthentication",
+ "tls": "#/components/schemas/TLSAuthentication"
+ }
+ }
+ },
+ "accessRights": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ClusterAccessRights"
+ },
+ "type": "object",
+ "title": "Accessrights",
+ "default": {}
+ },
+ "id": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Id",
+ "description": "The cluster ID"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "name",
+ "type",
+ "owner",
+ "endpoint",
+ "authentication",
+ "id"
+ ],
+ "title": "ClusterGet"
+ },
+ "ClusterPatch": {
+ "properties": {
+ "name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "type": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ClusterTypeInModel"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "owner": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Owner"
+ },
+ "thumbnail": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Thumbnail"
+ },
+ "endpoint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Endpoint"
+ },
+ "authentication": {
+ "anyOf": [
+ {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/SimpleAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/KerberosAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/JupyterHubTokenAuthentication"
+ }
+ ],
+ "discriminator": {
+ "propertyName": "type",
+ "mapping": {
+ "jupyterhub": "#/components/schemas/JupyterHubTokenAuthentication",
+ "kerberos": "#/components/schemas/KerberosAuthentication",
+ "simple": "#/components/schemas/SimpleAuthentication"
+ }
+ }
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Authentication"
+ },
+ "accessRights": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ClusterAccessRights"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Accessrights"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "ClusterPatch"
+ },
+ "ClusterPing": {
+ "properties": {
+ "endpoint": {
+ "type": "string",
+ "minLength": 1,
+ "format": "uri",
+ "title": "Endpoint"
+ },
+ "authentication": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/SimpleAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/KerberosAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/JupyterHubTokenAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/NoAuthentication"
+ },
+ {
+ "$ref": "#/components/schemas/TLSAuthentication"
+ }
+ ],
+ "title": "Authentication",
+ "description": "Dask gateway authentication",
+ "discriminator": {
+ "propertyName": "type",
+ "mapping": {
+ "jupyterhub": "#/components/schemas/JupyterHubTokenAuthentication",
+ "kerberos": "#/components/schemas/KerberosAuthentication",
+ "none": "#/components/schemas/NoAuthentication",
+ "simple": "#/components/schemas/SimpleAuthentication",
+ "tls": "#/components/schemas/TLSAuthentication"
+ }
+ }
+ }
+ },
+ "type": "object",
+ "required": [
+ "endpoint",
+ "authentication"
+ ],
+ "title": "ClusterPing"
+ },
+ "ClusterTypeInModel": {
+ "type": "string",
+ "enum": [
+ "AWS",
+ "ON_PREMISE",
+ "ON_DEMAND"
+ ],
+ "title": "ClusterTypeInModel"
+ },
+ "ComputationCreate": {
+ "properties": {
+ "user_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ },
+ "project_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ },
+ "start_pipeline": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Start Pipeline",
+ "description": "if True the computation pipeline will start right away",
+ "default": false
+ },
+ "product_name": {
+ "type": "string",
+ "title": "Product Name"
+ },
+ "subgraph": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Subgraph",
+ "description": "An optional set of nodes that must be executed, if empty the whole pipeline is executed"
+ },
+ "force_restart": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Force Restart",
+ "description": "if True will force re-running all dependent nodes",
+ "default": false
+ },
+ "cluster_id": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Cluster Id",
+ "description": "the computation shall use the cluster described by its id, 0 is the default cluster"
+ },
+ "simcore_user_agent": {
+ "type": "string",
+ "title": "Simcore User Agent",
+ "default": ""
+ },
+ "use_on_demand_clusters": {
+ "type": "boolean",
+ "title": "Use On Demand Clusters",
+ "description": "if True, a cluster will be created as necessary (wallet_id cannot be None, and cluster_id must be None)",
+ "default": false
+ },
+ "wallet_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/WalletInfo-Input"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "contains information about the wallet used to bill the running service"
+ }
+ },
+ "type": "object",
+ "required": [
+ "user_id",
+ "project_id",
+ "product_name"
+ ],
+ "title": "ComputationCreate"
+ },
+ "ComputationDelete": {
+ "properties": {
+ "user_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ },
+ "force": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Force",
+ "description": "if True then the pipeline will be removed even if it is running",
+ "default": false
+ }
+ },
+ "type": "object",
+ "required": [
+ "user_id"
+ ],
+ "title": "ComputationDelete"
+ },
+ "ComputationGet": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Id",
+ "description": "the id of the computation task"
+ },
+ "state": {
+ "$ref": "#/components/schemas/RunningState",
+ "description": "the state of the computational task"
+ },
+ "result": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Result",
+ "description": "the result of the computational task"
+ },
+ "pipeline_details": {
+ "$ref": "#/components/schemas/PipelineDetails",
+ "description": "the details of the generated pipeline"
+ },
+ "iteration": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Iteration",
+ "description": "the iteration id of the computation task (none if no task ran yet)"
+ },
+ "cluster_id": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Cluster Id",
+ "description": "the cluster on which the computaional task runs/ran (none if no task ran yet)"
+ },
+ "started": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Started",
+ "description": "the timestamp when the computation was started or None if not started yet"
+ },
+ "stopped": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Stopped",
+ "description": "the timestamp when the computation was stopped or None if not started nor stopped yet"
+ },
+ "submitted": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Submitted",
+ "description": "task last modification timestamp or None if the there is no task"
+ },
+ "url": {
+ "type": "string",
+ "minLength": 1,
+ "format": "uri",
+ "title": "Url",
+ "description": "the link where to get the status of the task"
+ },
+ "stop_url": {
+ "anyOf": [
+ {
+ "type": "string",
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Stop Url",
+ "description": "the link where to stop the task"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "state",
+ "pipeline_details",
+ "iteration",
+ "cluster_id",
+ "started",
+ "stopped",
+ "submitted",
+ "url"
+ ],
+ "title": "ComputationGet"
+ },
+ "ComputationStop": {
+ "properties": {
+ "user_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ }
+ },
+ "type": "object",
+ "required": [
+ "user_id"
+ ],
+ "title": "ComputationStop"
+ },
+ "ContainerState": {
+ "properties": {
+ "Status": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Status2"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n"
+ },
+ "Running": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Running",
+ "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the freezer cgroup is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n"
+ },
+ "Paused": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Paused",
+ "description": "Whether this container is paused."
+ },
+ "Restarting": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Restarting",
+ "description": "Whether this container is restarting."
+ },
+ "OOMKilled": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Oomkilled",
+ "description": "Whether this container has been killed because it ran out of memory.\n"
+ },
+ "Dead": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Dead"
+ },
+ "Pid": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pid",
+ "description": "The process ID of this container"
+ },
+ "ExitCode": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Exitcode",
+ "description": "The last exit code of this container"
+ },
+ "Error": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Error"
+ },
+ "StartedAt": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Startedat",
+ "description": "The time when this container was last started."
+ },
+ "FinishedAt": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Finishedat",
+ "description": "The time when this container last exited."
+ },
+ "Health": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Health"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "title": "ContainerState",
+ "description": "ContainerState stores container's running state. It's part of ContainerJSONBase\nand will be returned by the \"inspect\" command."
+ },
+ "DNSResolver": {
+ "properties": {
+ "address": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^\\${1,2}(?:\\{)?OSPARC_VARIABLE_[A-Za-z0-9_]+(?:\\})?(:-.+)?$"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Address",
+ "description": "this is not an url address is derived from IP address"
+ },
+ "port": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "maximum": 65535,
+ "minimum": 0
+ },
+ {
+ "type": "string",
+ "pattern": "^\\${1,2}(?:\\{)?OSPARC_VARIABLE_[A-Za-z0-9_]+(?:\\})?(:-.+)?$"
+ }
+ ],
+ "title": "Port"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "address",
+ "port"
+ ],
+ "title": "DNSResolver"
+ },
+ "DelayedExceptionHandler": {
+ "properties": {
+ "delay_for": {
+ "type": "number",
+ "minimum": 0.0,
+ "title": "Delay For",
+ "description": "interval of time during which exceptions are ignored"
+ }
+ },
+ "type": "object",
+ "required": [
+ "delay_for"
+ ],
+ "title": "DelayedExceptionHandler",
+ "description": "Allows to ignore an exception for an established\nperiod of time after which it is raised.\n\nThis use case most commonly occurs when dealing with\nexternal systems.\nFor example, due to poor network performance or\nnetwork congestion, an external system which is healthy,\ncurrently is not reachable any longer.\nA possible solution:\n- ignore exceptions for an interval in which the\n system usually is reachable again by not\n raising the error\n- if the error persist give up and raise it\n\nExample code usage:\n\n delayed_handler_external_service = DelayedExceptionHandler(\n delay_for=60\n )\n try:\n function_called_periodically_accessing_external_service()\n except TargetException as e:\n delayed_handler_external_service.try_to_raise(e)\n else:\n delayed_handler_external_service.else_reset()"
+ },
+ "DictModel_str_Annotated_float__Gt__": {
+ "additionalProperties": {
+ "type": "number",
+ "exclusiveMinimum": true,
+ "minimum": 0.0
+ },
+ "type": "object",
+ "title": "DictModel[str, Annotated[float, Gt]]"
+ },
+ "DockerContainerInspect": {
+ "properties": {
+ "container_state": {
+ "$ref": "#/components/schemas/ContainerState",
+ "description": "current state of container"
+ },
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "docker name of the container"
+ },
+ "id": {
+ "type": "string",
+ "title": "Id",
+ "description": "docker id of the container"
+ }
+ },
+ "type": "object",
+ "required": [
+ "container_state",
+ "name",
+ "id"
+ ],
+ "title": "DockerContainerInspect"
+ },
+ "DynamicServiceCreate": {
+ "properties": {
+ "service_key": {
+ "type": "string",
+ "pattern": "^simcore/services/dynamic/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key",
+ "description": "distinctive name for the node based on the docker registry path"
+ },
+ "service_version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version",
+ "description": "semantic version number of the node"
+ },
+ "user_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ },
+ "project_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ },
+ "service_uuid": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Service Uuid"
+ },
+ "service_basepath": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "path"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Service Basepath",
+ "description": "predefined path where the dynamic service should be served. If empty, the service shall use the root endpoint."
+ },
+ "service_resources": {
+ "type": "object",
+ "title": "Service Resources"
+ },
+ "product_name": {
+ "type": "string",
+ "title": "Product Name",
+ "description": "Current product name"
+ },
+ "can_save": {
+ "type": "boolean",
+ "title": "Can Save",
+ "description": "the service data must be saved when closing"
+ },
+ "wallet_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/WalletInfo-Input"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "contains information about the wallet used to bill the running service"
+ },
+ "pricing_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PricingInfo"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "contains pricing information (ex. pricing plan and unit ids)"
+ },
+ "hardware_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/HardwareInfo"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "contains harware information (ex. aws_ec2_instances)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "service_key",
+ "service_version",
+ "user_id",
+ "project_id",
+ "service_uuid",
+ "service_resources",
+ "product_name",
+ "can_save"
+ ],
+ "title": "DynamicServiceCreate",
+ "example": {
+ "basepath": "/x/75c7f3f4-18f9-4678-8610-54a2ade78eaa",
+ "can_save": true,
+ "hardware_info": {
+ "aws_ec2_instances": [
+ "c6a.4xlarge"
+ ]
+ },
+ "key": "simcore/services/dynamic/3dviewer",
+ "node_uuid": "75c7f3f4-18f9-4678-8610-54a2ade78eaa",
+ "pricing_info": {
+ "pricing_plan_id": 1,
+ "pricing_unit_cost_id": 1,
+ "pricing_unit_id": 1
+ },
+ "product_name": "osparc",
+ "project_id": "dd1d04d9-d704-4f7e-8f0f-1ca60cc771fe",
+ "service_resources": {
+ "container": {
+ "boot_modes": [
+ "CPU"
+ ],
+ "image": "simcore/services/dynamic/jupyter-math:2.0.5",
+ "resources": {
+ "CPU": {
+ "limit": 0.1,
+ "reservation": 0.1
+ },
+ "RAM": {
+ "limit": 2147483648,
+ "reservation": 2147483648
+ }
+ }
+ }
+ },
+ "user_id": 234,
+ "version": "2.4.5",
+ "wallet_info": {
+ "wallet_credit_amount": "10",
+ "wallet_id": 1,
+ "wallet_name": "My Wallet"
+ }
+ }
+ },
+ "DynamicSidecar": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/simcore_service_director_v2__models__dynamic_services_scheduler__Status",
+ "description": "status of the service sidecar also with additional information",
+ "default": {
+ "current": "ok",
+ "info": ""
+ }
+ },
+ "is_ready": {
+ "type": "boolean",
+ "title": "Is Ready",
+ "description": "is True while the health check on the dynamic-sidecar is responding. Meaning that the dynamic-sidecar is reachable and can accept requests",
+ "default": false
+ },
+ "was_compose_spec_submitted": {
+ "type": "boolean",
+ "title": "Was Compose Spec Submitted",
+ "description": "if the docker-compose spec was already submitted this fields is True",
+ "default": false
+ },
+ "containers_inspect": {
+ "items": {
+ "$ref": "#/components/schemas/DockerContainerInspect"
+ },
+ "type": "array",
+ "title": "Containers Inspect",
+ "description": "docker inspect results from all the container ran at regular intervals",
+ "default": []
+ },
+ "was_dynamic_sidecar_started": {
+ "type": "boolean",
+ "title": "Was Dynamic Sidecar Started",
+ "default": false
+ },
+ "is_healthy": {
+ "type": "boolean",
+ "title": "Is Healthy",
+ "default": false
+ },
+ "were_containers_created": {
+ "type": "boolean",
+ "title": "Were Containers Created",
+ "description": "when True no longer will the Docker api be used to check if the services were started",
+ "default": false
+ },
+ "is_project_network_attached": {
+ "type": "boolean",
+ "title": "Is Project Network Attached",
+ "description": "When True, all containers were in running state and project networks were attached. Waiting for the container sto be in running state guarantees all containers have been created",
+ "default": false
+ },
+ "is_service_environment_ready": {
+ "type": "boolean",
+ "title": "Is Service Environment Ready",
+ "description": "True when the environment setup required by the dynamic-sidecars created services was completed.Example: nodeports data downloaded, globally shared service data fetched, etc..",
+ "default": false
+ },
+ "service_removal_state": {
+ "$ref": "#/components/schemas/ServiceRemovalState",
+ "description": "stores information used during service removal from the dynamic-sidecar scheduler"
+ },
+ "wait_for_manual_intervention_after_error": {
+ "type": "boolean",
+ "title": "Wait For Manual Intervention After Error",
+ "description": "Marks the sidecar as untouchable since there was an error and important data might be lost. awaits for manual intervention.",
+ "default": false
+ },
+ "wait_for_manual_intervention_logged": {
+ "type": "boolean",
+ "title": "Wait For Manual Intervention Logged",
+ "description": "True if a relative message was logged",
+ "default": false
+ },
+ "were_state_and_outputs_saved": {
+ "type": "boolean",
+ "title": "Were State And Outputs Saved",
+ "description": "set True if the dy-sidecar saves the state and uploads the outputs",
+ "default": false
+ },
+ "instrumentation": {
+ "$ref": "#/components/schemas/ServicesInstrumentation",
+ "description": "keeps track times for various operations"
+ },
+ "dynamic_sidecar_id": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 25,
+ "pattern": "[A-Za-z0-9]{25}"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Dynamic Sidecar Id",
+ "description": "returned by the docker engine; used for starting the proxy"
+ },
+ "dynamic_sidecar_network_id": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 25,
+ "pattern": "[A-Za-z0-9]{25}"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Dynamic Sidecar Network Id",
+ "description": "returned by the docker engine; used for starting the proxy"
+ },
+ "swarm_network_id": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 25,
+ "pattern": "[A-Za-z0-9]{25}"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Swarm Network Id",
+ "description": "returned by the docker engine; used for starting the proxy"
+ },
+ "swarm_network_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Swarm Network Name",
+ "description": "used for starting the proxy"
+ },
+ "docker_node_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Docker Node Id",
+ "description": "contains node id of the docker node where all services and created containers are started"
+ },
+ "inspect_error_handler": {
+ "$ref": "#/components/schemas/DelayedExceptionHandler",
+ "description": "Set when the dy-sidecar can no longer be reached by the director-v2. If it will be possible to reach the dy-sidecar again, this value will be set to None.",
+ "default": {
+ "delay_for": 0.0
+ }
+ }
+ },
+ "type": "object",
+ "title": "DynamicSidecar"
+ },
+ "DynamicSidecarStatus": {
+ "type": "string",
+ "enum": [
+ "ok",
+ "failing"
+ ],
+ "title": "DynamicSidecarStatus"
+ },
+ "GetProjectInactivityResponse": {
+ "properties": {
+ "is_inactive": {
+ "type": "boolean",
+ "title": "Is Inactive"
+ }
+ },
+ "type": "object",
+ "required": [
+ "is_inactive"
+ ],
+ "title": "GetProjectInactivityResponse"
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "errors": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Validation errors"
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError"
+ },
+ "HardwareInfo": {
+ "properties": {
+ "aws_ec2_instances": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Aws Ec2 Instances"
+ }
+ },
+ "type": "object",
+ "required": [
+ "aws_ec2_instances"
+ ],
+ "title": "HardwareInfo"
+ },
+ "Health": {
+ "properties": {
+ "Status": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/models_library__generated_models__docker_rest_api__Status"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem\n"
+ },
+ "FailingStreak": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Failingstreak",
+ "description": "FailingStreak is the number of consecutive failures"
+ },
+ "Log": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/HealthcheckResult"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Log",
+ "description": "Log contains the last few results (oldest first)\n"
+ }
+ },
+ "type": "object",
+ "title": "Health",
+ "description": "Health stores information about the container's healthcheck results."
+ },
+ "HealthCheckGet": {
+ "properties": {
+ "timestamp": {
+ "type": "string",
+ "title": "Timestamp"
+ }
+ },
+ "type": "object",
+ "required": [
+ "timestamp"
+ ],
+ "title": "HealthCheckGet",
+ "example": {
+ "timestamp": "simcore_service_directorv2.api.routes.health@2023-07-03T12:59:12.024551+00:00"
+ }
+ },
+ "HealthcheckResult": {
+ "properties": {
+ "Start": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Start",
+ "description": "Date and time at which this check started in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n"
+ },
+ "End": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "End",
+ "description": "Date and time at which this check ended in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n"
+ },
+ "ExitCode": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Exitcode",
+ "description": "ExitCode meanings:\n\n- `0` healthy\n- `1` unhealthy\n- `2` reserved (considered unhealthy)\n- other values: error running probe\n"
+ },
+ "Output": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Output",
+ "description": "Output from last check"
+ }
+ },
+ "type": "object",
+ "title": "HealthcheckResult",
+ "description": "HealthcheckResult stores information about a single run of a healthcheck probe"
+ },
+ "ImageResources": {
+ "properties": {
+ "image": {
+ "type": "string",
+ "pattern": "^(?:([a-z0-9-]+(?:\\.[a-z0-9-]+)+(?::\\d+)?|[a-z0-9-]+:\\d+)/)?((?:[a-z0-9][a-z0-9_.-]*/)*[a-z0-9-_]+[a-z0-9])(?::([\\w][\\w.-]{0,127}))?(\\@sha256:[a-fA-F0-9]{32,64})?$",
+ "title": "Image",
+ "description": "Used by the frontend to provide a context for the users.Services with a docker-compose spec will have multiple entries.Using the `image:version` instead of the docker-compose spec is more helpful for the end user."
+ },
+ "resources": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ResourceValue"
+ },
+ "type": "object",
+ "title": "Resources"
+ },
+ "boot_modes": {
+ "items": {
+ "$ref": "#/components/schemas/BootMode"
+ },
+ "type": "array",
+ "title": "Boot Modes",
+ "description": "describe how a service shall be booted, using CPU, MPI, openMP or GPU",
+ "default": [
+ "CPU"
+ ]
+ }
+ },
+ "type": "object",
+ "required": [
+ "image",
+ "resources"
+ ],
+ "title": "ImageResources",
+ "example": {
+ "image": "simcore/service/dynamic/pretty-intense:1.0.0",
+ "resources": {
+ "AIRAM": {
+ "limit": 1,
+ "reservation": 1
+ },
+ "ANY_resource": {
+ "limit": "some_value",
+ "reservation": "some_value"
+ },
+ "CPU": {
+ "limit": 4,
+ "reservation": 0.1
+ },
+ "RAM": {
+ "limit": 103079215104,
+ "reservation": 536870912
+ },
+ "VRAM": {
+ "limit": 1,
+ "reservation": 1
+ }
+ }
+ }
+ },
+ "JupyterHubTokenAuthentication": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "jupyterhub"
+ ],
+ "const": "jupyterhub",
+ "title": "Type",
+ "default": "jupyterhub"
+ },
+ "api_token": {
+ "type": "string",
+ "title": "Api Token"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "api_token"
+ ],
+ "title": "JupyterHubTokenAuthentication"
+ },
+ "KerberosAuthentication": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "kerberos"
+ ],
+ "const": "kerberos",
+ "title": "Type",
+ "default": "kerberos"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "KerberosAuthentication"
+ },
+ "NATRule": {
+ "properties": {
+ "hostname": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^\\${1,2}(?:\\{)?OSPARC_VARIABLE_[A-Za-z0-9_]+(?:\\})?(:-.+)?$"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Hostname"
+ },
+ "tcp_ports": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "maximum": 65535,
+ "minimum": 0
+ },
+ {
+ "type": "string",
+ "pattern": "^\\${1,2}(?:\\{)?OSPARC_VARIABLE_[A-Za-z0-9_]+(?:\\})?(:-.+)?$"
+ },
+ {
+ "$ref": "#/components/schemas/_PortRange"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Tcp Ports"
+ },
+ "dns_resolver": {
+ "$ref": "#/components/schemas/DNSResolver",
+ "description": "specify a DNS resolver address and port"
+ }
+ },
+ "type": "object",
+ "required": [
+ "hostname",
+ "tcp_ports"
+ ],
+ "title": "NATRule",
+ "description": "Content of \"simcore.service.containers-allowed-outgoing-permit-list\" label"
+ },
+ "NoAuthentication": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "none"
+ ],
+ "const": "none",
+ "title": "Type",
+ "default": "none"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "NoAuthentication"
+ },
+ "NodeState": {
+ "properties": {
+ "modified": {
+ "type": "boolean",
+ "title": "Modified",
+ "description": "true if the node's outputs need to be re-computed",
+ "default": true
+ },
+ "dependencies": {
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "type": "array",
+ "uniqueItems": true,
+ "title": "Dependencies",
+ "description": "contains the node inputs dependencies if they need to be computed first"
+ },
+ "currentStatus": {
+ "$ref": "#/components/schemas/RunningState",
+ "description": "the node's current state",
+ "default": "NOT_STARTED"
+ },
+ "progress": {
+ "anyOf": [
+ {
+ "type": "number",
+ "maximum": 1.0,
+ "minimum": 0.0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Progress",
+ "description": "current progress of the task if available (None if not started or not a computational task)",
+ "default": 0
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "NodeState"
+ },
+ "ObservationItem": {
+ "properties": {
+ "is_disabled": {
+ "type": "boolean",
+ "title": "Is Disabled"
+ }
+ },
+ "type": "object",
+ "required": [
+ "is_disabled"
+ ],
+ "title": "ObservationItem"
+ },
+ "PathMappingsLabel": {
+ "properties": {
+ "inputs_path": {
+ "type": "string",
+ "format": "path",
+ "title": "Inputs Path",
+ "description": "folder path where the service expects all the inputs"
+ },
+ "outputs_path": {
+ "type": "string",
+ "format": "path",
+ "title": "Outputs Path",
+ "description": "folder path where the service is expected to provide all its outputs"
+ },
+ "state_paths": {
+ "items": {
+ "type": "string",
+ "format": "path"
+ },
+ "type": "array",
+ "title": "State Paths",
+ "description": "optional list of paths which contents need to be persisted"
+ },
+ "state_exclude": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": true
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "State Exclude",
+ "description": "optional list unix shell rules used to exclude files from the state"
+ },
+ "volume_size_limits": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Volume Size Limits",
+ "description": "Apply volume size limits to entries in: `inputs_path`, `outputs_path` and `state_paths`. Limits must be parsable by Pydantic's ByteSize."
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "inputs_path",
+ "outputs_path"
+ ],
+ "title": "PathMappingsLabel",
+ "description": "Content of \"simcore.service.paths-mapping\" label"
+ },
+ "PipelineDetails": {
+ "properties": {
+ "adjacency_list": {
+ "additionalProperties": {
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "type": "array"
+ },
+ "type": "object",
+ "title": "Adjacency List",
+ "description": "The adjacency list of the current pipeline in terms of {NodeID: [successor NodeID]}"
+ },
+ "progress": {
+ "anyOf": [
+ {
+ "type": "number",
+ "maximum": 1.0,
+ "minimum": 0.0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Progress",
+ "description": "the progress of the pipeline (None if there are no computational tasks)"
+ },
+ "node_states": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/NodeState"
+ },
+ "type": "object",
+ "title": "Node States",
+ "description": "The states of each of the computational nodes in the pipeline"
+ }
+ },
+ "type": "object",
+ "required": [
+ "adjacency_list",
+ "progress",
+ "node_states"
+ ],
+ "title": "PipelineDetails"
+ },
+ "PricingInfo": {
+ "properties": {
+ "pricing_plan_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricing Plan Id",
+ "minimum": 0
+ },
+ "pricing_unit_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricing Unit Id",
+ "minimum": 0
+ },
+ "pricing_unit_cost_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricing Unit Cost Id",
+ "minimum": 0
+ }
+ },
+ "type": "object",
+ "required": [
+ "pricing_plan_id",
+ "pricing_unit_id",
+ "pricing_unit_cost_id"
+ ],
+ "title": "PricingInfo"
+ },
+ "ResourceValue": {
+ "properties": {
+ "limit": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Limit"
+ },
+ "reservation": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Reservation"
+ }
+ },
+ "type": "object",
+ "required": [
+ "limit",
+ "reservation"
+ ],
+ "title": "ResourceValue"
+ },
+ "RestartPolicy": {
+ "type": "string",
+ "enum": [
+ "no-restart",
+ "on-inputs-downloaded"
+ ],
+ "title": "RestartPolicy",
+ "description": "Content of \"simcore.service.restart-policy\" label"
+ },
+ "RetrieveDataIn": {
+ "properties": {
+ "port_keys": {
+ "items": {
+ "type": "string",
+ "pattern": "^[-_a-zA-Z0-9]+$"
+ },
+ "type": "array",
+ "title": "Port Keys",
+ "description": "The port keys to retrieve data from"
+ }
+ },
+ "type": "object",
+ "required": [
+ "port_keys"
+ ],
+ "title": "RetrieveDataIn"
+ },
+ "RetrieveDataOut": {
+ "properties": {
+ "size_bytes": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Size Bytes",
+ "description": "The amount of data transferred by the retrieve call"
+ }
+ },
+ "type": "object",
+ "required": [
+ "size_bytes"
+ ],
+ "title": "RetrieveDataOut"
+ },
+ "RetrieveDataOutEnveloped": {
+ "properties": {
+ "data": {
+ "$ref": "#/components/schemas/RetrieveDataOut"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data"
+ ],
+ "title": "RetrieveDataOutEnveloped"
+ },
+ "RunningDynamicServiceDetails": {
+ "properties": {
+ "service_key": {
+ "type": "string",
+ "pattern": "^simcore/services/dynamic/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key",
+ "description": "distinctive name for the node based on the docker registry path"
+ },
+ "service_version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version",
+ "description": "semantic version number of the node"
+ },
+ "user_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ },
+ "project_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ },
+ "service_uuid": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Service Uuid"
+ },
+ "service_basepath": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "path"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Service Basepath",
+ "description": "predefined path where the dynamic service should be served. If empty, the service shall use the root endpoint."
+ },
+ "boot_type": {
+ "$ref": "#/components/schemas/ServiceBootType",
+ "description": "Describes how the dynamic services was started (legacy=V0, modern=V2).Since legacy services do not have this label it defaults to V0.",
+ "default": "V0"
+ },
+ "service_host": {
+ "type": "string",
+ "title": "Service Host",
+ "description": "the service swarm internal host name"
+ },
+ "service_port": {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "title": "Service Port",
+ "description": "the service swarm internal port",
+ "maximum": 65535,
+ "minimum": 0
+ },
+ "published_port": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "maximum": 65535,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Published Port",
+ "description": "the service swarm published port if any",
+ "deprecated": true
+ },
+ "entry_point": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Entry Point",
+ "description": "if empty the service entrypoint is on the root endpoint.",
+ "deprecated": true
+ },
+ "service_state": {
+ "$ref": "#/components/schemas/ServiceState",
+ "description": "service current state"
+ },
+ "service_message": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Service Message",
+ "description": "additional information related to service state"
+ }
+ },
+ "type": "object",
+ "required": [
+ "service_key",
+ "service_version",
+ "user_id",
+ "project_id",
+ "service_uuid",
+ "service_host",
+ "service_port",
+ "service_state"
+ ],
+ "title": "RunningDynamicServiceDetails"
+ },
+ "RunningState": {
+ "type": "string",
+ "enum": [
+ "UNKNOWN",
+ "PUBLISHED",
+ "NOT_STARTED",
+ "PENDING",
+ "WAITING_FOR_RESOURCES",
+ "STARTED",
+ "SUCCESS",
+ "FAILED",
+ "ABORTED",
+ "WAITING_FOR_CLUSTER"
+ ],
+ "title": "RunningState",
+ "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state"
+ },
+ "Scheduler": {
+ "properties": {
+ "status": {
+ "type": "string",
+ "title": "Status",
+ "description": "The running status of the scheduler"
+ },
+ "workers": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/Worker"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Workers"
+ }
+ },
+ "type": "object",
+ "required": [
+ "status"
+ ],
+ "title": "Scheduler"
+ },
+ "SchedulerData": {
+ "properties": {
+ "paths_mapping": {
+ "$ref": "#/components/schemas/PathMappingsLabel"
+ },
+ "simcore.service.compose-spec": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Simcore.Service.Compose-Spec",
+ "description": "json encoded docker-compose specifications. see https://docs.docker.com/compose/compose-file/, only used by dynamic-sidecar."
+ },
+ "simcore.service.container-http-entrypoint": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Simcore.Service.Container-Http-Entrypoint",
+ "description": "When a docker-compose specifications is provided, the container where the traffic must flow has to be specified. Required by dynamic-sidecar when compose_spec is set."
+ },
+ "user_preferences_path": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "path"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Preferences Path"
+ },
+ "simcore.service.restart-policy": {
+ "$ref": "#/components/schemas/RestartPolicy",
+ "description": "the dynamic-sidecar can restart all running containers on certain events. Supported events:\n- `no-restart` default\n- `on-inputs-downloaded` after inputs are downloaded\n",
+ "default": "no-restart"
+ },
+ "simcore.service.containers-allowed-outgoing-permit-list": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "items": {
+ "$ref": "#/components/schemas/NATRule"
+ },
+ "type": "array"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Simcore.Service.Containers-Allowed-Outgoing-Permit-List",
+ "description": "allow internet access to certain domain names and ports per container"
+ },
+ "simcore.service.containers-allowed-outgoing-internet": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": true
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Simcore.Service.Containers-Allowed-Outgoing-Internet",
+ "description": "allow complete internet access to containers in here"
+ },
+ "callbacks_mapping": {
+ "$ref": "#/components/schemas/CallbacksMapping"
+ },
+ "service_key": {
+ "type": "string",
+ "pattern": "^simcore/services/dynamic/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key",
+ "description": "distinctive name for the node based on the docker registry path"
+ },
+ "service_version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version",
+ "description": "semantic version number of the node"
+ },
+ "user_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ },
+ "project_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Project Id"
+ },
+ "service_uuid": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Service Uuid"
+ },
+ "service_name": {
+ "type": "string",
+ "minLength": 2,
+ "title": "Service Name",
+ "description": "Name of the current dynamic-sidecar being observed"
+ },
+ "run_id": {
+ "type": "string",
+ "title": "Run Id",
+ "description": "Uniquely identify the dynamic sidecar session (a.k.a. 2 subsequent exact same services will have a different run_id)"
+ },
+ "hostname": {
+ "type": "string",
+ "title": "Hostname",
+ "description": "dy-sidecar's service hostname (provided by docker-swarm)"
+ },
+ "port": {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "title": "Port",
+ "description": "dynamic-sidecar port",
+ "default": 8000,
+ "maximum": 65535,
+ "minimum": 0
+ },
+ "dynamic_sidecar": {
+ "$ref": "#/components/schemas/DynamicSidecar",
+ "description": "stores information fetched from the dynamic-sidecar"
+ },
+ "dynamic_sidecar_network_name": {
+ "type": "string",
+ "title": "Dynamic Sidecar Network Name",
+ "description": "overlay network biding the proxy to the container spaned by the dynamic-sidecar"
+ },
+ "simcore_traefik_zone": {
+ "type": "string",
+ "title": "Simcore Traefik Zone",
+ "description": "required for Traefik to correctly route requests to the spawned container"
+ },
+ "service_port": {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "title": "Service Port",
+ "description": "port where the service is exposed defined by the service; NOTE: temporary default because it will be changed once the service is started, this value is fetched from the service start spec",
+ "default": 65534,
+ "maximum": 65535,
+ "minimum": 0
+ },
+ "service_resources": {
+ "type": "object",
+ "title": "Service Resources",
+ "description": "service resources used to enforce limits"
+ },
+ "request_dns": {
+ "type": "string",
+ "title": "Request Dns",
+ "description": "used when configuring the CORS options on the proxy"
+ },
+ "request_scheme": {
+ "type": "string",
+ "title": "Request Scheme",
+ "description": "used when configuring the CORS options on the proxy"
+ },
+ "request_simcore_user_agent": {
+ "type": "string",
+ "title": "Request Simcore User Agent",
+ "description": "used as label to filter out the metrics from the cAdvisor prometheus metrics"
+ },
+ "proxy_service_name": {
+ "type": "string",
+ "title": "Proxy Service Name",
+ "description": "service name given to the proxy"
+ },
+ "proxy_admin_api_port": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "maximum": 65535,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Proxy Admin Api Port",
+ "description": "used as the admin endpoint API port"
+ },
+ "wallet_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/WalletInfo-Output"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "contains information about the wallet used to bill the running service"
+ },
+ "pricing_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PricingInfo"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "contains pricing information so we know what is the cost of running of the service"
+ },
+ "hardware_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/HardwareInfo"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "contains harware information so we know on which hardware to run the service"
+ },
+ "product_name": {
+ "type": "string",
+ "title": "Product Name",
+ "description": "Current product upon which this service is scheduled. If set to None, the current product is undefined. Mostly for backwards compatibility"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "paths_mapping",
+ "service_key",
+ "service_version",
+ "user_id",
+ "project_id",
+ "service_uuid",
+ "service_name",
+ "hostname",
+ "dynamic_sidecar",
+ "dynamic_sidecar_network_name",
+ "simcore_traefik_zone",
+ "service_resources",
+ "request_dns",
+ "request_scheme",
+ "request_simcore_user_agent"
+ ],
+ "title": "SchedulerData"
+ },
+ "ServiceBootType": {
+ "type": "string",
+ "enum": [
+ "V0",
+ "V2"
+ ],
+ "title": "ServiceBootType"
+ },
+ "ServiceRemovalState": {
+ "properties": {
+ "can_remove": {
+ "type": "boolean",
+ "title": "Can Remove",
+ "description": "when True, marks the service as ready to be removed",
+ "default": false
+ },
+ "can_save": {
+ "type": "boolean",
+ "title": "Can Save",
+ "description": "when True, saves the internal state and upload outputs of the service",
+ "default": false
+ },
+ "was_removed": {
+ "type": "boolean",
+ "title": "Was Removed",
+ "description": "Will be True when the removal finished. Used primarily to cancel retrying long running operations.",
+ "default": false
+ }
+ },
+ "type": "object",
+ "title": "ServiceRemovalState"
+ },
+ "ServiceState": {
+ "type": "string",
+ "enum": [
+ "failed",
+ "pending",
+ "pulling",
+ "starting",
+ "running",
+ "stopping",
+ "complete",
+ "idle"
+ ],
+ "title": "ServiceState"
+ },
+ "ServicesInstrumentation": {
+ "properties": {
+ "start_requested_at": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Start Requested At",
+ "description": "moment in which the process of starting the service was requested"
+ },
+ "close_requested_at": {
+ "anyOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Close Requested At",
+ "description": "moment in which the process of stopping the service was requested"
+ }
+ },
+ "type": "object",
+ "title": "ServicesInstrumentation"
+ },
+ "SimpleAuthentication": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "simple"
+ ],
+ "const": "simple",
+ "title": "Type",
+ "default": "simple"
+ },
+ "username": {
+ "type": "string",
+ "title": "Username"
+ },
+ "password": {
+ "type": "string",
+ "format": "password",
+ "title": "Password",
+ "writeOnly": true
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "username",
+ "password"
+ ],
+ "title": "SimpleAuthentication"
+ },
+ "Status2": {
+ "type": "string",
+ "enum": [
+ "created",
+ "running",
+ "paused",
+ "restarting",
+ "removing",
+ "exited",
+ "dead"
+ ],
+ "title": "Status2",
+ "description": "String representation of the container state. Can be one of \"created\",\n\"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\"."
+ },
+ "TLSAuthentication": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "tls"
+ ],
+ "const": "tls",
+ "title": "Type",
+ "default": "tls"
+ },
+ "tls_ca_file": {
+ "type": "string",
+ "format": "path",
+ "title": "Tls Ca File"
+ },
+ "tls_client_cert": {
+ "type": "string",
+ "format": "path",
+ "title": "Tls Client Cert"
+ },
+ "tls_client_key": {
+ "type": "string",
+ "format": "path",
+ "title": "Tls Client Key"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "tls_ca_file",
+ "tls_client_cert",
+ "tls_client_key"
+ ],
+ "title": "TLSAuthentication"
+ },
+ "TaskCounts": {
+ "properties": {
+ "error": {
+ "type": "integer",
+ "title": "Error",
+ "default": 0
+ },
+ "memory": {
+ "type": "integer",
+ "title": "Memory",
+ "default": 0
+ },
+ "executing": {
+ "type": "integer",
+ "title": "Executing",
+ "default": 0
+ }
+ },
+ "type": "object",
+ "title": "TaskCounts"
+ },
+ "TaskLogFileGet": {
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "format": "uuid",
+ "title": "Task Id"
+ },
+ "download_link": {
+ "anyOf": [
+ {
+ "type": "string",
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Download Link",
+ "description": "Presigned link for log file or None if still not available"
+ }
+ },
+ "type": "object",
+ "required": [
+ "task_id"
+ ],
+ "title": "TaskLogFileGet"
+ },
+ "TasksOutputs": {
+ "properties": {
+ "nodes_outputs": {
+ "additionalProperties": {
+ "type": "object"
+ },
+ "type": "object",
+ "title": "Nodes Outputs"
+ }
+ },
+ "type": "object",
+ "required": [
+ "nodes_outputs"
+ ],
+ "title": "TasksOutputs"
+ },
+ "TasksSelection": {
+ "properties": {
+ "nodes_ids": {
+ "items": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "type": "array",
+ "title": "Nodes Ids"
+ }
+ },
+ "type": "object",
+ "required": [
+ "nodes_ids"
+ ],
+ "title": "TasksSelection"
+ },
+ "UsedResources": {
+ "additionalProperties": {
+ "type": "number",
+ "minimum": 0.0
+ },
+ "type": "object",
+ "title": "UsedResources"
+ },
+ "UserServiceCommand": {
+ "properties": {
+ "service": {
+ "type": "string",
+ "title": "Service",
+ "description": "name of the docker-compose service in the docker-compose spec"
+ },
+ "command": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ],
+ "title": "Command",
+ "description": "command to run in container"
+ },
+ "timeout": {
+ "type": "number",
+ "minimum": 0.0,
+ "title": "Timeout",
+ "description": "after this interval the command will be timed-out"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "service",
+ "command",
+ "timeout"
+ ],
+ "title": "UserServiceCommand"
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Location"
+ },
+ "msg": {
+ "type": "string",
+ "title": "Message"
+ },
+ "type": {
+ "type": "string",
+ "title": "Error Type"
+ }
+ },
+ "type": "object",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "title": "ValidationError"
+ },
+ "WalletInfo-Input": {
+ "properties": {
+ "wallet_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Wallet Id",
+ "minimum": 0
+ },
+ "wallet_name": {
+ "type": "string",
+ "title": "Wallet Name"
+ },
+ "wallet_credit_amount": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Wallet Credit Amount"
+ }
+ },
+ "type": "object",
+ "required": [
+ "wallet_id",
+ "wallet_name",
+ "wallet_credit_amount"
+ ],
+ "title": "WalletInfo"
+ },
+ "WalletInfo-Output": {
+ "properties": {
+ "wallet_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Wallet Id",
+ "minimum": 0
+ },
+ "wallet_name": {
+ "type": "string",
+ "title": "Wallet Name"
+ },
+ "wallet_credit_amount": {
+ "type": "string",
+ "title": "Wallet Credit Amount"
+ }
+ },
+ "type": "object",
+ "required": [
+ "wallet_id",
+ "wallet_name",
+ "wallet_credit_amount"
+ ],
+ "title": "WalletInfo"
+ },
+ "Worker": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Id"
+ },
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "resources": {
+ "$ref": "#/components/schemas/DictModel_str_Annotated_float__Gt__"
+ },
+ "used_resources": {
+ "$ref": "#/components/schemas/UsedResources"
+ },
+ "memory_limit": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Memory Limit"
+ },
+ "metrics": {
+ "$ref": "#/components/schemas/WorkerMetrics"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "resources",
+ "used_resources",
+ "memory_limit",
+ "metrics"
+ ],
+ "title": "Worker"
+ },
+ "WorkerMetrics": {
+ "properties": {
+ "cpu": {
+ "type": "number",
+ "title": "Cpu",
+ "description": "consumed % of cpus"
+ },
+ "memory": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Memory",
+ "description": "consumed memory"
+ },
+ "num_fds": {
+ "type": "integer",
+ "title": "Num Fds",
+ "description": "consumed file descriptors"
+ },
+ "task_counts": {
+ "$ref": "#/components/schemas/TaskCounts",
+ "description": "task details"
+ }
+ },
+ "type": "object",
+ "required": [
+ "cpu",
+ "memory",
+ "num_fds",
+ "task_counts"
+ ],
+ "title": "WorkerMetrics"
+ },
+ "_PortRange": {
+ "properties": {
+ "lower": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "maximum": 65535,
+ "minimum": 0
+ },
+ {
+ "type": "string",
+ "pattern": "^\\${1,2}(?:\\{)?OSPARC_VARIABLE_[A-Za-z0-9_]+(?:\\})?(:-.+)?$"
+ }
+ ],
+ "title": "Lower"
+ },
+ "upper": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "maximum": 65535,
+ "minimum": 0
+ },
+ {
+ "type": "string",
+ "pattern": "^\\${1,2}(?:\\{)?OSPARC_VARIABLE_[A-Za-z0-9_]+(?:\\})?(:-.+)?$"
+ }
+ ],
+ "title": "Upper"
+ }
+ },
+ "type": "object",
+ "required": [
+ "lower",
+ "upper"
+ ],
+ "title": "_PortRange",
+ "description": "`lower` and `upper` are included"
+ },
+ "models_library__generated_models__docker_rest_api__Status": {
+ "type": "string",
+ "enum": [
+ "none",
+ "starting",
+ "healthy",
+ "unhealthy"
+ ],
+ "title": "Status",
+ "description": "Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n- \"none\" Indicates there is no healthcheck\n- \"starting\" Starting indicates that the container is not yet ready\n- \"healthy\" Healthy indicates that the container is running correctly\n- \"unhealthy\" Unhealthy indicates that the container has a problem"
+ },
+ "simcore_service_director_v2__models__dynamic_services_scheduler__Status": {
+ "properties": {
+ "current": {
+ "$ref": "#/components/schemas/DynamicSidecarStatus",
+ "description": "status of the service"
+ },
+ "info": {
+ "type": "string",
+ "title": "Info",
+ "description": "additional information for the user"
+ }
+ },
+ "type": "object",
+ "required": [
+ "current",
+ "info"
+ ],
+ "title": "Status",
+ "description": "Generated from data from docker container inspect API"
+ }
+ }
+ }
+}
diff --git a/services/dynamic-scheduler/openapi.json b/services/dynamic-scheduler/openapi.json
new file mode 100644
index 00000000000..add75b123d2
--- /dev/null
+++ b/services/dynamic-scheduler/openapi.json
@@ -0,0 +1,93 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "simcore-service-dynamic-scheduler web API",
+ "description": "Service that manages lifecycle of dynamic services",
+ "version": "1.0.0"
+ },
+ "paths": {
+ "/": {
+ "get": {
+ "summary": "Healthcheck",
+ "operationId": "healthcheck__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/meta": {
+ "get": {
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get Service Metadata",
+ "operationId": "get_service_metadata_v1_meta_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Meta"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "Meta": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ },
+ "released": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Released",
+ "description": "Maps every route's path tag with a released version"
+ },
+ "docs_url": {
+ "type": "string",
+ "title": "Docs Url"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "version",
+ "docs_url"
+ ],
+ "title": "Meta"
+ }
+ }
+ }
+}
diff --git a/services/dynamic-sidecar/openapi.json b/services/dynamic-sidecar/openapi.json
new file mode 100644
index 00000000000..cccb9924cdc
--- /dev/null
+++ b/services/dynamic-sidecar/openapi.json
@@ -0,0 +1,1514 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "simcore-service-dynamic-sidecar",
+ "description": "Implements a sidecar service to manage user's dynamic/interactive services",
+ "version": "1.2.0"
+ },
+ "servers": [
+ {
+ "url": "/",
+ "description": "Default server: requests directed to serving url"
+ },
+ {
+ "url": "http://{host}:{port}",
+ "description": "Development server: can configure any base url",
+ "variables": {
+ "host": {
+ "default": "127.0.0.1"
+ },
+ "port": {
+ "default": "8000"
+ }
+ }
+ }
+ ],
+ "paths": {
+ "/health": {
+ "get": {
+ "summary": "Health Endpoint",
+ "operationId": "health_endpoint_health_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApplicationHealth"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "Service is unhealthy"
+ }
+ }
+ }
+ },
+ "/metrics": {
+ "get": {
+ "summary": "Metrics Endpoint",
+ "description": "Exposes metrics form the underlying user service.\n\nPossible responses:\n- HTTP 200 & empty body: user services did not start\n- HTTP 200 & prometheus metrics: was able to fetch data from user service\n- HTTP 500 & error message: something went wrong when fetching data from user service",
+ "operationId": "metrics_endpoint_metrics_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "error in recovering data from user service"
+ }
+ }
+ }
+ },
+ "/v1/containers/compose-spec": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Store Compose Spec",
+ "description": "Validates and stores the docker compose spec for the user services.",
+ "operationId": "store_compose_spec_v1_containers_compose_spec_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ContainersComposeSpec"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "500": {
+ "description": "Errors in container"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers": {
+ "get": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Containers Docker Inspect",
+ "description": "Returns entire docker inspect data, if only_state is True,\nthe status of the containers is returned",
+ "operationId": "containers_docker_inspect_v1_containers_get",
+ "parameters": [
+ {
+ "name": "only_status",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "description": "if True only show the status of the container",
+ "default": false,
+ "title": "Only Status"
+ },
+ "description": "if True only show the status of the container"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Response Containers Docker Inspect V1 Containers Get"
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Errors in container"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Starts the containers as defined in ContainerCreate by:\n- cleaning up resources from previous runs if any\n- starting the containers\n\nProgress may be obtained through URL\nProcess may be cancelled through URL",
+ "operationId": "create_service_containers_task_v1_containers_post",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ContainersCreate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Create Service Containers Task V1 Containers Post"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/activity": {
+ "get": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Get Containers Activity",
+ "operationId": "get_containers_activity_v1_containers_activity_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ActivityInfo"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Response Get Containers Activity V1 Containers Activity Get"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/{id}/logs": {
+ "get": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Get Container Logs",
+ "description": "Returns the logs of a given container if found",
+ "operationId": "get_container_logs_v1_containers__id__logs_get",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Id"
+ }
+ },
+ {
+ "name": "since",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "title": "Timestamp",
+ "description": "Only return logs since this time, as a UNIX timestamp",
+ "default": 0
+ },
+ "description": "Only return logs since this time, as a UNIX timestamp"
+ },
+ {
+ "name": "until",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "title": "Timestamp",
+ "description": "Only return logs before this time, as a UNIX timestamp",
+ "default": 0
+ },
+ "description": "Only return logs before this time, as a UNIX timestamp"
+ },
+ {
+ "name": "timestamps",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "title": "Display timestamps",
+ "description": "Enabling this parameter will include timestamps in logs",
+ "default": false
+ },
+ "description": "Enabling this parameter will include timestamps in logs"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "title": "Response Get Container Logs V1 Containers Id Logs Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Container does not exists"
+ },
+ "500": {
+ "description": "Errors in container"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/name": {
+ "get": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Get Containers Name",
+ "description": "Searches for the container's name given the network\non which the proxy communicates with it.\nSupported filters:\n network: matches against the exact network name\n assigned to the container; `will include`\n containers\n exclude: matches if contained in the name of the\n container; `will exclude` containers",
+ "operationId": "get_containers_name_v1_containers_name_get",
+ "parameters": [
+ {
+ "name": "filters",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "description": "JSON encoded dictionary. FastAPI does not allow for dict as type in query parameters",
+ "title": "Filters"
+ },
+ "description": "JSON encoded dictionary. FastAPI does not allow for dict as type in query parameters"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "object"
+ }
+ ],
+ "title": "Response Get Containers Name V1 Containers Name Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "No entrypoint container found or spec is not yet present"
+ },
+ "422": {
+ "description": "Filters could not be parsed"
+ }
+ }
+ }
+ },
+ "/v1/containers/{id}": {
+ "get": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Inspect Container",
+ "description": "Returns information about the container, like docker inspect command",
+ "operationId": "inspect_container_v1_containers__id__get",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Id"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Response Inspect Container V1 Containers Id Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Container does not exist"
+ },
+ "500": {
+ "description": "Errors in container"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/ports/io": {
+ "patch": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Enable/disable ports i/o",
+ "operationId": "toggle_ports_io_v1_containers_ports_io_patch",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PatchPortsIOItem"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/ports/outputs/dirs": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Creates the output directories declared by the docker images's labels. It is more convenient to pass the labels from director-v2, since it already has all the machinery to call into director-v0 to retrieve them.",
+ "operationId": "create_output_dirs_v1_containers_ports_outputs_dirs_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateDirsRequestItem"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/{id}/networks:attach": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "attach container to a network, if not already attached",
+ "operationId": "attach_container_to_network_v1_containers__id__networks_attach_post",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AttachContainerToNetworkItem"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/{id}/networks:detach": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "detach container from a network, if not already detached",
+ "operationId": "detach_container_from_network_v1_containers__id__networks_detach_post",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DetachContainerFromNetworkItem"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/images:pull": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Pulls all the docker container images for the user services",
+ "operationId": "pull_user_servcices_docker_images_v1_containers_images_pull_post",
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Pull User Servcices Docker Images V1 Containers Images Pull Post"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers:down": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Remove the previously started containers",
+ "operationId": "runs_docker_compose_down_task_v1_containers_down_post",
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Runs Docker Compose Down Task V1 Containers Down Post"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/state:restore": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Restores the state of the dynamic service",
+ "operationId": "state_restore_task_v1_containers_state_restore_post",
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response State Restore Task V1 Containers State Restore Post"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/state:save": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Stores the state of the dynamic service",
+ "operationId": "state_save_task_v1_containers_state_save_post",
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response State Save Task V1 Containers State Save Post"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/ports/inputs:pull": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Pull input ports data",
+ "operationId": "ports_inputs_pull_task_v1_containers_ports_inputs_pull_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Port Keys"
+ }
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Ports Inputs Pull Task V1 Containers Ports Inputs Pull Post"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/ports/outputs:pull": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Pull output ports data",
+ "operationId": "ports_outputs_pull_task_v1_containers_ports_outputs_pull_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Port Keys"
+ }
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Ports Outputs Pull Task V1 Containers Ports Outputs Pull Post"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers/ports/outputs:push": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Push output ports data",
+ "operationId": "ports_outputs_push_task_v1_containers_ports_outputs_push_post",
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Ports Outputs Push Task V1 Containers Ports Outputs Push Post"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/containers:restart": {
+ "post": {
+ "tags": [
+ "containers"
+ ],
+ "summary": "Restarts previously started containers",
+ "operationId": "containers_restart_task_v1_containers_restart_post",
+ "responses": {
+ "202": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Containers Restart Task V1 Containers Restart Post"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/volumes/{id}": {
+ "put": {
+ "tags": [
+ "volumes"
+ ],
+ "summary": "Updates the state of the volume",
+ "operationId": "put_volume_state_v1_volumes__id__put",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/VolumeCategory"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PutVolumeItem"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/disk/reserved:free": {
+ "post": {
+ "tags": [
+ "disk"
+ ],
+ "summary": "Frees up reserved disk space",
+ "operationId": "free_reserved_disk_space_v1_disk_reserved_free_post",
+ "responses": {
+ "204": {
+ "description": "Successful Response"
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "ActivityInfo": {
+ "properties": {
+ "seconds_inactive": {
+ "type": "number",
+ "minimum": 0.0,
+ "title": "Seconds Inactive"
+ }
+ },
+ "type": "object",
+ "required": [
+ "seconds_inactive"
+ ],
+ "title": "ActivityInfo"
+ },
+ "ApplicationHealth": {
+ "properties": {
+ "is_healthy": {
+ "type": "boolean",
+ "title": "Is Healthy",
+ "description": "returns True if the service sis running correctly",
+ "default": true
+ },
+ "error_message": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Error Message",
+ "description": "in case of error this gets set"
+ }
+ },
+ "type": "object",
+ "title": "ApplicationHealth"
+ },
+ "AttachContainerToNetworkItem": {
+ "properties": {
+ "network_id": {
+ "type": "string",
+ "title": "Network Id"
+ },
+ "network_aliases": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Network Aliases"
+ }
+ },
+ "type": "object",
+ "required": [
+ "network_id",
+ "network_aliases"
+ ],
+ "title": "AttachContainerToNetworkItem"
+ },
+ "BootMode": {
+ "type": "string",
+ "enum": [
+ "CPU",
+ "GPU",
+ "MPI"
+ ],
+ "title": "BootMode"
+ },
+ "ContainersComposeSpec": {
+ "properties": {
+ "docker_compose_yaml": {
+ "type": "string",
+ "title": "Docker Compose Yaml"
+ }
+ },
+ "type": "object",
+ "required": [
+ "docker_compose_yaml"
+ ],
+ "title": "ContainersComposeSpec"
+ },
+ "ContainersCreate": {
+ "properties": {
+ "metrics_params": {
+ "$ref": "#/components/schemas/CreateServiceMetricsAdditionalParams"
+ }
+ },
+ "type": "object",
+ "required": [
+ "metrics_params"
+ ],
+ "title": "ContainersCreate"
+ },
+ "CreateDirsRequestItem": {
+ "properties": {
+ "outputs_labels": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ServiceOutput"
+ },
+ "type": "object",
+ "title": "Outputs Labels"
+ }
+ },
+ "type": "object",
+ "required": [
+ "outputs_labels"
+ ],
+ "title": "CreateDirsRequestItem"
+ },
+ "CreateServiceMetricsAdditionalParams": {
+ "properties": {
+ "wallet_id": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Wallet Id"
+ },
+ "wallet_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Wallet Name"
+ },
+ "pricing_plan_id": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pricing Plan Id"
+ },
+ "pricing_unit_id": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pricing Unit Id"
+ },
+ "pricing_unit_cost_id": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pricing Unit Cost Id"
+ },
+ "product_name": {
+ "type": "string",
+ "title": "Product Name"
+ },
+ "simcore_user_agent": {
+ "type": "string",
+ "title": "Simcore User Agent"
+ },
+ "user_email": {
+ "type": "string",
+ "title": "User Email"
+ },
+ "project_name": {
+ "type": "string",
+ "title": "Project Name"
+ },
+ "node_name": {
+ "type": "string",
+ "title": "Node Name"
+ },
+ "service_key": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ },
+ "service_version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ },
+ "service_resources": {
+ "type": "object",
+ "title": "Service Resources"
+ },
+ "service_additional_metadata": {
+ "type": "object",
+ "title": "Service Additional Metadata"
+ }
+ },
+ "type": "object",
+ "required": [
+ "wallet_id",
+ "wallet_name",
+ "pricing_plan_id",
+ "pricing_unit_id",
+ "pricing_unit_cost_id",
+ "product_name",
+ "simcore_user_agent",
+ "user_email",
+ "project_name",
+ "node_name",
+ "service_key",
+ "service_version",
+ "service_resources",
+ "service_additional_metadata"
+ ],
+ "title": "CreateServiceMetricsAdditionalParams",
+ "example": {
+ "node_name": "the service of a lifetime _ *!",
+ "pricing_plan_id": 1,
+ "pricing_unit_detail_id": 1,
+ "pricing_unit_id": 1,
+ "product_name": "osparc",
+ "project_name": "_!New Study",
+ "service_additional_metadata": {},
+ "service_key": "simcore/services/dynamic/test",
+ "service_resources": {},
+ "service_version": "0.0.1",
+ "simcore_user_agent": "undefined",
+ "user_email": "test@test.com",
+ "wallet_id": 1,
+ "wallet_name": "a private wallet for me"
+ }
+ },
+ "DetachContainerFromNetworkItem": {
+ "properties": {
+ "network_id": {
+ "type": "string",
+ "title": "Network Id"
+ }
+ },
+ "type": "object",
+ "required": [
+ "network_id"
+ ],
+ "title": "DetachContainerFromNetworkItem"
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "detail": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Detail"
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError"
+ },
+ "ImageResources": {
+ "properties": {
+ "image": {
+ "type": "string",
+ "pattern": "^(?:([a-z0-9-]+(?:\\.[a-z0-9-]+)+(?::\\d+)?|[a-z0-9-]+:\\d+)/)?((?:[a-z0-9][a-z0-9_.-]*/)*[a-z0-9-_]+[a-z0-9])(?::([\\w][\\w.-]{0,127}))?(\\@sha256:[a-fA-F0-9]{32,64})?$",
+ "title": "Image",
+ "description": "Used by the frontend to provide a context for the users.Services with a docker-compose spec will have multiple entries.Using the `image:version` instead of the docker-compose spec is more helpful for the end user."
+ },
+ "resources": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ResourceValue"
+ },
+ "type": "object",
+ "title": "Resources"
+ },
+ "boot_modes": {
+ "items": {
+ "$ref": "#/components/schemas/BootMode"
+ },
+ "type": "array",
+ "title": "Boot Modes",
+ "description": "describe how a service shall be booted, using CPU, MPI, openMP or GPU",
+ "default": [
+ "CPU"
+ ]
+ }
+ },
+ "type": "object",
+ "required": [
+ "image",
+ "resources"
+ ],
+ "title": "ImageResources",
+ "example": {
+ "image": "simcore/service/dynamic/pretty-intense:1.0.0",
+ "resources": {
+ "AIRAM": {
+ "limit": 1,
+ "reservation": 1
+ },
+ "ANY_resource": {
+ "limit": "some_value",
+ "reservation": "some_value"
+ },
+ "CPU": {
+ "limit": 4,
+ "reservation": 0.1
+ },
+ "RAM": {
+ "limit": 103079215104,
+ "reservation": 536870912
+ },
+ "VRAM": {
+ "limit": 1,
+ "reservation": 1
+ }
+ }
+ }
+ },
+ "PatchPortsIOItem": {
+ "properties": {
+ "enable_outputs": {
+ "type": "boolean",
+ "title": "Enable Outputs"
+ },
+ "enable_inputs": {
+ "type": "boolean",
+ "title": "Enable Inputs"
+ }
+ },
+ "type": "object",
+ "required": [
+ "enable_outputs",
+ "enable_inputs"
+ ],
+ "title": "PatchPortsIOItem"
+ },
+ "PutVolumeItem": {
+ "properties": {
+ "status": {
+ "$ref": "#/components/schemas/VolumeStatus"
+ }
+ },
+ "type": "object",
+ "required": [
+ "status"
+ ],
+ "title": "PutVolumeItem"
+ },
+ "ResourceValue": {
+ "properties": {
+ "limit": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Limit"
+ },
+ "reservation": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Reservation"
+ }
+ },
+ "type": "object",
+ "required": [
+ "limit",
+ "reservation"
+ ],
+ "title": "ResourceValue"
+ },
+ "SelectBox": {
+ "properties": {
+ "structure": {
+ "items": {
+ "$ref": "#/components/schemas/Structure"
+ },
+ "type": "array",
+ "minItems": 1,
+ "title": "Structure"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "structure"
+ ],
+ "title": "SelectBox"
+ },
+ "ServiceOutput": {
+ "properties": {
+ "displayOrder": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Displayorder",
+ "description": "DEPRECATED: new display order is taken from the item position. This will be removed.",
+ "deprecated": true
+ },
+ "label": {
+ "type": "string",
+ "title": "Label",
+ "description": "short name for the property"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "description of the property"
+ },
+ "type": {
+ "type": "string",
+ "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$",
+ "title": "Type",
+ "description": "data type expected on this input glob matching for data type is allowed"
+ },
+ "contentSchema": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Contentschema",
+ "description": "jsonschema of this input/output. Required when type='ref_contentSchema'"
+ },
+ "fileToKeyMap": {
+ "anyOf": [
+ {
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Filetokeymap",
+ "description": "Place the data associated with the named keys in files"
+ },
+ "unit": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Unit",
+ "description": "Units, when it refers to a physical quantity",
+ "deprecated": true
+ },
+ "widget": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/Widget"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "custom widget to use instead of the default one determined from the data-type",
+ "deprecated": true
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "label",
+ "description",
+ "type"
+ ],
+ "title": "ServiceOutput"
+ },
+ "Structure": {
+ "properties": {
+ "key": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "number"
+ }
+ ],
+ "title": "Key"
+ },
+ "label": {
+ "type": "string",
+ "title": "Label"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "key",
+ "label"
+ ],
+ "title": "Structure"
+ },
+ "TextArea": {
+ "properties": {
+ "minHeight": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Minheight",
+ "description": "minimum Height of the textarea",
+ "minimum": 0
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "minHeight"
+ ],
+ "title": "TextArea"
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Location"
+ },
+ "msg": {
+ "type": "string",
+ "title": "Message"
+ },
+ "type": {
+ "type": "string",
+ "title": "Error Type"
+ }
+ },
+ "type": "object",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "title": "ValidationError"
+ },
+ "VolumeCategory": {
+ "type": "string",
+ "enum": [
+ "OUTPUTS",
+ "INPUTS",
+ "STATES",
+ "SHARED_STORE"
+ ],
+ "title": "VolumeCategory",
+ "description": "These uniquely identify volumes which are mounted by\nthe dynamic-sidecar and user services.\n\nThis is primarily used to keep track of the status of\neach individual volume on the volumes.\n\nThe status is ingested by the agent and processed\nwhen the volume is removed."
+ },
+ "VolumeStatus": {
+ "type": "string",
+ "enum": [
+ "CONTENT_NEEDS_TO_BE_SAVED",
+ "CONTENT_WAS_SAVED",
+ "CONTENT_NO_SAVE_REQUIRED"
+ ],
+ "title": "VolumeStatus",
+ "description": "Used by the agent to figure out what to do with the data\npresent on the volume."
+ },
+ "Widget": {
+ "properties": {
+ "type": {
+ "$ref": "#/components/schemas/WidgetType",
+ "description": "type of the property"
+ },
+ "details": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/TextArea"
+ },
+ {
+ "$ref": "#/components/schemas/SelectBox"
+ }
+ ],
+ "title": "Details"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "type",
+ "details"
+ ],
+ "title": "Widget"
+ },
+ "WidgetType": {
+ "type": "string",
+ "enum": [
+ "TextArea",
+ "SelectBox"
+ ],
+ "title": "WidgetType"
+ }
+ }
+ }
+}
diff --git a/services/invitations/openapi.json b/services/invitations/openapi.json
new file mode 100644
index 00000000000..6fe64f4702d
--- /dev/null
+++ b/services/invitations/openapi.json
@@ -0,0 +1,456 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "simcore-service-invitations web API",
+ "description": "Service that manages creation and validation of registration invitations",
+ "version": "1.2.0"
+ },
+ "paths": {
+ "/": {
+ "get": {
+ "summary": "Healthcheck",
+ "operationId": "healthcheck__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/meta": {
+ "get": {
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get Service Metadata",
+ "operationId": "get_service_metadata_v1_meta_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/_Meta"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/invitations": {
+ "post": {
+ "tags": [
+ "invitations"
+ ],
+ "summary": "Create Invitation",
+ "description": "Generates a new invitation code and returns its content and an invitation link",
+ "operationId": "create_invitation_v1_invitations_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApiInvitationInputs"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApiInvitationContentAndLink"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ }
+ },
+ "/v1/invitations:extract": {
+ "post": {
+ "tags": [
+ "invitations"
+ ],
+ "summary": "Extracts Invitation From Code",
+ "description": "Decrypts the invitation code and returns its content",
+ "operationId": "extracts_invitation_from_code_v1_invitations_extract_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApiEncryptedInvitation"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApiInvitationContent"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBasic": []
+ }
+ ]
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "ApiEncryptedInvitation": {
+ "properties": {
+ "invitation_url": {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri",
+ "title": "Invitation Url",
+ "description": "Invitation link"
+ }
+ },
+ "type": "object",
+ "required": [
+ "invitation_url"
+ ],
+ "title": "ApiEncryptedInvitation"
+ },
+ "ApiInvitationContent": {
+ "properties": {
+ "issuer": {
+ "type": "string",
+ "maxLength": 40,
+ "minLength": 1,
+ "title": "Issuer",
+ "description": "Identifies who issued the invitation. E.g. an email, a service name etc. NOTE: it will be trimmed if exceeds maximum"
+ },
+ "guest": {
+ "type": "string",
+ "format": "email",
+ "title": "Guest",
+ "description": "Invitee's email. Note that the registration can ONLY be used with this email"
+ },
+ "trial_account_days": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Trial Account Days",
+ "description": "If set, this invitation will activate a trial account.Sets the number of days from creation until the account expires"
+ },
+ "extra_credits_in_usd": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Extra Credits In Usd",
+ "description": "If set, the account's primary wallet will add extra credits corresponding to this ammount in USD"
+ },
+ "product": {
+ "type": "string",
+ "title": "Product",
+ "description": "This invitations can only be used for this product."
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Created",
+ "description": "Timestamp for creation"
+ }
+ },
+ "type": "object",
+ "required": [
+ "issuer",
+ "guest",
+ "product",
+ "created"
+ ],
+ "title": "ApiInvitationContent",
+ "example": {
+ "created": "2023-01-11 13:11:47.293595",
+ "guest": "invitedguest@company.com",
+ "issuer": "issuerid",
+ "product": "osparc",
+ "trial_account_days": 2
+ }
+ },
+ "ApiInvitationContentAndLink": {
+ "properties": {
+ "issuer": {
+ "type": "string",
+ "maxLength": 40,
+ "minLength": 1,
+ "title": "Issuer",
+ "description": "Identifies who issued the invitation. E.g. an email, a service name etc. NOTE: it will be trimmed if exceeds maximum"
+ },
+ "guest": {
+ "type": "string",
+ "format": "email",
+ "title": "Guest",
+ "description": "Invitee's email. Note that the registration can ONLY be used with this email"
+ },
+ "trial_account_days": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Trial Account Days",
+ "description": "If set, this invitation will activate a trial account.Sets the number of days from creation until the account expires"
+ },
+ "extra_credits_in_usd": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Extra Credits In Usd",
+ "description": "If set, the account's primary wallet will add extra credits corresponding to this ammount in USD"
+ },
+ "product": {
+ "type": "string",
+ "title": "Product",
+ "description": "This invitations can only be used for this product."
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Created",
+ "description": "Timestamp for creation"
+ },
+ "invitation_url": {
+ "type": "string",
+ "title": "Invitation Url",
+ "description": "Invitation link"
+ }
+ },
+ "type": "object",
+ "required": [
+ "issuer",
+ "guest",
+ "product",
+ "created",
+ "invitation_url"
+ ],
+ "title": "ApiInvitationContentAndLink",
+ "example": {
+ "created": "2023-01-11 13:11:47.293595",
+ "guest": "invitedguest@company.com",
+ "invitation_url": "https://foo.com/#/registration?invitation=1234",
+ "issuer": "issuerid",
+ "product": "osparc",
+ "trial_account_days": 2
+ }
+ },
+ "ApiInvitationInputs": {
+ "properties": {
+ "issuer": {
+ "type": "string",
+ "maxLength": 40,
+ "minLength": 1,
+ "title": "Issuer",
+ "description": "Identifies who issued the invitation. E.g. an email, a service name etc. NOTE: it will be trimmed if exceeds maximum"
+ },
+ "guest": {
+ "type": "string",
+ "format": "email",
+ "title": "Guest",
+ "description": "Invitee's email. Note that the registration can ONLY be used with this email"
+ },
+ "trial_account_days": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Trial Account Days",
+ "description": "If set, this invitation will activate a trial account.Sets the number of days from creation until the account expires"
+ },
+ "extra_credits_in_usd": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "minimum": 0
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Extra Credits In Usd",
+ "description": "If set, the account's primary wallet will add extra credits corresponding to this ammount in USD"
+ },
+ "product": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Product",
+ "description": "If None, it will use INVITATIONS_DEFAULT_PRODUCT"
+ }
+ },
+ "type": "object",
+ "required": [
+ "issuer",
+ "guest"
+ ],
+ "title": "ApiInvitationInputs",
+ "example": {
+ "guest": "invitedguest@company.com",
+ "issuer": "issuerid",
+ "trial_account_days": 2
+ }
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "detail": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Detail"
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError"
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Location"
+ },
+ "msg": {
+ "type": "string",
+ "title": "Message"
+ },
+ "type": {
+ "type": "string",
+ "title": "Error Type"
+ }
+ },
+ "type": "object",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "title": "ValidationError"
+ },
+ "_Meta": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "version": {
+ "type": "string",
+ "title": "Version"
+ },
+ "docs_url": {
+ "type": "string",
+ "title": "Docs Url"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "version",
+ "docs_url"
+ ],
+ "title": "_Meta"
+ }
+ },
+ "securitySchemes": {
+ "HTTPBasic": {
+ "type": "http",
+ "scheme": "basic"
+ }
+ }
+ }
+}
diff --git a/services/payments/openapi.json b/services/payments/openapi.json
new file mode 100644
index 00000000000..a5f2198f99f
--- /dev/null
+++ b/services/payments/openapi.json
@@ -0,0 +1,564 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "simcore-service-payments web API",
+ "description": "Service that manages creation and validation of registration payments",
+ "version": "1.4.0"
+ },
+ "paths": {
+ "/": {
+ "get": {
+ "summary": "Healthcheck",
+ "operationId": "healthcheck__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/token": {
+ "post": {
+ "tags": [
+ "auth"
+ ],
+ "summary": "Login To Create Access Token",
+ "operationId": "login_to_create_access_token",
+ "requestBody": {
+ "content": {
+ "application/x-www-form-urlencoded": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_login_to_create_access_token"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Token"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/meta": {
+ "get": {
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get Service Metadata",
+ "operationId": "get_service_metadata_v1_meta_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Meta"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "OAuth2PasswordBearer": []
+ }
+ ]
+ }
+ },
+ "/v1/payments/{payment_id}:ack": {
+ "post": {
+ "tags": [
+ "acks"
+ ],
+ "summary": "Acknowledge Payment",
+ "description": "completes (ie. ack) request initated by `/init` on the payments-gateway API",
+ "operationId": "acknowledge_payment_v1_payments__payment_id__ack_post",
+ "security": [
+ {
+ "OAuth2PasswordBearer": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "payment_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "title": "Payment Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AckPayment"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/payments-methods/{payment_method_id}:ack": {
+ "post": {
+ "tags": [
+ "acks"
+ ],
+ "summary": "Acknowledge Payment Method",
+ "description": "completes (ie. ack) request initated by `/payments-methods:init` on the payments-gateway API",
+ "operationId": "acknowledge_payment_method_v1_payments_methods__payment_method_id__ack_post",
+ "security": [
+ {
+ "OAuth2PasswordBearer": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "payment_method_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "title": "Payment Method Id"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AckPaymentMethod"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "AckPayment": {
+ "properties": {
+ "success": {
+ "type": "boolean",
+ "title": "Success"
+ },
+ "message": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Message"
+ },
+ "provider_payment_id": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 100,
+ "minLength": 1
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Provider Payment Id",
+ "description": "Payment ID from the provider (e.g. stripe payment ID)"
+ },
+ "invoice_url": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Invoice Url",
+ "description": "Link to invoice is required when success=true"
+ },
+ "invoice_pdf": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Invoice Pdf",
+ "description": "Link to invoice PDF"
+ },
+ "stripe_invoice_id": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 100,
+ "minLength": 1
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Stripe Invoice Id",
+ "description": "Stripe invoice ID"
+ },
+ "stripe_customer_id": {
+ "anyOf": [
+ {
+ "type": "string",
+ "maxLength": 100,
+ "minLength": 1
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Stripe Customer Id",
+ "description": "Stripe customer ID"
+ },
+ "saved": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SavedPaymentMethod"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Gets the payment-method if user opted to save it during payment.If used did not opt to save of payment-method was already saved, then it defaults to None"
+ }
+ },
+ "type": "object",
+ "required": [
+ "success"
+ ],
+ "title": "AckPayment",
+ "example": {
+ "invoice_url": "https://invoices.com/id=12345",
+ "provider_payment_id": "pi_123ABC",
+ "saved": {
+ "payment_method_id": "3FA85F64-5717-4562-B3FC-2C963F66AFA6",
+ "success": true
+ },
+ "success": true
+ }
+ },
+ "AckPaymentMethod": {
+ "properties": {
+ "success": {
+ "type": "boolean",
+ "title": "Success"
+ },
+ "message": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Message"
+ }
+ },
+ "type": "object",
+ "required": [
+ "success"
+ ],
+ "title": "AckPaymentMethod"
+ },
+ "Body_login_to_create_access_token": {
+ "properties": {
+ "grant_type": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "password"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Grant Type"
+ },
+ "username": {
+ "type": "string",
+ "title": "Username"
+ },
+ "password": {
+ "type": "string",
+ "title": "Password"
+ },
+ "scope": {
+ "type": "string",
+ "title": "Scope",
+ "default": ""
+ },
+ "client_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Client Id"
+ },
+ "client_secret": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Client Secret"
+ }
+ },
+ "type": "object",
+ "required": [
+ "username",
+ "password"
+ ],
+ "title": "Body_login_to_create_access_token"
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "detail": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Detail"
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError"
+ },
+ "Meta": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "version": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Version"
+ },
+ "released": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Released",
+ "description": "Maps every route's path tag with a released version"
+ },
+ "docs_url": {
+ "type": "string",
+ "title": "Docs Url"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "version",
+ "docs_url"
+ ],
+ "title": "Meta",
+ "example": {
+ "docs_url": "https://foo.io/doc",
+ "name": "simcore_service_payments",
+ "version": "2.4.45"
+ }
+ },
+ "SavedPaymentMethod": {
+ "properties": {
+ "success": {
+ "type": "boolean",
+ "title": "Success"
+ },
+ "message": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Message"
+ },
+ "payment_method_id": {
+ "type": "string",
+ "maxLength": 100,
+ "minLength": 1,
+ "title": "Payment Method Id"
+ }
+ },
+ "type": "object",
+ "required": [
+ "success",
+ "payment_method_id"
+ ],
+ "title": "SavedPaymentMethod"
+ },
+ "Token": {
+ "properties": {
+ "access_token": {
+ "type": "string",
+ "title": "Access Token"
+ },
+ "token_type": {
+ "type": "string",
+ "const": "bearer",
+ "title": "Token Type"
+ }
+ },
+ "type": "object",
+ "required": [
+ "access_token",
+ "token_type"
+ ],
+ "title": "Token"
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Location"
+ },
+ "msg": {
+ "type": "string",
+ "title": "Message"
+ },
+ "type": {
+ "type": "string",
+ "title": "Error Type"
+ }
+ },
+ "type": "object",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "title": "ValidationError"
+ }
+ },
+ "securitySchemes": {
+ "OAuth2PasswordBearer": {
+ "type": "oauth2",
+ "flows": {
+ "password": {
+ "scopes": {},
+ "tokenUrl": "/v1/token"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/services/resource-usage-tracker/openapi.json b/services/resource-usage-tracker/openapi.json
new file mode 100644
index 00000000000..6aa53c7118c
--- /dev/null
+++ b/services/resource-usage-tracker/openapi.json
@@ -0,0 +1,600 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "title": "simcore-service-resource-usage-tracker web API",
+ "description": "Service that collects and stores computational resources usage used in osparc-simcore",
+ "version": "1.0.0"
+ },
+ "paths": {
+ "/": {
+ "get": {
+ "summary": "Healthcheck",
+ "operationId": "healthcheck__get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "text/plain": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/meta": {
+ "get": {
+ "tags": [
+ "meta"
+ ],
+ "summary": "Get Service Metadata",
+ "operationId": "get_service_metadata_v1_meta_get",
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/_Meta"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/credit-transactions/credits:sum": {
+ "post": {
+ "tags": [
+ "credit-transactions"
+ ],
+ "summary": "Sum total available credits in the wallet",
+ "operationId": "get_credit_transactions_sum_v1_credit_transactions_credits_sum_post",
+ "parameters": [
+ {
+ "name": "product_name",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Product Name"
+ }
+ },
+ {
+ "name": "wallet_id",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Wallet Id",
+ "minimum": 0
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/WalletTotalCredits"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/credit-transactions": {
+ "post": {
+ "tags": [
+ "credit-transactions"
+ ],
+ "summary": "Top up credits for specific wallet",
+ "operationId": "create_credit_transaction_v1_credit_transactions_post",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreditTransactionCreateBody"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreditTransactionCreated"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/services/{service_key}/{service_version}/pricing-plan": {
+ "get": {
+ "tags": [
+ "pricing-plans"
+ ],
+ "summary": "Get Service Default Pricing Plan",
+ "description": "Returns a default pricing plan with pricing details for a specified service",
+ "operationId": "get_service_default_pricing_plan",
+ "parameters": [
+ {
+ "name": "service_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$",
+ "title": "Service Key"
+ }
+ },
+ {
+ "name": "service_version",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$",
+ "title": "Service Version"
+ }
+ },
+ {
+ "name": "product_name",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Product Name"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PricingPlanGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/pricing-plans/{pricing_plan_id}/pricing-units/{pricing_unit_id}": {
+ "get": {
+ "tags": [
+ "pricing-plans"
+ ],
+ "summary": "Get Pricing Plan Unit",
+ "description": "Returns a list of service pricing plans with pricing details for a specified service",
+ "operationId": "list_service_pricing_plans",
+ "parameters": [
+ {
+ "name": "pricing_plan_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricing Plan Id",
+ "minimum": 0
+ }
+ },
+ {
+ "name": "pricing_unit_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricing Unit Id",
+ "minimum": 0
+ }
+ },
+ {
+ "name": "product_name",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Product Name"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PricingUnitGet"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "CreditTransactionCreateBody": {
+ "properties": {
+ "product_name": {
+ "type": "string",
+ "title": "Product Name"
+ },
+ "wallet_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Wallet Id",
+ "minimum": 0
+ },
+ "wallet_name": {
+ "type": "string",
+ "title": "Wallet Name"
+ },
+ "user_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "User Id",
+ "minimum": 0
+ },
+ "user_email": {
+ "type": "string",
+ "title": "User Email"
+ },
+ "osparc_credits": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "title": "Osparc Credits"
+ },
+ "payment_transaction_id": {
+ "type": "string",
+ "title": "Payment Transaction Id"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Created At"
+ }
+ },
+ "type": "object",
+ "required": [
+ "product_name",
+ "wallet_id",
+ "wallet_name",
+ "user_id",
+ "user_email",
+ "osparc_credits",
+ "payment_transaction_id",
+ "created_at"
+ ],
+ "title": "CreditTransactionCreateBody"
+ },
+ "CreditTransactionCreated": {
+ "properties": {
+ "credit_transaction_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Credit Transaction Id",
+ "minimum": 0
+ }
+ },
+ "type": "object",
+ "required": [
+ "credit_transaction_id"
+ ],
+ "title": "CreditTransactionCreated",
+ "description": "Response Create Credit Transaction V1 Credit Transactions Post"
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "detail": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Detail"
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError"
+ },
+ "HardwareInfo": {
+ "properties": {
+ "aws_ec2_instances": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Aws Ec2 Instances"
+ }
+ },
+ "type": "object",
+ "required": [
+ "aws_ec2_instances"
+ ],
+ "title": "HardwareInfo"
+ },
+ "PricingPlanClassification": {
+ "type": "string",
+ "enum": [
+ "TIER"
+ ],
+ "const": "TIER",
+ "title": "PricingPlanClassification"
+ },
+ "PricingPlanGet": {
+ "properties": {
+ "pricing_plan_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricing Plan Id",
+ "minimum": 0
+ },
+ "display_name": {
+ "type": "string",
+ "title": "Display Name"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "classification": {
+ "$ref": "#/components/schemas/PricingPlanClassification"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "title": "Created At"
+ },
+ "pricing_plan_key": {
+ "type": "string",
+ "title": "Pricing Plan Key"
+ },
+ "pricing_units": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/PricingUnitGet"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pricing Units"
+ },
+ "is_active": {
+ "type": "boolean",
+ "title": "Is Active"
+ }
+ },
+ "type": "object",
+ "required": [
+ "pricing_plan_id",
+ "display_name",
+ "description",
+ "classification",
+ "created_at",
+ "pricing_plan_key",
+ "pricing_units",
+ "is_active"
+ ],
+ "title": "PricingPlanGet"
+ },
+ "PricingUnitGet": {
+ "properties": {
+ "pricing_unit_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Pricing Unit Id",
+ "minimum": 0
+ },
+ "unit_name": {
+ "type": "string",
+ "title": "Unit Name"
+ },
+ "unit_extra_info": {
+ "$ref": "#/components/schemas/UnitExtraInfo"
+ },
+ "current_cost_per_unit": {
+ "type": "number",
+ "title": "Current Cost Per Unit"
+ },
+ "current_cost_per_unit_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Current Cost Per Unit Id",
+ "minimum": 0
+ },
+ "default": {
+ "type": "boolean",
+ "title": "Default"
+ },
+ "specific_info": {
+ "$ref": "#/components/schemas/HardwareInfo"
+ }
+ },
+ "type": "object",
+ "required": [
+ "pricing_unit_id",
+ "unit_name",
+ "unit_extra_info",
+ "current_cost_per_unit",
+ "current_cost_per_unit_id",
+ "default",
+ "specific_info"
+ ],
+ "title": "PricingUnitGet"
+ },
+ "UnitExtraInfo": {
+ "properties": {
+ "CPU": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Cpu"
+ },
+ "RAM": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Ram"
+ },
+ "VRAM": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "Vram"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "CPU",
+ "RAM",
+ "VRAM"
+ ],
+ "title": "UnitExtraInfo",
+ "description": "Custom information that is propagated to the frontend. Defined fields are mandatory."
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Location"
+ },
+ "msg": {
+ "type": "string",
+ "title": "Message"
+ },
+ "type": {
+ "type": "string",
+ "title": "Error Type"
+ }
+ },
+ "type": "object",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "title": "ValidationError"
+ },
+ "WalletTotalCredits": {
+ "properties": {
+ "wallet_id": {
+ "type": "integer",
+ "exclusiveMinimum": true,
+ "title": "Wallet Id",
+ "minimum": 0
+ },
+ "available_osparc_credits": {
+ "type": "number",
+ "title": "Available Osparc Credits"
+ }
+ },
+ "type": "object",
+ "required": [
+ "wallet_id",
+ "available_osparc_credits"
+ ],
+ "title": "WalletTotalCredits"
+ },
+ "_Meta": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "version": {
+ "type": "string",
+ "title": "Version"
+ },
+ "docs_url": {
+ "type": "string",
+ "maxLength": 2083,
+ "minLength": 1,
+ "format": "uri",
+ "title": "Docs Url"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "version",
+ "docs_url"
+ ],
+ "title": "_Meta"
+ }
+ }
+ }
+}
diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml
new file mode 100644
index 00000000000..22f27d960ac
--- /dev/null
+++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml
@@ -0,0 +1,1596 @@
+openapi: 3.1.0
+info:
+ title: simcore-service-storage API
+ description: API definition for simcore-service-storage service
+ contact:
+ name: IT'IS Foundation
+ email: support@simcore.io
+ license:
+ name: MIT
+ url: https://github.com/ITISFoundation/osparc-simcore/blob/master/LICENSE
+ version: 0.5.0
+servers:
+- url: /
+ description: 'Default server: requests directed to serving url'
+- url: http://{host}:{port}/
+ description: 'Development server: can configure any base url'
+ variables:
+ host:
+ default: 127.0.0.1
+ port:
+ default: '8000'
+paths:
+ /v0/locations/{location_id}/datasets:
+ get:
+ tags:
+ - datasets
+ summary: Get datasets metadata
+ description: returns all the top level datasets a user has access to
+ operationId: get_datasets_metadata
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_DatasetMetaData__'
+ /v0/locations/{location_id}/datasets/{dataset_id}/metadata:
+ get:
+ tags:
+ - datasets
+ summary: Get Files Metadata
+ description: returns all the file meta data inside dataset with dataset_id
+ operationId: get_files_metadata_dataset
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: dataset_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Dataset Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ - name: expand_dirs
+ in: query
+ required: false
+ schema:
+ type: boolean
+ description: Automatic directory expansion. This will be replaced by pagination
+ the future
+ default: true
+ title: Expand Dirs
+ description: Automatic directory expansion. This will be replaced by pagination
+ the future
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_FileMetaDataGet__'
+ /v0/locations:
+ get:
+ tags:
+ - locations
+ summary: Get available storage locations
+ description: Returns the list of available storage locations
+ operationId: get_storage_locations
+ parameters:
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/DatasetMetaData'
+ title: Response Get Storage Locations
+ /v0/locations/{location_id}:sync:
+ post:
+ tags:
+ - locations
+ summary: Manually triggers the synchronisation of the file meta data table in
+ the database
+ description: Returns an object containing added, changed and removed paths
+ operationId: synchronise_meta_data_table
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: dry_run
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Dry Run
+ - name: fire_and_forget
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Fire And Forget
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TableSynchronisation_'
+ /v0/locations/{location_id}/files/metadata:
+ get:
+ tags:
+ - files
+ summary: Get datasets metadata
+ description: returns all the file meta data a user has access to (uuid_filter
+ may be used)
+ operationId: get_files_metadata
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: uuid_filter
+ in: query
+ required: false
+ schema:
+ type: string
+ default: ''
+ title: Uuid Filter
+ - name: expand_dirs
+ in: query
+ required: false
+ schema:
+ type: boolean
+ description: Automatic directory expansion. This will be replaced by pagination
+ the future
+ default: true
+ title: Expand Dirs
+ description: Automatic directory expansion. This will be replaced by pagination
+ the future
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_DatasetMetaData__'
+ /v0/locations/{location_id}/files/{file_id}/metadata:
+ get:
+ tags:
+ - files
+ summary: Get File Metadata
+ description: returns the file meta data of file_id if user_id has the rights
+ to
+ operationId: get_file_metadata
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ anyOf:
+ - $ref: '#/components/schemas/FileMetaData'
+ - $ref: '#/components/schemas/Envelope_FileMetaDataGet_'
+ title: Response Get File Metadata
+ /v0/locations/{location_id}/files/{file_id}:
+ get:
+ tags:
+ - files
+ summary: Returns download link for requested file
+ description: creates a download file link if user has the rights to
+ operationId: download_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ - name: link_type
+ in: query
+ required: false
+ schema:
+ $ref: '#/components/schemas/LinkType'
+ default: PRESIGNED
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PresignedLink_'
+ put:
+ tags:
+ - files
+ summary: Returns upload link
+ description: creates one or more upload file links if user has the rights to,
+ expects the client to complete/abort upload
+ operationId: upload_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ - name: file_size
+ in: query
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^\s*(\d*\.?\d+)\s*(\w+)?
+ - type: integer
+ minimum: 0
+ - type: 'null'
+ title: File Size
+ - name: link_type
+ in: query
+ required: false
+ schema:
+ $ref: '#/components/schemas/LinkType'
+ default: PRESIGNED
+ - name: is_directory
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Is Directory
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ anyOf:
+ - $ref: '#/components/schemas/Envelope_FileUploadSchema_'
+ - $ref: '#/components/schemas/Envelope_Url_'
+ title: Response Upload File
+ delete:
+ tags:
+ - files
+ summary: Deletes File
+ description: deletes file if user has the rights to
+ operationId: delete_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/locations/{location_id}/files/{file_id}:abort:
+ post:
+ tags:
+ - files
+ summary: Abort Upload File
+ description: 'aborts an upload if user has the rights to, and reverts
+
+ to the latest version if available, else will delete the file'
+ operationId: abort_upload_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/locations/{location_id}/files/{file_id}:complete:
+ post:
+ tags:
+ - files
+ summary: Complete Upload File
+ description: completes an upload if the user has the rights to
+ operationId: complete_upload_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FileUploadCompletionBody_'
+ responses:
+ '202':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FileUploadCompleteResponse_'
+ /v0/locations/{location_id}/files/{file_id}:complete/futures/{future_id}:
+ post:
+ tags:
+ - files
+ summary: Check for upload completion
+ description: Returns state of upload completion
+ operationId: is_completed_upload_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ - name: future_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Future Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FileUploadCompleteFutureResponse_'
+ /v0/:
+ get:
+ tags:
+ - health
+ summary: health check endpoint
+ description: Current service health
+ operationId: health_check
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_HealthCheck_'
+ /v0/status:
+ get:
+ tags:
+ - health
+ summary: returns the status of the services inside
+ description: returns the status of all the external dependencies
+ operationId: get_status
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_AppStatusCheck_'
+ /v0/files/{file_id}:soft-copy:
+ post:
+ tags:
+ - files
+ summary: copy file as soft link
+ description: creates and returns a soft link
+ operationId: copy_as_soft_link
+ parameters:
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/SoftCopyBody'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FileMetaDataGet'
+ /v0/simcore-s3:access:
+ post:
+ tags:
+ - simcore-s3
+ summary: gets or creates the a temporary access
+ description: returns a set of S3 credentials
+ operationId: get_or_create_temporary_s3_access
+ parameters:
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_S3Settings_'
+ /v0/simcore-s3/folders:
+ post:
+ tags:
+ - simcore-s3
+ summary: copies folders from project
+ description: copies folders from project
+ operationId: copy_folders_from_project
+ parameters:
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FoldersBody'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TaskGet_'
+ /v0/simcore-s3/folders/{folder_id}:
+ delete:
+ tags:
+ - simcore-s3
+ summary: delete folders from project
+ description: removes folders from a project
+ operationId: delete_folders_of_project
+ parameters:
+ - name: folder_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Folder Id
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ - name: node_id
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: Node Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/simcore-s3/files/metadata:search:
+ post:
+ tags:
+ - simcore-s3
+ summary: search for owned files
+ description: search for files starting with `startswith` and/or matching a sha256_checksum
+ in the file_meta_data table
+ operationId: search_files
+ parameters:
+ - name: user_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ - name: startswith
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Startswith
+ - name: sha256_checksum
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^[a-fA-F0-9]{64}$
+ - type: 'null'
+ title: Sha256 Checksum
+ - name: kind
+ in: query
+ required: true
+ schema:
+ enum:
+ - owned
+ const: owned
+ type: string
+ title: Kind
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ maximum: 50
+ minimum: 1
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FileMetaDataGet_'
+ /v0/futures:
+ get:
+ tags:
+ - tasks
+ summary: list current long running tasks
+ description: list current long running tasks
+ operationId: list_tasks
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TaskGet_'
+ /v0/futures/{task_id}:
+ get:
+ tags:
+ - tasks
+ summary: gets the status of the task
+ description: gets the status of the task
+ operationId: get_task_status
+ parameters:
+ - name: task_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Task Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TaskStatus_'
+ delete:
+ tags:
+ - tasks
+ summary: cancels and removes the task
+ description: cancels and removes the task
+ operationId: cancel_and_delete_task
+ parameters:
+ - name: task_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Task Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/futures/{task_id}/result:
+ get:
+ tags:
+ - tasks
+ summary: get result of the task
+ description: get result of the task
+ operationId: get_task_result
+ parameters:
+ - name: task_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Task Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ title: Response Get Task Result
+components:
+ schemas:
+ AppStatusCheck:
+ properties:
+ app_name:
+ type: string
+ title: App Name
+ description: Application name
+ version:
+ type: string
+ title: Version
+ description: Application's version
+ services:
+ type: object
+ title: Services
+ description: Other backend services connected from this service
+ default: {}
+ sessions:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Sessions
+ description: Client sessions info. If single session per app, then is denoted
+ as main
+ default: {}
+ url:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Url
+ description: Link to current resource
+ diagnostics_url:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Diagnostics Url
+ description: Link to diagnostics report sub-resource. This MIGHT take some
+ time to compute
+ type: object
+ required:
+ - app_name
+ - version
+ title: AppStatusCheck
+ DatasetMetaData:
+ properties:
+ dataset_id:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: string
+ pattern: ^N:dataset:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: Dataset Id
+ display_name:
+ type: string
+ title: Display Name
+ additionalProperties: false
+ type: object
+ required:
+ - dataset_id
+ - display_name
+ title: DatasetMetaData
+ Envelope_AppStatusCheck_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/AppStatusCheck'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[AppStatusCheck]
+ Envelope_FileMetaDataGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileMetaDataGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileMetaDataGet]
+ Envelope_FileUploadCompleteFutureResponse_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileUploadCompleteFutureResponse'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileUploadCompleteFutureResponse]
+ Envelope_FileUploadCompleteResponse_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileUploadCompleteResponse'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileUploadCompleteResponse]
+ Envelope_FileUploadCompletionBody_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileUploadCompletionBody'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileUploadCompletionBody]
+ Envelope_FileUploadSchema_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileUploadSchema'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileUploadSchema]
+ Envelope_HealthCheck_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/HealthCheck'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[HealthCheck]
+ Envelope_PresignedLink_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PresignedLink'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[PresignedLink]
+ Envelope_S3Settings_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/S3Settings'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[S3Settings]
+ Envelope_TableSynchronisation_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/TableSynchronisation'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[TableSynchronisation]
+ Envelope_TaskGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/TaskGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[TaskGet]
+ Envelope_TaskStatus_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/TaskStatus'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[TaskStatus]
+ Envelope_Url_:
+ properties:
+ data:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[Url]
+ Envelope_list_DatasetMetaData__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/DatasetMetaData'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[DatasetMetaData]]
+ Envelope_list_FileMetaDataGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/FileMetaDataGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[FileMetaDataGet]]
+ FileMetaData:
+ properties:
+ file_uuid:
+ type: string
+ title: File Uuid
+ description: NOT a unique ID, like (api|uuid)/uuid/file_name or DATCORE
+ folder structure
+ location_id:
+ type: integer
+ title: Location Id
+ description: Storage location
+ project_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Project Name
+ description: optional project name, used by frontend to display path
+ node_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Node Name
+ description: optional node name, used by frontend to display path
+ file_name:
+ type: string
+ title: File Name
+ description: Display name for a file
+ file_id:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ description: THIS IS the unique ID for the file. either (api|project_id)/node_id/file_name.ext
+ for S3 and N:package:UUID for datcore
+ created_at:
+ type: string
+ format: date-time
+ title: Created At
+ last_modified:
+ type: string
+ format: date-time
+ title: Last Modified
+ file_size:
+ anyOf:
+ - type: integer
+ enum:
+ - -1
+ const: -1
+ - type: integer
+ minimum: 0
+ title: File Size
+ description: File size in bytes (-1 means invalid)
+ default: -1
+ entity_tag:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Entity Tag
+ description: Entity tag (or ETag), represents a specific version of the
+ file, None if invalid upload or datcore
+ is_soft_link:
+ type: boolean
+ title: Is Soft Link
+ description: If true, this file is a soft link.i.e. is another entry with
+ the same object_name
+ default: false
+ is_directory:
+ type: boolean
+ title: Is Directory
+ description: if True this is a directory
+ default: false
+ sha256_checksum:
+ anyOf:
+ - type: string
+ pattern: ^[a-fA-F0-9]{64}$
+ - type: 'null'
+ title: Sha256 Checksum
+ upload_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Upload Id
+ upload_expires_at:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Upload Expires At
+ location:
+ type: string
+ title: Location
+ bucket_name:
+ type: string
+ title: Bucket Name
+ object_name:
+ type: string
+ title: Object Name
+ project_id:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: Project Id
+ node_id:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: Node Id
+ user_id:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: User Id
+ type: object
+ required:
+ - file_uuid
+ - location_id
+ - file_name
+ - file_id
+ - created_at
+ - last_modified
+ - sha256_checksum
+ - location
+ - bucket_name
+ - object_name
+ - project_id
+ - node_id
+ - user_id
+ title: FileMetaData
+ FileMetaDataGet:
+ properties:
+ file_uuid:
+ type: string
+ title: File Uuid
+ description: NOT a unique ID, like (api|uuid)/uuid/file_name or DATCORE
+ folder structure
+ location_id:
+ type: integer
+ title: Location Id
+ description: Storage location
+ project_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Project Name
+ description: optional project name, used by frontend to display path
+ node_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Node Name
+ description: optional node name, used by frontend to display path
+ file_name:
+ type: string
+ title: File Name
+ description: Display name for a file
+ file_id:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ description: THIS IS the unique ID for the file. either (api|project_id)/node_id/file_name.ext
+ for S3 and N:package:UUID for datcore
+ created_at:
+ type: string
+ format: date-time
+ title: Created At
+ last_modified:
+ type: string
+ format: date-time
+ title: Last Modified
+ file_size:
+ anyOf:
+ - type: integer
+ enum:
+ - -1
+ const: -1
+ - type: integer
+ minimum: 0
+ title: File Size
+ description: File size in bytes (-1 means invalid)
+ default: -1
+ entity_tag:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Entity Tag
+ description: Entity tag (or ETag), represents a specific version of the
+ file, None if invalid upload or datcore
+ is_soft_link:
+ type: boolean
+ title: Is Soft Link
+ description: If true, this file is a soft link.i.e. is another entry with
+ the same object_name
+ default: false
+ is_directory:
+ type: boolean
+ title: Is Directory
+ description: if True this is a directory
+ default: false
+ sha256_checksum:
+ anyOf:
+ - type: string
+ pattern: ^[a-fA-F0-9]{64}$
+ - type: 'null'
+ title: Sha256 Checksum
+ description: 'SHA256 message digest of the file content. Main purpose: cheap
+ lookup.'
+ type: object
+ required:
+ - file_uuid
+ - location_id
+ - file_name
+ - file_id
+ - created_at
+ - last_modified
+ title: FileMetaDataGet
+ FileUploadCompleteFutureResponse:
+ properties:
+ state:
+ $ref: '#/components/schemas/FileUploadCompleteState'
+ e_tag:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: E Tag
+ type: object
+ required:
+ - state
+ title: FileUploadCompleteFutureResponse
+ FileUploadCompleteLinks:
+ properties:
+ state:
+ type: string
+ minLength: 1
+ format: uri
+ title: State
+ type: object
+ required:
+ - state
+ title: FileUploadCompleteLinks
+ FileUploadCompleteResponse:
+ properties:
+ links:
+ $ref: '#/components/schemas/FileUploadCompleteLinks'
+ type: object
+ required:
+ - links
+ title: FileUploadCompleteResponse
+ FileUploadCompleteState:
+ type: string
+ enum:
+ - ok
+ - nok
+ title: FileUploadCompleteState
+ FileUploadCompletionBody:
+ properties:
+ parts:
+ items:
+ $ref: '#/components/schemas/UploadedPart'
+ type: array
+ title: Parts
+ type: object
+ required:
+ - parts
+ title: FileUploadCompletionBody
+ FileUploadLinks:
+ properties:
+ abort_upload:
+ type: string
+ minLength: 1
+ format: uri
+ title: Abort Upload
+ complete_upload:
+ type: string
+ minLength: 1
+ format: uri
+ title: Complete Upload
+ type: object
+ required:
+ - abort_upload
+ - complete_upload
+ title: FileUploadLinks
+ FileUploadSchema:
+ properties:
+ chunk_size:
+ type: integer
+ minimum: 0
+ title: Chunk Size
+ urls:
+ items:
+ type: string
+ minLength: 1
+ format: uri
+ type: array
+ title: Urls
+ links:
+ $ref: '#/components/schemas/FileUploadLinks'
+ type: object
+ required:
+ - chunk_size
+ - urls
+ - links
+ title: FileUploadSchema
+ FoldersBody:
+ properties:
+ source:
+ type: object
+ title: Source
+ destination:
+ type: object
+ title: Destination
+ nodes_map:
+ additionalProperties:
+ type: string
+ format: uuid
+ type: object
+ title: Nodes Map
+ type: object
+ title: FoldersBody
+ HealthCheck:
+ properties:
+ name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Name
+ status:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Status
+ api_version:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Api Version
+ version:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Version
+ type: object
+ required:
+ - name
+ - status
+ - api_version
+ - version
+ title: HealthCheck
+ LinkType:
+ type: string
+ enum:
+ - PRESIGNED
+ - S3
+ title: LinkType
+ PresignedLink:
+ properties:
+ link:
+ type: string
+ minLength: 1
+ format: uri
+ title: Link
+ type: object
+ required:
+ - link
+ title: PresignedLink
+ S3Settings:
+ properties:
+ S3_ACCESS_KEY:
+ type: string
+ maxLength: 50
+ minLength: 1
+ title: S3 Access Key
+ S3_BUCKET_NAME:
+ type: string
+ maxLength: 50
+ minLength: 1
+ title: S3 Bucket Name
+ S3_ENDPOINT:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: S3 Endpoint
+ description: do not define if using standard AWS
+ S3_REGION:
+ type: string
+ maxLength: 50
+ minLength: 1
+ title: S3 Region
+ S3_SECRET_KEY:
+ type: string
+ maxLength: 50
+ minLength: 1
+ title: S3 Secret Key
+ additionalProperties: false
+ type: object
+ required:
+ - S3_ACCESS_KEY
+ - S3_BUCKET_NAME
+ - S3_REGION
+ - S3_SECRET_KEY
+ title: S3Settings
+ SoftCopyBody:
+ properties:
+ link_id:
+ type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ title: Link Id
+ type: object
+ required:
+ - link_id
+ title: SoftCopyBody
+ TableSynchronisation:
+ properties:
+ dry_run:
+ anyOf:
+ - type: boolean
+ - type: 'null'
+ title: Dry Run
+ fire_and_forget:
+ anyOf:
+ - type: boolean
+ - type: 'null'
+ title: Fire And Forget
+ removed:
+ items:
+ type: string
+ type: array
+ title: Removed
+ type: object
+ required:
+ - removed
+ title: TableSynchronisation
+ TaskGet:
+ properties:
+ task_id:
+ type: string
+ title: Task Id
+ task_name:
+ type: string
+ title: Task Name
+ status_href:
+ type: string
+ title: Status Href
+ result_href:
+ type: string
+ title: Result Href
+ abort_href:
+ type: string
+ title: Abort Href
+ type: object
+ required:
+ - task_id
+ - task_name
+ - status_href
+ - result_href
+ - abort_href
+ title: TaskGet
+ TaskProgress:
+ properties:
+ task_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Task Id
+ message:
+ type: string
+ title: Message
+ default: ''
+ percent:
+ type: number
+ maximum: 1.0
+ minimum: 0.0
+ title: Percent
+ default: 0.0
+ type: object
+ title: TaskProgress
+ description: 'Helps the user to keep track of the progress. Progress is expected
+ to be
+
+ defined as a float bound between 0.0 and 1.0'
+ TaskStatus:
+ properties:
+ task_progress:
+ $ref: '#/components/schemas/TaskProgress'
+ done:
+ type: boolean
+ title: Done
+ started:
+ type: string
+ format: date-time
+ title: Started
+ type: object
+ required:
+ - task_progress
+ - done
+ - started
+ title: TaskStatus
+ UploadedPart:
+ properties:
+ number:
+ type: integer
+ exclusiveMinimum: true
+ title: Number
+ minimum: 0
+ e_tag:
+ type: string
+ title: E Tag
+ type: object
+ required:
+ - number
+ - e_tag
+ title: UploadedPart
+tags:
+- name: datasets
+- name: files
+- name: health
+- name: locations
+- name: tasks
+- name: simcore-s3
diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml
new file mode 100644
index 00000000000..9cca4bafd06
--- /dev/null
+++ b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml
@@ -0,0 +1,14987 @@
+openapi: 3.1.0
+info:
+ title: simcore-service-webserver
+ description: Main service with an interface (http-API & websockets) to the web front-end
+ version: 0.46.0
+servers:
+- url: ''
+ description: webserver
+- url: http://{host}:{port}
+ description: development server
+ variables:
+ host:
+ default: localhost
+ port:
+ default: '8001'
+paths:
+ /v0/auth/request-account:
+ post:
+ tags:
+ - auth
+ summary: Request Product Account
+ operationId: request_product_account
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AccountRequestInfo'
+ required: true
+ responses:
+ '204':
+ description: Successful Response
+ /v0/auth/register/invitations:check:
+ post:
+ tags:
+ - auth
+ summary: Check Registration Invitation
+ description: Check invitation and returns associated email or None
+ operationId: auth_check_registration_invitation
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/InvitationCheck'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_InvitationInfo_'
+ /v0/auth/register:
+ post:
+ tags:
+ - auth
+ summary: Register
+ description: User registration
+ operationId: auth_register
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/RegisterBody'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ /v0/auth/unregister:
+ post:
+ tags:
+ - auth
+ summary: Unregister Account
+ operationId: unregister_account
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UnregisterCheck'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ /v0/auth/verify-phone-number:
+ post:
+ tags:
+ - auth
+ summary: Register Phone
+ description: user tries to verify phone number for 2 Factor Authentication when
+ registering
+ operationId: auth_register_phone
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/RegisterPhoneBody'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_RegisterPhoneNextPage_'
+ /v0/auth/validate-code-register:
+ post:
+ tags:
+ - auth
+ summary: Phone Confirmation
+ description: user enters 2 Factor Authentication code when registering
+ operationId: auth_phone_confirmation
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PhoneConfirmationBody'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ /v0/auth/login:
+ post:
+ tags:
+ - auth
+ summary: Login
+ description: user logs in
+ operationId: auth_login
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LoginBody'
+ required: true
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_LoginNextPage_'
+ '401':
+ description: unauthorized reset due to invalid token code
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ /v0/auth/validate-code-login:
+ post:
+ tags:
+ - auth
+ summary: Login 2Fa
+ description: user enters 2 Factor Authentication code when login in
+ operationId: auth_login_2fa
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LoginTwoFactorAuthBody'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ '401':
+ description: unauthorized reset due to invalid token code
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ /v0/auth/two_factor:resend:
+ post:
+ tags:
+ - auth
+ summary: Resend 2Fa Code
+ description: Resends 2FA either via email or sms
+ operationId: auth_resend_2fa_code
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Resend2faBody'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ '401':
+ description: unauthorized reset due to invalid token code
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ /v0/auth/logout:
+ post:
+ tags:
+ - auth
+ summary: Logout
+ description: user logout
+ operationId: auth_logout
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LogoutBody'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ /v0/auth:check:
+ get:
+ tags:
+ - auth
+ summary: Check Auth
+ description: checks if user is authenticated in the platform
+ operationId: check_authentication
+ responses:
+ '204':
+ description: Successful Response
+ '401':
+ description: unauthorized reset due to invalid token code
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ /v0/auth/reset-password:
+ post:
+ tags:
+ - auth
+ summary: Reset Password
+ description: a non logged-in user requests a password reset
+ operationId: auth_reset_password
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ResetPasswordBody'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ '503':
+ description: Service Unavailable
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ /v0/auth/reset-password/{code}:
+ post:
+ tags:
+ - auth
+ summary: Reset Password Allowed
+ description: changes password using a token code without being logged in
+ operationId: auth_reset_password_allowed
+ parameters:
+ - name: code
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Code
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ResetPasswordConfirmation'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ '401':
+ description: unauthorized reset due to invalid token code
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ /v0/auth/change-password:
+ post:
+ tags:
+ - auth
+ summary: Change Password
+ description: logged in user changes password
+ operationId: auth_change_password
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ChangePasswordBody'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ '401':
+ description: unauthorized user. Login required
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ '409':
+ description: mismatch between new and confirmation passwords
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ '422':
+ description: current password is invalid
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ /v0/auth/confirmation/{code}:
+ get:
+ tags:
+ - auth
+ summary: Email Confirmation
+ description: email link sent to user to confirm an action
+ operationId: auth_confirmation
+ parameters:
+ - name: code
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Code
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Log_'
+ 3XX:
+ description: redirection to specific ui application page
+ /v0/auth/api-keys:
+ get:
+ tags:
+ - auth
+ summary: List Api Keys
+ description: lists display names of API keys by this user
+ operationId: list_api_keys
+ responses:
+ '200':
+ description: returns the display names of API keys
+ content:
+ application/json:
+ schema:
+ items:
+ type: string
+ type: array
+ title: Response 200 List Api Keys
+ '400':
+ description: key name requested is invalid
+ '401':
+ description: requires login to list keys
+ '403':
+ description: not enough permissions to list keys
+ post:
+ tags:
+ - auth
+ summary: Create Api Key
+ description: creates API keys to access public API
+ operationId: create_api_key
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiKeyCreate'
+ required: true
+ responses:
+ '200':
+ description: Authorization granted returning API key
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiKeyGet'
+ '400':
+ description: key name requested is invalid
+ '401':
+ description: requires login to list keys
+ '403':
+ description: not enough permissions to list keys
+ delete:
+ tags:
+ - auth
+ summary: Delete Api Key
+ description: deletes API key by name
+ operationId: delete_api_key
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiKeyCreate'
+ required: true
+ responses:
+ '204':
+ description: api key successfully deleted
+ '401':
+ description: requires login to delete a key
+ '403':
+ description: not enough permissions to delete a key
+ /v0/auth/captcha:
+ get:
+ tags:
+ - auth
+ summary: Request Captcha
+ operationId: request_captcha
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema: {}
+ image/png: {}
+ /v0/groups:
+ get:
+ tags:
+ - groups
+ summary: List Groups
+ description: List all groups (organizations, primary, everyone and products)
+ I belong to
+ operationId: list_groups
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_MyGroupsGet_'
+ post:
+ tags:
+ - groups
+ summary: Create Group
+ description: Creates an organization group
+ operationId: create_group
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/GroupCreate'
+ required: true
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GroupGet_'
+ /v0/groups/{gid}:
+ get:
+ tags:
+ - groups
+ summary: Get Group
+ description: Get an organization group
+ operationId: get_group
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GroupGet_'
+ patch:
+ tags:
+ - groups
+ summary: Update Group
+ description: Updates organization groups
+ operationId: update_group
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/GroupUpdate'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GroupGet_'
+ delete:
+ tags:
+ - groups
+ summary: Delete Group
+ description: Deletes organization groups
+ operationId: delete_group
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/groups/{gid}/users:
+ get:
+ tags:
+ - groups
+ summary: Get All Group Users
+ description: Gets users in organization groups
+ operationId: get_all_group_users
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_GroupUserGet__'
+ post:
+ tags:
+ - groups
+ summary: Add Group User
+ description: Adds a user to an organization group
+ operationId: add_group_user
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/GroupUserAdd'
+ responses:
+ '204':
+ description: Successful Response
+ /v0/groups/{gid}/users/{uid}:
+ get:
+ tags:
+ - groups
+ summary: Get Group User
+ description: Gets specific user in an organization group
+ operationId: get_group_user
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ - name: uid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Uid
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GroupUserGet_'
+ patch:
+ tags:
+ - groups
+ summary: Update Group User
+ description: Updates user (access-rights) to an organization group
+ operationId: update_group_user
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ - name: uid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Uid
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/GroupUserUpdate'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GroupUserGet_'
+ delete:
+ tags:
+ - groups
+ summary: Delete Group User
+ description: Removes a user from an organization group
+ operationId: delete_group_user
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ - name: uid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Uid
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/groups/{gid}/classifiers:
+ get:
+ tags:
+ - groups
+ summary: Get Group Classifiers
+ operationId: get_group_classifiers
+ parameters:
+ - name: gid
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ - name: tree_view
+ in: query
+ required: false
+ schema:
+ enum:
+ - std
+ const: std
+ type: string
+ default: std
+ title: Tree View
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_str__Any__'
+ /v0/groups/sparc/classifiers/scicrunch-resources/{rrid}:
+ get:
+ tags:
+ - groups
+ summary: Get Scicrunch Resource
+ operationId: get_scicrunch_resource
+ parameters:
+ - name: rrid
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Rrid
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ResearchResource_'
+ post:
+ tags:
+ - groups
+ summary: Add Scicrunch Resource
+ operationId: add_scicrunch_resource
+ parameters:
+ - name: rrid
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Rrid
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ResearchResource_'
+ /v0/groups/sparc/classifiers/scicrunch-resources:search:
+ get:
+ tags:
+ - groups
+ summary: Search Scicrunch Resources
+ operationId: search_scicrunch_resources
+ parameters:
+ - name: guess_name
+ in: query
+ required: true
+ schema:
+ type: string
+ title: Guess Name
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ResourceHit__'
+ /v0/tags:
+ get:
+ tags:
+ - tags
+ summary: List Tags
+ operationId: list_tags
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_TagGet__'
+ post:
+ tags:
+ - tags
+ summary: Create Tag
+ operationId: create_tag
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TagCreate'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TagGet_'
+ /v0/tags/{tag_id}:
+ patch:
+ tags:
+ - tags
+ summary: Update Tag
+ operationId: update_tag
+ parameters:
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Tag Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TagUpdate'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TagGet_'
+ delete:
+ tags:
+ - tags
+ summary: Delete Tag
+ operationId: delete_tag
+ parameters:
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Tag Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/tags/{tag_id}/groups:
+ get:
+ tags:
+ - tags
+ - groups
+ summary: List Tag Groups
+ operationId: list_tag_groups
+ parameters:
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Tag Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_TagGroupGet__'
+ /v0/tags/{tag_id}/groups/{group_id}:
+ post:
+ tags:
+ - tags
+ - groups
+ summary: Create Tag Group
+ operationId: create_tag_group
+ parameters:
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Tag Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TagGroupCreate'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TagGet_'
+ put:
+ tags:
+ - tags
+ - groups
+ summary: Replace Tag Groups
+ operationId: replace_tag_groups
+ parameters:
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Tag Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TagGroupCreate'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_TagGroupGet__'
+ delete:
+ tags:
+ - tags
+ - groups
+ summary: Delete Tag Group
+ operationId: delete_tag_group
+ parameters:
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Tag Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/credits-price:
+ get:
+ tags:
+ - products
+ summary: Get Current Product Price
+ operationId: get_current_product_price
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GetCreditPrice_'
+ /v0/products/{product_name}:
+ get:
+ tags:
+ - products
+ - po
+ summary: Get Product
+ operationId: get_product
+ parameters:
+ - name: product_name
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ minLength: 1
+ maxLength: 100
+ - enum:
+ - current
+ const: current
+ type: string
+ title: Product Name
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GetProduct_'
+ /v0/products/{product_name}/templates/{template_id}:
+ put:
+ tags:
+ - products
+ - po
+ summary: Update Product Template
+ operationId: update_product_template
+ parameters:
+ - name: product_name
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ minLength: 1
+ maxLength: 100
+ - enum:
+ - current
+ const: current
+ type: string
+ title: Product Name
+ - name: template_id
+ in: path
+ required: true
+ schema:
+ type: string
+ minLength: 1
+ maxLength: 100
+ title: Template Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UpdateProductTemplate'
+ responses:
+ '204':
+ description: Successful Response
+ /v0/invitation:generate:
+ post:
+ tags:
+ - products
+ - po
+ summary: Generate Invitation
+ operationId: generate_invitation
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/GenerateInvitation'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_InvitationGenerated_'
+ /v0/me:
+ get:
+ tags:
+ - user
+ summary: Get My Profile
+ operationId: get_my_profile
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProfileGet_'
+ put:
+ tags:
+ - user
+ summary: Update My Profile
+ operationId: update_my_profile
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdate'
+ required: true
+ responses:
+ '204':
+ description: Successful Response
+ /v0/me/preferences/{preference_id}:
+ patch:
+ tags:
+ - user
+ summary: Set Frontend Preference
+ operationId: set_frontend_preference
+ parameters:
+ - name: preference_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Preference Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PatchRequestBody'
+ responses:
+ '204':
+ description: Successful Response
+ /v0/me/tokens:
+ get:
+ tags:
+ - user
+ summary: List Tokens
+ operationId: list_tokens
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ThirdPartyToken__'
+ post:
+ tags:
+ - user
+ summary: Create Token
+ operationId: create_token
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TokenCreate'
+ required: true
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ThirdPartyToken_'
+ /v0/me/tokens/{service}:
+ get:
+ tags:
+ - user
+ summary: Get Token
+ operationId: get_token
+ parameters:
+ - name: service
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Service
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ThirdPartyToken_'
+ delete:
+ tags:
+ - user
+ summary: Delete Token
+ operationId: delete_token
+ parameters:
+ - name: service
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Service
+ responses:
+ '204':
+ description: Successful Response
+ /v0/me/notifications:
+ get:
+ tags:
+ - user
+ summary: List User Notifications
+ operationId: list_user_notifications
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_UserNotification__'
+ post:
+ tags:
+ - user
+ summary: Create User Notification
+ operationId: create_user_notification
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserNotificationCreate'
+ required: true
+ responses:
+ '204':
+ description: Successful Response
+ /v0/me/notifications/{notification_id}:
+ patch:
+ tags:
+ - user
+ summary: Mark Notification As Read
+ operationId: mark_notification_as_read
+ parameters:
+ - name: notification_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Notification Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserNotificationPatch'
+ responses:
+ '204':
+ description: Successful Response
+ /v0/me/permissions:
+ get:
+ tags:
+ - user
+ summary: List User Permissions
+ operationId: list_user_permissions
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_PermissionGet__'
+ /v0/users:search:
+ get:
+ tags:
+ - user
+ - po
+ summary: Search Users
+ operationId: search_users
+ parameters:
+ - name: email
+ in: query
+ required: true
+ schema:
+ type: string
+ minLength: 3
+ maxLength: 200
+ title: Email
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_UserProfile__'
+ /v0/users:pre-register:
+ post:
+ tags:
+ - user
+ - po
+ summary: Pre Register User
+ operationId: pre_register_user
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PreUserProfile'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_UserProfile_'
+ /v0/wallets:
+ get:
+ tags:
+ - wallets
+ summary: List Wallets
+ operationId: list_wallets
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_WalletGetWithAvailableCredits__'
+ post:
+ tags:
+ - wallets
+ summary: Create Wallet
+ operationId: create_wallet
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CreateWalletBodyParams'
+ required: true
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletGet_'
+ /v0/wallets/default:
+ get:
+ tags:
+ - wallets
+ summary: Get Default Wallet
+ operationId: get_default_wallet
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletGetWithAvailableCredits_'
+ /v0/wallets/{wallet_id}:
+ get:
+ tags:
+ - wallets
+ summary: Get Wallet
+ operationId: get_wallet
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletGetWithAvailableCredits_'
+ put:
+ tags:
+ - wallets
+ summary: Update Wallet
+ operationId: update_wallet
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PutWalletBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletGet_'
+ /v0/wallets/{wallet_id}/payments:
+ post:
+ tags:
+ - wallets
+ summary: Create Payment
+ description: Creates payment to wallet `wallet_id`
+ operationId: create_payment
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CreateWalletPayment'
+ responses:
+ '202':
+ description: Payment initialized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletPaymentInitiated_'
+ /v0/wallets/-/payments:
+ get:
+ tags:
+ - wallets
+ summary: List All Payments
+ description: Lists all user payments to his/her wallets (only the ones he/she
+ created)
+ operationId: list_all_payments
+ parameters:
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 1
+ exclusiveMaximum: true
+ default: 20
+ title: Limit
+ maximum: 50
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Page_PaymentTransaction_'
+ /v0/wallets/{wallet_id}/payments/{payment_id}/invoice-link:
+ get:
+ tags:
+ - wallets
+ summary: Get Payment Invoice Link
+ operationId: get_payment_invoice_link
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: payment_id
+ in: path
+ required: true
+ schema:
+ type: string
+ minLength: 1
+ maxLength: 100
+ title: Payment Id
+ responses:
+ '302':
+ description: redirection to invoice download link
+ content:
+ application/json:
+ schema: {}
+ /v0/wallets/{wallet_id}/payments/{payment_id}:cancel:
+ post:
+ tags:
+ - wallets
+ summary: Cancel Payment
+ operationId: cancel_payment
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: payment_id
+ in: path
+ required: true
+ schema:
+ type: string
+ minLength: 1
+ maxLength: 100
+ title: Payment Id
+ responses:
+ '204':
+ description: Successfully cancelled
+ /v0/wallets/{wallet_id}/payments-methods:init:
+ post:
+ tags:
+ - wallets
+ summary: Init Creation Of Payment Method
+ operationId: init_creation_of_payment_method
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ responses:
+ '202':
+ description: Successfully initialized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PaymentMethodInitiated_'
+ /v0/wallets/{wallet_id}/payments-methods/{payment_method_id}:cancel:
+ post:
+ tags:
+ - wallets
+ summary: Cancel Creation Of Payment Method
+ operationId: cancel_creation_of_payment_method
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: payment_method_id
+ in: path
+ required: true
+ schema:
+ type: string
+ minLength: 1
+ maxLength: 100
+ title: Payment Method Id
+ responses:
+ '204':
+ description: Successfully cancelled
+ /v0/wallets/{wallet_id}/payments-methods:
+ get:
+ tags:
+ - wallets
+ summary: List Payments Methods
+ description: Lists all payments method associated to `wallet_id`
+ operationId: list_payments_methods
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_PaymentMethodGet__'
+ /v0/wallets/{wallet_id}/payments-methods/{payment_method_id}:
+ get:
+ tags:
+ - wallets
+ summary: Get Payment Method
+ operationId: get_payment_method
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: payment_method_id
+ in: path
+ required: true
+ schema:
+ type: string
+ minLength: 1
+ maxLength: 100
+ title: Payment Method Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PaymentMethodGet_'
+ delete:
+ tags:
+ - wallets
+ summary: Delete Payment Method
+ operationId: delete_payment_method
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: payment_method_id
+ in: path
+ required: true
+ schema:
+ type: string
+ minLength: 1
+ maxLength: 100
+ title: Payment Method Id
+ responses:
+ '204':
+ description: Successfully deleted
+ /v0/wallets/{wallet_id}/payments-methods/{payment_method_id}:pay:
+ post:
+ tags:
+ - wallets
+ summary: Pay With Payment Method
+ operationId: pay_with_payment_method
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: payment_method_id
+ in: path
+ required: true
+ schema:
+ type: string
+ minLength: 1
+ maxLength: 100
+ title: Payment Method Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CreateWalletPayment'
+ responses:
+ '202':
+ description: Pay with payment-method
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletPaymentInitiated_'
+ /v0/wallets/{wallet_id}/auto-recharge:
+ get:
+ tags:
+ - wallets
+ summary: Get Wallet Autorecharge
+ operationId: get_wallet_autorecharge
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GetWalletAutoRecharge_'
+ put:
+ tags:
+ - wallets
+ summary: Replace Wallet Autorecharge
+ operationId: replace_wallet_autorecharge
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ReplaceWalletAutoRecharge'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GetWalletAutoRecharge_'
+ /v0/wallets/{wallet_id}/groups/{group_id}:
+ post:
+ tags:
+ - wallets
+ - groups
+ summary: Create Wallet Group
+ operationId: create_wallet_group
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_WalletsGroupsBodyParams'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletGroupGet_'
+ put:
+ tags:
+ - wallets
+ - groups
+ summary: Update Wallet Group
+ operationId: update_wallet_group
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_WalletsGroupsBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletGroupGet_'
+ delete:
+ tags:
+ - wallets
+ - groups
+ summary: Delete Wallet Group
+ operationId: delete_wallet_group
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/wallets/{wallet_id}/groups:
+ get:
+ tags:
+ - wallets
+ - groups
+ summary: List Wallet Groups
+ operationId: list_wallet_groups
+ parameters:
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_WalletGroupGet__'
+ /v0/activity/status:
+ get:
+ tags:
+ - tasks
+ summary: Get Activity Status
+ operationId: get_activity_status
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_UUID__Activity__'
+ /v0/announcements:
+ get:
+ tags:
+ - announcements
+ summary: List Announcements
+ operationId: list_announcements
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_Announcement__'
+ /v0/catalog/services/-/latest:
+ get:
+ tags:
+ - catalog
+ summary: List Services Latest
+ operationId: list_services_latest
+ parameters:
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 1
+ exclusiveMaximum: true
+ default: 20
+ title: Limit
+ maximum: 50
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Page_CatalogServiceGet_'
+ /v0/catalog/services/{service_key}/{service_version}:
+ get:
+ tags:
+ - catalog
+ summary: Get Service
+ operationId: get_service
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_CatalogServiceGet_'
+ patch:
+ tags:
+ - catalog
+ summary: Update Service
+ operationId: update_service
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CatalogServiceUpdate'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_CatalogServiceGet_'
+ /v0/catalog/services/{service_key}/{service_version}/inputs:
+ get:
+ tags:
+ - catalog
+ summary: List Service Inputs
+ operationId: list_service_inputs
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ServiceInputGet__'
+ /v0/catalog/services/{service_key}/{service_version}/inputs/{input_key}:
+ get:
+ tags:
+ - catalog
+ summary: Get Service Input
+ operationId: get_service_input
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ - name: input_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ title: Input Key
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ServiceInputGet_'
+ /v0/catalog/services/{service_key}/{service_version}/inputs:match:
+ get:
+ tags:
+ - catalog
+ summary: Get Compatible Inputs Given Source Output
+ operationId: get_compatible_inputs_given_source_output
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ - name: fromService
+ in: query
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Fromservice
+ - name: fromVersion
+ in: query
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Fromversion
+ - name: fromOutput
+ in: query
+ required: true
+ schema:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ title: Fromoutput
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_Annotated_str__StringConstraints___'
+ /v0/catalog/services/{service_key}/{service_version}/outputs:
+ get:
+ tags:
+ - catalog
+ summary: List Service Outputs
+ operationId: list_service_outputs
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_Annotated_str__StringConstraints___'
+ /v0/catalog/services/{service_key}/{service_version}/outputs/{output_key}:
+ get:
+ tags:
+ - catalog
+ summary: Get Service Output
+ operationId: get_service_output
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ - name: output_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ title: Output Key
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ServiceOutputGet__'
+ /v0/catalog/services/{service_key}/{service_version}/outputs:match:
+ get:
+ tags:
+ - catalog
+ summary: Get Compatible Outputs Given Target Input
+ operationId: get_compatible_outputs_given_target_input
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ - name: toService
+ in: query
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Toservice
+ - name: toVersion
+ in: query
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Toversion
+ - name: toInput
+ in: query
+ required: true
+ schema:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ title: Toinput
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_Annotated_str__StringConstraints___'
+ /v0/catalog/services/{service_key}/{service_version}/resources:
+ get:
+ tags:
+ - catalog
+ summary: Get Service Resources
+ operationId: get_service_resources
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_Annotated_str__StringConstraints___ImageResources__'
+ /v0/catalog/services/{service_key}/{service_version}/pricing-plan:
+ get:
+ tags:
+ - catalog
+ - pricing-plans
+ summary: Retrieve default pricing plan for provided service
+ operationId: get_service_pricing_plan
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ServicePricingPlanGet_'
+ /v0/catalog/services/{service_key}/{service_version}/tags:
+ get:
+ tags:
+ - catalog
+ - tags
+ summary: List Service Tags
+ operationId: list_service_tags
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_TagGet__'
+ /v0/catalog/services/{service_key}/{service_version}/tags/{tag_id}:add:
+ post:
+ tags:
+ - catalog
+ - tags
+ summary: Add Service Tag
+ operationId: add_service_tag
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Tag Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_CatalogServiceGet_'
+ /v0/catalog/services/{service_key}/{service_version}/tags/{tag_id}:remove:
+ post:
+ tags:
+ - catalog
+ - tags
+ summary: Remove Service Tag
+ operationId: remove_service_tag
+ parameters:
+ - name: service_key
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ - name: service_version
+ in: path
+ required: true
+ schema:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Tag Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_CatalogServiceGet_'
+ /v0/clusters:
+ get:
+ tags:
+ - clusters
+ summary: List Clusters
+ operationId: list_clusters
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ClusterGet__'
+ post:
+ tags:
+ - clusters
+ summary: Create Cluster
+ operationId: create_cluster
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterCreate'
+ required: true
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ClusterGet_'
+ /v0/clusters:ping:
+ post:
+ tags:
+ - clusters
+ summary: Ping Cluster
+ description: Test connectivity with cluster
+ operationId: ping_cluster
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterPing'
+ required: true
+ responses:
+ '204':
+ description: Successful Response
+ /v0/clusters/{cluster_id}:
+ get:
+ tags:
+ - clusters
+ summary: Get Cluster
+ operationId: get_cluster
+ parameters:
+ - name: cluster_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ minimum: 0
+ title: Cluster Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ClusterGet_'
+ patch:
+ tags:
+ - clusters
+ summary: Update Cluster
+ operationId: update_cluster
+ parameters:
+ - name: cluster_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ minimum: 0
+ title: Cluster Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterPatch'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ClusterGet_'
+ delete:
+ tags:
+ - clusters
+ summary: Delete Cluster
+ operationId: delete_cluster
+ parameters:
+ - name: cluster_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ minimum: 0
+ title: Cluster Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/clusters/{cluster_id}/details:
+ get:
+ tags:
+ - clusters
+ summary: Get Cluster Details
+ operationId: get_cluster_details
+ parameters:
+ - name: cluster_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ minimum: 0
+ title: Cluster Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ClusterDetails_'
+ /v0/clusters/{cluster_id}:ping:
+ post:
+ tags:
+ - clusters
+ summary: Ping Cluster Cluster Id
+ description: Tests connectivity with cluster
+ operationId: ping_cluster_cluster_id
+ parameters:
+ - name: cluster_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ minimum: 0
+ title: Cluster Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/computations/{project_id}:
+ get:
+ tags:
+ - computations
+ - projects
+ summary: Get Computation
+ operationId: get_computation
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ComputationTaskGet_'
+ /v0/computations/{project_id}:start:
+ post:
+ tags:
+ - computations
+ - projects
+ summary: Start Computation
+ operationId: start_computation
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ComputationStart'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope__ComputationStarted_'
+ '402':
+ description: Insufficient credits to run computation
+ '404':
+ description: Project/wallet/pricing details were not found
+ '406':
+ description: Cluster not found
+ '409':
+ description: Project already started
+ '422':
+ description: Configuration error
+ '503':
+ description: Service not available
+ /v0/computations/{project_id}:stop:
+ post:
+ tags:
+ - computations
+ - projects
+ summary: Stop Computation
+ operationId: stop_computation
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}:xport:
+ post:
+ tags:
+ - projects
+ - exporter
+ summary: Export Project
+ description: creates an archive of the project and downloads it
+ operationId: export_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ /v0/folders:
+ post:
+ tags:
+ - folders
+ summary: Create Folder
+ operationId: create_folder
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FolderCreateBodyParams'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FolderGet_'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ get:
+ tags:
+ - folders
+ summary: List Folders
+ operationId: list_folders
+ parameters:
+ - name: filters
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ - type: 'null'
+ title: Filters
+ - name: order_by
+ in: query
+ required: false
+ schema:
+ type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ default: '{"field":"modified","direction":"desc"}'
+ title: Order By
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 0
+ title: Offset
+ - name: folder_id
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Folder Id
+ - name: workspace_id
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Workspace Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_FolderGet__'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ /v0/folders:search:
+ get:
+ tags:
+ - folders
+ summary: List Folders Full Search
+ operationId: list_folders_full_search
+ parameters:
+ - name: filters
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ - type: 'null'
+ title: Filters
+ - name: order_by
+ in: query
+ required: false
+ schema:
+ type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ default: '{"field":"modified","direction":"desc"}'
+ title: Order By
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 0
+ title: Offset
+ - name: text
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Text
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_FolderGet__'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ /v0/folders/{folder_id}:
+ get:
+ tags:
+ - folders
+ summary: Get Folder
+ operationId: get_folder
+ parameters:
+ - name: folder_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Folder Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FolderGet_'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ put:
+ tags:
+ - folders
+ summary: Replace Folder
+ operationId: replace_folder
+ parameters:
+ - name: folder_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Folder Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FolderReplaceBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FolderGet_'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ delete:
+ tags:
+ - folders
+ summary: Delete Folder
+ operationId: delete_folder
+ parameters:
+ - name: folder_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Folder Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ /v0/tasks:
+ get:
+ tags:
+ - long-running-tasks
+ summary: List Tasks
+ operationId: list_tasks
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_TaskGet__'
+ /v0/tasks/{task_id}:
+ get:
+ tags:
+ - long-running-tasks
+ summary: Get Task Status
+ operationId: get_task_status
+ parameters:
+ - name: task_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Task Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TaskStatus_'
+ delete:
+ tags:
+ - long-running-tasks
+ summary: Cancel And Delete Task
+ operationId: cancel_and_delete_task
+ parameters:
+ - name: task_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Task Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/tasks/{task_id}/result:
+ get:
+ tags:
+ - long-running-tasks
+ summary: Get Task Result
+ operationId: get_task_result
+ parameters:
+ - name: task_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Task Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema: {}
+ /v0/projects/{project_uuid}/checkpoint/{ref_id}/iterations:
+ get:
+ tags:
+ - projects
+ - metamodeling
+ summary: List Project Iterations
+ operationId: list_project_iterations
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: ref_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Ref Id
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 1
+ exclusiveMaximum: true
+ default: 20
+ title: Limit
+ maximum: 50
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Page_ProjectIterationItem_'
+ /v0/projects/{project_uuid}/checkpoint/{ref_id}/iterations/-/results:
+ get:
+ tags:
+ - projects
+ - metamodeling
+ summary: List Project Iterations Results
+ operationId: list_project_iterations_results
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: ref_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Ref Id
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 1
+ exclusiveMaximum: true
+ default: 20
+ title: Limit
+ maximum: 50
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Page_ProjectIterationResultItem_'
+ /v0/services:
+ get:
+ tags:
+ - nih-sparc
+ summary: List Latest Services
+ description: Returns a list latest version of services
+ operationId: list_latest_services
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ServiceGet__'
+ /v0/viewers:
+ get:
+ tags:
+ - nih-sparc
+ summary: List Viewers
+ description: 'Lists all publically available viewers
+
+
+ Notice that this might contain multiple services for the same filetype
+
+
+ If file_type is provided, then it filters viewer for that filetype'
+ operationId: list_viewers
+ parameters:
+ - name: file_type
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: File Type
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_Viewer__'
+ /v0/viewers/default:
+ get:
+ tags:
+ - nih-sparc
+ summary: List Default Viewers
+ description: 'Lists the default viewer for each supported filetype
+
+
+ This was interfaced as a subcollection of viewers because it is a very common
+ use-case
+
+
+ Only publicaly available viewers
+
+
+ If file_type is provided, then it filters viewer for that filetype'
+ operationId: list_default_viewers
+ parameters:
+ - name: file_type
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: File Type
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_Viewer__'
+ /view:
+ get:
+ tags:
+ - nih-sparc
+ summary: Get Redirection To Viewer
+ description: Opens a viewer in osparc for data in the NIH-sparc portal
+ operationId: get_redirection_to_viewer
+ parameters:
+ - name: file_type
+ in: query
+ required: true
+ schema:
+ type: string
+ title: File Type
+ - name: viewer_key
+ in: query
+ required: true
+ schema:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Viewer Key
+ - name: file_size
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: File Size
+ minimum: 0
+ - name: download_link
+ in: query
+ required: true
+ schema:
+ type: string
+ format: uri
+ minLength: 1
+ maxLength: 2083
+ title: Download Link
+ - name: file_name
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ default: unknown
+ title: File Name
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ServiceKeyVersion'
+ responses:
+ '302':
+ description: Opens osparc and starts viewer for selected data
+ /study/{id}:
+ get:
+ tags:
+ - nih-sparc
+ summary: Get Redirection To Study Page
+ description: Opens a study published in osparc
+ operationId: get_redirection_to_study_page
+ parameters:
+ - name: id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Id
+ responses:
+ '302':
+ description: Opens osparc and opens a copy of publised study
+ /v0/projects:
+ post:
+ tags:
+ - projects
+ summary: Creates a new project or copies an existing one
+ operationId: create_project
+ parameters:
+ - name: x_simcore_user_agent
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ default: undefined
+ title: X Simcore User Agent
+ - name: x_simcore_parent_project_uuid
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: X Simcore Parent Project Uuid
+ - name: x_simcore_parent_node_id
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: X Simcore Parent Node Id
+ - name: from_study
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: From Study
+ - name: as_template
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: As Template
+ - name: copy_data
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: true
+ title: Copy Data
+ - name: hidden
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Hidden
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectCreateNew'
+ - $ref: '#/components/schemas/ProjectCopyOverride'
+ title: ' Body'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TaskGet_'
+ get:
+ tags:
+ - projects
+ summary: List Projects
+ operationId: list_projects
+ parameters:
+ - name: type
+ in: query
+ required: false
+ schema:
+ $ref: '#/components/schemas/ProjectTypeAPI'
+ default: all
+ - name: show_hidden
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Show Hidden
+ - name: search
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Search
+ - name: folder_id
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Folder Id
+ - name: workspace_id
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Workspace Id
+ - name: filters
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ - type: 'null'
+ title: Filters
+ - name: order_by
+ in: query
+ required: false
+ schema:
+ type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ default: '{"field":"last_change_date","direction":"desc"}'
+ title: Order By
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Page_ProjectListItem_'
+ /v0/projects/active:
+ get:
+ tags:
+ - projects
+ summary: Get Active Project
+ operationId: get_active_project
+ parameters:
+ - name: client_session_id
+ in: query
+ required: true
+ schema:
+ type: string
+ title: Client Session Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectGet_'
+ /v0/projects/{project_id}:
+ get:
+ tags:
+ - projects
+ summary: Get Project
+ operationId: get_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectGet_'
+ patch:
+ tags:
+ - projects
+ summary: Patch Project
+ operationId: patch_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProjectPatch'
+ responses:
+ '204':
+ description: Successful Response
+ delete:
+ tags:
+ - projects
+ summary: Delete Project
+ operationId: delete_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}:clone:
+ post:
+ tags:
+ - projects
+ summary: Clone Project
+ operationId: clone_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TaskGet_'
+ /v0/projects:search:
+ get:
+ tags:
+ - projects
+ summary: List Projects Full Search
+ operationId: list_projects_full_search
+ parameters:
+ - name: order_by
+ in: query
+ required: false
+ schema:
+ type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ default: '{"field":"last_change_date","direction":"desc"}'
+ title: Order By
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 0
+ title: Offset
+ - name: text
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Text
+ - name: tag_ids
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Tag Ids
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Page_ProjectListItem_'
+ /v0/projects/{project_id}/inactivity:
+ get:
+ tags:
+ - projects
+ summary: Get Project Inactivity
+ operationId: get_project_inactivity
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_GetProjectInactivityResponse_'
+ /v0/projects/{project_uuid}/comments:
+ post:
+ tags:
+ - projects
+ - comments
+ summary: Create a new comment for a specific project. The request body should
+ contain the comment contents and user information.
+ operationId: create_project_comment
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_ProjectCommentsBodyParams'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_Literal__comment_id____Annotated_int__Gt___'
+ get:
+ tags:
+ - projects
+ - comments
+ summary: Retrieve all comments for a specific project.
+ operationId: list_project_comments
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ProjectsCommentsAPI__'
+ /v0/projects/{project_uuid}/comments/{comment_id}:
+ put:
+ tags:
+ - projects
+ - comments
+ summary: Update the contents of a specific comment for a project. The request
+ body should contain the updated comment contents.
+ operationId: update_project_comment
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: comment_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Comment Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_ProjectCommentsBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectsCommentsAPI_'
+ delete:
+ tags:
+ - projects
+ - comments
+ summary: Delete a specific comment associated with a project.
+ operationId: delete_project_comment
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: comment_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Comment Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ get:
+ tags:
+ - projects
+ - comments
+ summary: Retrieve a specific comment by its ID within a project.
+ operationId: get_project_comment
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: comment_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Comment Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectsCommentsAPI_'
+ /v0/projects/{project_id}/folders/{folder_id}:
+ put:
+ tags:
+ - projects
+ - folders
+ summary: Move project to the folder
+ operationId: replace_project_folder
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: folder_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Folder Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}/groups/{group_id}:
+ post:
+ tags:
+ - projects
+ - groups
+ summary: Create Project Group
+ operationId: create_project_group
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_ProjectsGroupsBodyParams'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectGroupGet_'
+ put:
+ tags:
+ - projects
+ - groups
+ summary: Replace Project Group
+ operationId: replace_project_group
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_ProjectsGroupsBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectGroupGet_'
+ delete:
+ tags:
+ - projects
+ - groups
+ summary: Delete Project Group
+ operationId: delete_project_group
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}/groups:
+ get:
+ tags:
+ - projects
+ - groups
+ summary: List Project Groups
+ operationId: list_project_groups
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ProjectGroupGet__'
+ /v0/projects/{project_id}/metadata:
+ get:
+ tags:
+ - projects
+ - metadata
+ summary: Get Project Metadata
+ operationId: get_project_metadata
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectMetadataGet_'
+ patch:
+ tags:
+ - projects
+ - metadata
+ summary: Update Project Metadata
+ operationId: update_project_metadata
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProjectMetadataUpdate'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectMetadataGet_'
+ /v0/projects/{project_id}/nodes:
+ post:
+ tags:
+ - projects
+ - nodes
+ summary: Create Node
+ operationId: create_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NodeCreate'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_NodeCreated_'
+ /v0/projects/{project_id}/nodes/{node_id}:
+ get:
+ tags:
+ - projects
+ - nodes
+ summary: Get Node
+ operationId: get_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Union_NodeGetIdle__NodeGetUnknown__RunningDynamicServiceDetails__NodeGet__'
+ delete:
+ tags:
+ - projects
+ - nodes
+ summary: Delete Node
+ operationId: delete_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ responses:
+ '204':
+ description: Successful Response
+ patch:
+ tags:
+ - projects
+ - nodes
+ summary: Patch Project Node
+ operationId: patch_project_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NodePatch'
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}/nodes/{node_id}:retrieve:
+ post:
+ tags:
+ - projects
+ - nodes
+ summary: Retrieve Node
+ operationId: retrieve_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NodeRetrieve'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_NodeRetrieved_'
+ /v0/projects/{project_id}/nodes/{node_id}:start:
+ post:
+ tags:
+ - projects
+ - nodes
+ summary: Start Node
+ operationId: start_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}/nodes/{node_id}:stop:
+ post:
+ tags:
+ - projects
+ - nodes
+ summary: Stop Node
+ operationId: stop_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TaskGet_'
+ /v0/projects/{project_id}/nodes/{node_id}:restart:
+ post:
+ tags:
+ - projects
+ - nodes
+ summary: Restart Node
+ description: Note that it has only effect on nodes associated to dynamic services
+ operationId: restart_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}/nodes/{node_id}/outputs:
+ patch:
+ tags:
+ - projects
+ - nodes
+ summary: Update Node Outputs
+ operationId: update_node_outputs
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NodeOutputs'
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}/nodes/{node_id}/resources:
+ get:
+ tags:
+ - projects
+ - nodes
+ summary: Get Node Resources
+ operationId: get_node_resources
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_Annotated_str__StringConstraints___ImageResources__'
+ put:
+ tags:
+ - projects
+ - nodes
+ summary: Replace Node Resources
+ operationId: replace_node_resources
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Node Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ title: ' New'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_Annotated_str__StringConstraints___ImageResources__'
+ /v0/projects/{project_id}/nodes/-/services:access:
+ get:
+ tags:
+ - projects
+ - nodes
+ summary: Check whether provided group has access to the project services
+ operationId: get_project_services_access_for_gid
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: for_gid
+ in: query
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: For Gid
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope__ProjectGroupAccess_'
+ /v0/projects/{project_id}/nodes/-/preview:
+ get:
+ tags:
+ - projects
+ - nodes
+ summary: Lists all previews in the node's project
+ operationId: list_project_nodes_previews
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list__ProjectNodePreview__'
+ /v0/projects/{project_id}/nodes/{node_id}/preview:
+ get:
+ tags:
+ - projects
+ - nodes
+ summary: Gets a give node's preview
+ operationId: get_project_node_preview
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Node Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope__ProjectNodePreview_'
+ '404':
+ description: Node has no preview
+ /v0/projects/{project_id}/nodes/{node_id}/pricing-unit:
+ get:
+ tags:
+ - projects
+ summary: Get currently connected pricing unit to the project node.
+ operationId: get_project_node_pricing_unit
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Node Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Union_PricingUnitGet__NoneType__'
+ /v0/projects/{project_id}/nodes/{node_id}/pricing-plan/{pricing_plan_id}/pricing-unit/{pricing_unit_id}:
+ put:
+ tags:
+ - projects
+ summary: Connect pricing unit to the project node (Project node can have only
+ one pricing unit)
+ operationId: connect_pricing_unit_to_project_node
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: node_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Node Id
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ - name: pricing_unit_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Unit Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}/inputs:
+ get:
+ tags:
+ - projects
+ - ports
+ summary: Get Project Inputs
+ description: New in version *0.10*
+ operationId: get_project_inputs
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_UUID__ProjectInputGet__'
+ patch:
+ tags:
+ - projects
+ - ports
+ summary: Update Project Inputs
+ description: New in version *0.10*
+ operationId: update_project_inputs
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProjectInputUpdate'
+ title: ' Updates'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_UUID__ProjectInputGet__'
+ /v0/projects/{project_id}/outputs:
+ get:
+ tags:
+ - projects
+ - ports
+ summary: Get Project Outputs
+ description: New in version *0.10*
+ operationId: get_project_outputs
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_UUID__ProjectOutputGet__'
+ /v0/projects/{project_id}/metadata/ports:
+ get:
+ tags:
+ - projects
+ - ports
+ summary: List Project Metadata Ports
+ description: New in version *0.12*
+ operationId: list_project_metadata_ports
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ProjectMetadataPortGet__'
+ /v0/projects/{project_id}:open:
+ post:
+ tags:
+ - projects
+ summary: Open Project
+ operationId: open_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: disable_service_auto_start
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Disable Service Auto Start
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: string
+ title: Client Session Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectGet_'
+ '400':
+ description: ValidationError
+ '402':
+ description: WalletNotEnoughCreditsError
+ '403':
+ description: ProjectInvalidRightsError
+ '404':
+ description: ProjectNotFoundError, UserDefaultWalletNotFoundError
+ '409':
+ description: ProjectTooManyProjectOpenedError
+ '422':
+ description: ValidationError
+ '503':
+ description: DirectorServiceError
+ /v0/projects/{project_id}:close:
+ post:
+ tags:
+ - projects
+ summary: Close Project
+ operationId: close_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: string
+ title: Client Session Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}/state:
+ get:
+ tags:
+ - projects
+ summary: Get Project State
+ operationId: get_project_state
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectState_'
+ /v0/projects/{project_uuid}/tags/{tag_id}:add:
+ post:
+ tags:
+ - projects
+ - tags
+ summary: Add Project Tag
+ description: 'Links an existing label with an existing study
+
+
+ NOTE: that the tag is not created here'
+ operationId: add_project_tag
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Tag Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectGet_'
+ /v0/projects/{project_uuid}/tags/{tag_id}:remove:
+ post:
+ tags:
+ - projects
+ - tags
+ summary: Remove Project Tag
+ description: 'Removes an existing link between a label and a study
+
+
+ NOTE: that the tag is not deleted here'
+ operationId: remove_project_tag
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: tag_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Tag Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_ProjectGet_'
+ /v0/projects/{project_id}/wallet:
+ get:
+ tags:
+ - projects
+ summary: Get current connected wallet to the project.
+ operationId: get_project_wallet
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Union_WalletGet__NoneType__'
+ /v0/projects/{project_id}/wallet/{wallet_id}:
+ put:
+ tags:
+ - projects
+ summary: Connect wallet to the project (Project can have only one wallet)
+ operationId: connect_wallet_to_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: wallet_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Wallet Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WalletGet_'
+ /v0/projects/{project_id}/workspaces/{workspace_id}:
+ put:
+ tags:
+ - projects
+ - workspaces
+ summary: Move project to the workspace
+ operationId: replace_project_workspace
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Workspace Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/publications/service-submission:
+ post:
+ tags:
+ - publication
+ summary: Service Submission
+ description: Submits files with new service candidate
+ operationId: service_submission
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ $ref: '#/components/schemas/Body_service_submission'
+ required: true
+ responses:
+ '204':
+ description: Successful Response
+ /v0/services/-/resource-usages:
+ get:
+ tags:
+ - usage
+ summary: Retrieve finished and currently running user services (user and product
+ are taken from context, optionally wallet_id parameter might be provided).
+ operationId: list_resource_usage_services
+ parameters:
+ - name: order_by
+ in: query
+ required: false
+ schema:
+ type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ default: '{"field":"started_at","direction":"desc"}'
+ title: Order By
+ - name: wallet_id
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Wallet Id
+ - name: filters
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ - type: 'null'
+ title: Filters
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_ServiceRunGet__'
+ /v0/services/-/aggregated-usages:
+ get:
+ tags:
+ - usage
+ summary: Used credits based on aggregate by type, currently supported `services`.
+ (user and product are taken from context, optionally wallet_id parameter might
+ be provided).
+ operationId: list_osparc_credits_aggregated_usages
+ parameters:
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 0
+ title: Offset
+ - name: aggregated_by
+ in: query
+ required: true
+ schema:
+ $ref: '#/components/schemas/ServicesAggregatedUsagesType'
+ - name: time_period
+ in: query
+ required: true
+ schema:
+ $ref: '#/components/schemas/ServicesAggregatedUsagesTimePeriod'
+ - name: wallet_id
+ in: query
+ required: true
+ schema:
+ type: integer
+ title: Wallet Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_OsparcCreditsAggregatedByServiceGet__'
+ /v0/services/-/usage-report:
+ get:
+ tags:
+ - usage
+ summary: Redirects to download CSV link. CSV obtains finished and currently
+ running user services (user and product are taken from context, optionally
+ wallet_id parameter might be provided).
+ operationId: export_resource_usage_services
+ parameters:
+ - name: order_by
+ in: query
+ required: false
+ schema:
+ type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ default: '{"field":"started_at","direction":"desc"}'
+ title: Order By
+ - name: wallet_id
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Wallet Id
+ - name: filters
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ - type: 'null'
+ title: Filters
+ responses:
+ '302':
+ description: redirection to download link
+ content:
+ application/json:
+ schema: {}
+ /v0/pricing-plans/{pricing_plan_id}/pricing-units/{pricing_unit_id}:
+ get:
+ tags:
+ - pricing-plans
+ summary: Retrieve detail information about pricing unit
+ operationId: get_pricing_plan_unit
+ parameters:
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ - name: pricing_unit_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Unit Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PricingUnitGet_'
+ /v0/admin/pricing-plans:
+ get:
+ tags:
+ - admin
+ summary: List pricing plans
+ description: To keep the listing lightweight, the pricingUnits field is None.
+ operationId: list_pricing_plans
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_PricingPlanAdminGet__'
+ post:
+ tags:
+ - admin
+ summary: Create pricing plan
+ operationId: create_pricing_plan
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CreatePricingPlanBodyParams'
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PricingPlanAdminGet_'
+ /v0/admin/pricing-plans/{pricing_plan_id}:
+ get:
+ tags:
+ - admin
+ summary: Retrieve detail information about pricing plan
+ operationId: get_pricing_plan
+ parameters:
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PricingPlanAdminGet_'
+ put:
+ tags:
+ - admin
+ summary: Update detail information about pricing plan
+ operationId: update_pricing_plan
+ parameters:
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UpdatePricingPlanBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PricingPlanAdminGet_'
+ /v0/admin/pricing-plans/{pricing_plan_id}/pricing-units/{pricing_unit_id}:
+ get:
+ tags:
+ - admin
+ summary: Retrieve detail information about pricing unit
+ operationId: get_pricing_unit
+ parameters:
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ - name: pricing_unit_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Unit Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PricingUnitAdminGet_'
+ put:
+ tags:
+ - admin
+ summary: Update detail information about pricing plan
+ operationId: update_pricing_unit
+ parameters:
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ - name: pricing_unit_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Unit Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UpdatePricingUnitBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PricingUnitAdminGet_'
+ /v0/admin/pricing-plans/{pricing_plan_id}/pricing-units:
+ post:
+ tags:
+ - admin
+ summary: Create pricing unit
+ operationId: create_pricing_unit
+ parameters:
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CreatePricingUnitBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PricingUnitAdminGet_'
+ /v0/admin/pricing-plans/{pricing_plan_id}/billable-services:
+ get:
+ tags:
+ - admin
+ summary: List services that are connected to the provided pricing plan
+ operationId: list_connected_services_to_pricing_plan
+ parameters:
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_PricingPlanToServiceAdminGet__'
+ post:
+ tags:
+ - admin
+ summary: Connect service with pricing plan
+ operationId: connect_service_to_pricing_plan
+ parameters:
+ - name: pricing_plan_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricing Plan Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ConnectServiceToPricingPlanBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PricingPlanToServiceAdminGet_'
+ /:
+ get:
+ tags:
+ - statics
+ summary: Get Cached Frontend Index
+ operationId: get_cached_frontend_index
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ text/html:
+ schema:
+ type: string
+ /static-frontend-data.json:
+ get:
+ tags:
+ - statics
+ summary: Static Frontend Data
+ description: Generic static info on the product's app
+ operationId: static_frontend_data
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/StaticFrontEndDict'
+ /v0/storage/locations:
+ get:
+ tags:
+ - storage
+ summary: Get available storage locations
+ description: Returns the list of available storage locations
+ operationId: get_storage_locations
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ items:
+ $ref: '#/components/schemas/DatasetMetaData'
+ type: array
+ title: Response Get Storage Locations
+ /v0/storage/locations/{location_id}:sync:
+ post:
+ tags:
+ - storage
+ summary: Manually triggers the synchronisation of the file meta data table in
+ the database
+ description: Returns an object containing added, changed and removed paths
+ operationId: synchronise_meta_data_table
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: dry_run
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Dry Run
+ - name: fire_and_forget
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Fire And Forget
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_TableSynchronisation_'
+ /v0/storage/locations/{location_id}/datasets:
+ get:
+ tags:
+ - storage
+ summary: Get datasets metadata
+ description: returns all the top level datasets a user has access to
+ operationId: get_datasets_metadata
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_DatasetMetaData__'
+ /v0/storage/locations/{location_id}/files/metadata:
+ get:
+ tags:
+ - storage
+ summary: Get datasets metadata
+ description: returns all the file meta data a user has access to (uuid_filter
+ may be used)
+ operationId: get_files_metadata
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: uuid_filter
+ in: query
+ required: false
+ schema:
+ type: string
+ default: ''
+ title: Uuid Filter
+ - name: expand_dirs
+ in: query
+ required: false
+ schema:
+ type: boolean
+ description: Automatic directory expansion. This will be replaced by pagination
+ the future
+ default: true
+ title: Expand Dirs
+ description: Automatic directory expansion. This will be replaced by pagination
+ the future
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_DatasetMetaData__'
+ /v0/storage/locations/{location_id}/datasets/{dataset_id}/metadata:
+ get:
+ tags:
+ - storage
+ summary: Get Files Metadata
+ description: returns all the file meta data inside dataset with dataset_id
+ operationId: get_files_metadata_dataset
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: dataset_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Dataset Id
+ - name: expand_dirs
+ in: query
+ required: false
+ schema:
+ type: boolean
+ description: Automatic directory expansion. This will be replaced by pagination
+ the future
+ default: true
+ title: Expand Dirs
+ description: Automatic directory expansion. This will be replaced by pagination
+ the future
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_FileMetaDataGet__'
+ /v0/storage/locations/{location_id}/files/{file_id}/metadata:
+ get:
+ tags:
+ - storage
+ summary: Get File Metadata
+ description: returns the file meta data of file_id if user_id has the rights
+ to
+ operationId: get_file_metadata
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: File Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ anyOf:
+ - $ref: '#/components/schemas/FileMetaData'
+ - $ref: '#/components/schemas/Envelope_FileMetaDataGet_'
+ title: Response Get File Metadata
+ /v0/storage/locations/{location_id}/files/{file_id}:
+ get:
+ tags:
+ - storage
+ summary: Returns download link for requested file
+ description: creates a download file link if user has the rights to
+ operationId: download_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: File Id
+ - name: link_type
+ in: query
+ required: false
+ schema:
+ $ref: '#/components/schemas/LinkType'
+ default: PRESIGNED
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_PresignedLink_'
+ put:
+ tags:
+ - storage
+ summary: Returns upload link
+ description: creates one or more upload file links if user has the rights to,
+ expects the client to complete/abort upload
+ operationId: upload_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: File Id
+ - name: file_size
+ in: query
+ required: true
+ schema:
+ anyOf:
+ - type: string
+ pattern: ^\s*(\d*\.?\d+)\s*(\w+)?
+ - type: integer
+ minimum: 0
+ - type: 'null'
+ title: File Size
+ - name: link_type
+ in: query
+ required: false
+ schema:
+ $ref: '#/components/schemas/LinkType'
+ default: PRESIGNED
+ - name: is_directory
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Is Directory
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ anyOf:
+ - $ref: '#/components/schemas/Envelope_FileUploadSchema_'
+ - $ref: '#/components/schemas/Envelope_Url_'
+ title: Response Upload File
+ delete:
+ tags:
+ - storage
+ summary: Deletes File
+ description: deletes file if user has the rights to
+ operationId: delete_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: File Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/storage/locations/{location_id}/files/{file_id}:abort:
+ post:
+ tags:
+ - storage
+ summary: Abort Upload File
+ description: 'aborts an upload if user has the rights to, and reverts
+
+ to the latest version if available, else will delete the file'
+ operationId: abort_upload_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: File Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/storage/locations/{location_id}/files/{file_id}:complete:
+ post:
+ tags:
+ - storage
+ summary: Complete Upload File
+ description: completes an upload if the user has the rights to
+ operationId: complete_upload_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: File Id
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FileUploadCompletionBody_'
+ responses:
+ '202':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FileUploadCompleteResponse_'
+ /v0/storage/locations/{location_id}/files/{file_id}:complete/futures/{future_id}:
+ post:
+ tags:
+ - storage
+ summary: Check for upload completion
+ description: Returns state of upload completion
+ operationId: is_completed_upload_file
+ parameters:
+ - name: location_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ title: Location Id
+ - name: file_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: File Id
+ - name: future_id
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Future Id
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_FileUploadCompleteFutureResponse_'
+ /v0/trash:
+ delete:
+ tags:
+ - trash
+ summary: Empty Trash
+ operationId: empty_trash
+ responses:
+ '204':
+ description: Successful Response
+ /v0/projects/{project_id}:trash:
+ post:
+ tags:
+ - trash
+ - projects
+ summary: Trash Project
+ operationId: trash_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ - name: force
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Force
+ responses:
+ '204':
+ description: Successful Response
+ '404':
+ description: Not such a project
+ '409':
+ description: Project is in use and cannot be trashed
+ '503':
+ description: Trash service error
+ /v0/projects/{project_id}:untrash:
+ post:
+ tags:
+ - trash
+ - projects
+ summary: Untrash Project
+ operationId: untrash_project
+ parameters:
+ - name: project_id
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Id
+ responses:
+ '204':
+ description: Successful Response
+ /v0/folders/{folder_id}:trash:
+ post:
+ tags:
+ - trash
+ - folders
+ summary: Trash Folder
+ operationId: trash_folder
+ parameters:
+ - name: folder_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Folder Id
+ minimum: 0
+ - name: force
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Force
+ responses:
+ '204':
+ description: Successful Response
+ '404':
+ description: Not such a folder
+ '409':
+ description: One or more projects in the folder are in use and cannot be
+ trashed
+ '503':
+ description: Trash service error
+ /v0/folders/{folder_id}:untrash:
+ post:
+ tags:
+ - trash
+ - folders
+ summary: Untrash Folder
+ operationId: untrash_folder
+ parameters:
+ - name: folder_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Folder Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/workspaces/{workspace_id}:trash:
+ post:
+ tags:
+ - trash
+ - workspaces
+ summary: Trash Workspace
+ operationId: trash_workspace
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ - name: force
+ in: query
+ required: false
+ schema:
+ type: boolean
+ default: false
+ title: Force
+ responses:
+ '204':
+ description: Successful Response
+ '404':
+ description: Not such a workspace
+ '409':
+ description: One or more projects in the workspace are in use and cannot
+ be trashed
+ '503':
+ description: Trash service error
+ /v0/workspaces/{workspace_id}:untrash:
+ post:
+ tags:
+ - trash
+ - workspaces
+ summary: Untrash Workspace
+ operationId: untrash_workspace
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ /v0/repos/projects:
+ get:
+ tags:
+ - repository
+ summary: List Repos
+ operationId: list_repos
+ parameters:
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 1
+ exclusiveMaximum: true
+ default: 20
+ title: Limit
+ maximum: 50
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Page_RepoApiModel_'
+ /v0/repos/projects/{project_uuid}/checkpoints:
+ get:
+ tags:
+ - repository
+ summary: List Checkpoints
+ operationId: list_checkpoints
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 1
+ exclusiveMaximum: true
+ default: 20
+ title: Limit
+ maximum: 50
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Page_CheckpointApiModel_'
+ post:
+ tags:
+ - repository
+ summary: Create Checkpoint
+ operationId: create_checkpoint
+ parameters:
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CheckpointNew'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_CheckpointApiModel_'
+ /v0/repos/projects/{project_uuid}/checkpoints/{ref_id}:
+ get:
+ tags:
+ - repository
+ summary: Get Checkpoint
+ operationId: get_checkpoint
+ parameters:
+ - name: ref_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: integer
+ - type: string
+ - enum:
+ - HEAD
+ const: HEAD
+ type: string
+ title: Ref Id
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_CheckpointApiModel_'
+ patch:
+ tags:
+ - repository
+ summary: Update Checkpoint
+ description: Update Checkpoint Annotations
+ operationId: update_checkpoint
+ parameters:
+ - name: ref_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: integer
+ - type: string
+ title: Ref Id
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CheckpointAnnotations'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_CheckpointApiModel_'
+ /v0/repos/projects/{project_uuid}/checkpoints/{ref_id}/workbench/view:
+ get:
+ tags:
+ - repository
+ summary: View Project Workbench
+ operationId: view_project_workbench
+ parameters:
+ - name: ref_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: integer
+ - type: string
+ title: Ref Id
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WorkbenchViewApiModel_'
+ /v0/repos/projects/{project_uuid}/checkpoints/{ref_id}:checkout:
+ post:
+ tags:
+ - repository
+ summary: Checkout
+ operationId: checkout
+ parameters:
+ - name: ref_id
+ in: path
+ required: true
+ schema:
+ anyOf:
+ - type: integer
+ - type: string
+ title: Ref Id
+ - name: project_uuid
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ title: Project Uuid
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_CheckpointApiModel_'
+ /v0/workspaces:
+ post:
+ tags:
+ - workspaces
+ summary: Create Workspace
+ operationId: create_workspace
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WorkspaceCreateBodyParams'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WorkspaceGet_'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ get:
+ tags:
+ - workspaces
+ summary: List Workspaces
+ operationId: list_workspaces
+ parameters:
+ - name: order_by
+ in: query
+ required: false
+ schema:
+ type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ default: '{"field":"modified","direction":"desc"}'
+ title: Order By
+ - name: filters
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ contentMediaType: application/json
+ contentSchema: {}
+ - type: 'null'
+ title: Filters
+ - name: limit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 20
+ title: Limit
+ - name: offset
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 0
+ title: Offset
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_WorkspaceGet__'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ /v0/workspaces/{workspace_id}:
+ get:
+ tags:
+ - workspaces
+ summary: Get Workspace
+ operationId: get_workspace
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WorkspaceGet_'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ put:
+ tags:
+ - workspaces
+ summary: Replace Workspace
+ operationId: replace_workspace
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WorkspaceReplaceBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WorkspaceGet_'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ delete:
+ tags:
+ - workspaces
+ summary: Delete Workspace
+ operationId: delete_workspace
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ /v0/workspaces/{workspace_id}/groups/{group_id}:
+ post:
+ tags:
+ - workspaces
+ - groups
+ summary: Create Workspace Group
+ operationId: create_workspace_group
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WorkspacesGroupsBodyParams'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WorkspaceGroupGet_'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ put:
+ tags:
+ - workspaces
+ - groups
+ summary: Replace Workspace Group
+ operationId: replace_workspace_group
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/WorkspacesGroupsBodyParams'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_WorkspaceGroupGet_'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ delete:
+ tags:
+ - workspaces
+ - groups
+ summary: Delete Workspace Group
+ operationId: delete_workspace_group
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ - name: group_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Group Id
+ minimum: 0
+ responses:
+ '204':
+ description: Successful Response
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ /v0/workspaces/{workspace_id}/groups:
+ get:
+ tags:
+ - workspaces
+ - groups
+ summary: List Workspace Groups
+ operationId: list_workspace_groups
+ parameters:
+ - name: workspace_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ exclusiveMinimum: true
+ title: Workspace Id
+ minimum: 0
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_list_WorkspaceGroupGet__'
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Not Found
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Forbidden
+ '409':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Conflict
+ '503':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnvelopedError'
+ description: Service Unavailable
+ /v0/email:test:
+ post:
+ tags:
+ - admin
+ summary: Test Email
+ operationId: test_email
+ parameters:
+ - name: x-simcore-products-name
+ in: header
+ required: false
+ schema:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: X-Simcore-Products-Name
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TestEmail'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_Union_EmailTestFailed__EmailTestPassed__'
+ /v0/:
+ get:
+ tags:
+ - maintenance
+ summary: Healthcheck Readiness Probe
+ description: 'Readiness probe: check if the container is ready to receive traffic'
+ operationId: healthcheck_readiness_probe
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_HealthInfoDict_'
+ /v0/health:
+ get:
+ tags:
+ - maintenance
+ summary: Healthcheck Liveness Probe
+ description: 'Liveness probe: check if the container is alive'
+ operationId: healthcheck_liveness_probe
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_str__Any__'
+ /v0/config:
+ get:
+ tags:
+ - maintenance
+ summary: Front end runtime configuration
+ description: Returns app and products configs
+ operationId: get_config
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_dict_str__Any__'
+ /v0/scheduled_maintenance:
+ get:
+ tags:
+ - maintenance
+ summary: Get Scheduled Maintenance
+ operationId: get_scheduled_maintenance
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_str_'
+ /v0/status:
+ get:
+ tags:
+ - maintenance
+ summary: checks status of self and connected services
+ operationId: get_app_status
+ responses:
+ '200':
+ description: Returns app status check
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_AppStatusCheck_'
+ /v0/status/diagnostics:
+ get:
+ tags:
+ - maintenance
+ summary: Get App Diagnostics
+ operationId: get_app_diagnostics
+ parameters:
+ - name: top_tracemalloc
+ in: query
+ required: false
+ schema:
+ anyOf:
+ - type: integer
+ - type: 'null'
+ title: Top Tracemalloc
+ responses:
+ '200':
+ description: Returns app diagnostics report
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_StatusDiagnosticsGet_'
+ /v0/status/{service_name}:
+ get:
+ tags:
+ - maintenance
+ summary: Get Service Status
+ operationId: get_service_status
+ parameters:
+ - name: service_name
+ in: path
+ required: true
+ schema:
+ type: string
+ title: Service Name
+ responses:
+ '200':
+ description: Returns app status check
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Envelope_AppStatusCheck_'
+components:
+ schemas:
+ AccessEnum:
+ type: string
+ enum:
+ - ReadAndWrite
+ - Invisible
+ - ReadOnly
+ title: AccessEnum
+ AccessRights:
+ properties:
+ read:
+ type: boolean
+ title: Read
+ description: has read access
+ write:
+ type: boolean
+ title: Write
+ description: has write access
+ delete:
+ type: boolean
+ title: Delete
+ description: has deletion rights
+ additionalProperties: false
+ type: object
+ required:
+ - read
+ - write
+ - delete
+ title: AccessRights
+ AccountRequestInfo:
+ properties:
+ form:
+ type: object
+ title: Form
+ captcha:
+ type: string
+ title: Captcha
+ type: object
+ required:
+ - form
+ - captcha
+ title: AccountRequestInfo
+ example:
+ captcha: A12B34
+ form:
+ address: Infinite Loop
+ application: Antenna_Design
+ city: Washington
+ company: EM Com
+ country: USA
+ description: Description of something
+ email: maxwel@email.com
+ eula: true
+ firstName: James
+ hear: Search_Engine
+ lastName: Maxwel
+ phone: +1 123456789
+ postalCode: '98001'
+ privacyPolicy: true
+ Activity:
+ properties:
+ stats:
+ $ref: '#/components/schemas/Stats'
+ limits:
+ $ref: '#/components/schemas/Limits'
+ queued:
+ type: boolean
+ title: Queued
+ type: object
+ required:
+ - stats
+ - limits
+ title: Activity
+ Annotation:
+ properties:
+ type:
+ type: string
+ enum:
+ - note
+ - rect
+ - text
+ title: Type
+ color:
+ type: string
+ format: color
+ title: Color
+ attributes:
+ type: object
+ title: Attributes
+ description: svg attributes
+ additionalProperties: false
+ type: object
+ required:
+ - type
+ - color
+ - attributes
+ title: Annotation
+ Announcement:
+ properties:
+ id:
+ type: string
+ title: Id
+ products:
+ items:
+ type: string
+ type: array
+ title: Products
+ start:
+ type: string
+ format: date-time
+ title: Start
+ end:
+ type: string
+ format: date-time
+ title: End
+ title:
+ type: string
+ title: Title
+ description:
+ type: string
+ title: Description
+ link:
+ type: string
+ title: Link
+ widgets:
+ items:
+ type: string
+ enum:
+ - login
+ - ribbon
+ - user-menu
+ type: array
+ title: Widgets
+ type: object
+ required:
+ - id
+ - products
+ - start
+ - end
+ - title
+ - description
+ - link
+ - widgets
+ title: Announcement
+ ApiKeyCreate:
+ properties:
+ display_name:
+ type: string
+ minLength: 3
+ title: Display Name
+ expiration:
+ anyOf:
+ - type: string
+ format: duration
+ - type: 'null'
+ title: Expiration
+ description: Time delta from creation time to expiration. If None, then
+ it does not expire.
+ type: object
+ required:
+ - display_name
+ title: ApiKeyCreate
+ ApiKeyGet:
+ properties:
+ display_name:
+ type: string
+ minLength: 3
+ title: Display Name
+ api_key:
+ type: string
+ title: Api Key
+ api_secret:
+ type: string
+ title: Api Secret
+ type: object
+ required:
+ - display_name
+ - api_key
+ - api_secret
+ title: ApiKeyGet
+ AppStatusCheck:
+ properties:
+ app_name:
+ type: string
+ title: App Name
+ description: Application name
+ version:
+ type: string
+ title: Version
+ description: Application's version
+ services:
+ type: object
+ title: Services
+ description: Other backend services connected from this service
+ default: {}
+ sessions:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Sessions
+ description: Client sessions info. If single session per app, then is denoted
+ as main
+ default: {}
+ url:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Url
+ description: Link to current resource
+ diagnostics_url:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Diagnostics Url
+ description: Link to diagnostics report sub-resource. This MIGHT take some
+ time to compute
+ type: object
+ required:
+ - app_name
+ - version
+ title: AppStatusCheck
+ Author:
+ properties:
+ name:
+ type: string
+ title: Name
+ description: Name of the author
+ email:
+ type: string
+ format: email
+ title: Email
+ description: Email address
+ affiliation:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Affiliation
+ type: object
+ required:
+ - name
+ - email
+ title: Author
+ Body_service_submission:
+ properties:
+ file:
+ type: string
+ format: binary
+ title: File
+ description: metadata.json submission file
+ type: object
+ required:
+ - file
+ title: Body_service_submission
+ BootChoice:
+ properties:
+ label:
+ type: string
+ title: Label
+ description:
+ type: string
+ title: Description
+ type: object
+ required:
+ - label
+ - description
+ title: BootChoice
+ BootMode:
+ type: string
+ enum:
+ - CPU
+ - GPU
+ - MPI
+ title: BootMode
+ BootOption:
+ properties:
+ label:
+ type: string
+ title: Label
+ description:
+ type: string
+ title: Description
+ default:
+ type: string
+ title: Default
+ items:
+ additionalProperties:
+ $ref: '#/components/schemas/BootChoice'
+ type: object
+ title: Items
+ type: object
+ required:
+ - label
+ - description
+ - default
+ - items
+ title: BootOption
+ CatalogServiceGet:
+ properties:
+ key:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Key
+ version:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Version
+ name:
+ type: string
+ title: Name
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ description:
+ type: string
+ title: Description
+ descriptionUi:
+ type: boolean
+ title: Descriptionui
+ default: false
+ versionDisplay:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Versiondisplay
+ type:
+ $ref: '#/components/schemas/ServiceType'
+ contact:
+ anyOf:
+ - type: string
+ format: email
+ - type: 'null'
+ title: Contact
+ authors:
+ items:
+ $ref: '#/components/schemas/Author'
+ type: array
+ minItems: 1
+ title: Authors
+ owner:
+ anyOf:
+ - type: string
+ format: email
+ - type: 'null'
+ title: Owner
+ description: None when the owner email cannot be found in the database
+ inputs:
+ type: object
+ title: Inputs
+ description: inputs with extended information
+ outputs:
+ type: object
+ title: Outputs
+ description: outputs with extended information
+ bootOptions:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Bootoptions
+ minVisibleInputs:
+ anyOf:
+ - type: integer
+ minimum: 0
+ - type: 'null'
+ title: Minvisibleinputs
+ accessRights:
+ anyOf:
+ - additionalProperties:
+ $ref: '#/components/schemas/ServiceGroupAccessRightsV2'
+ type: object
+ - type: 'null'
+ title: Accessrights
+ classifiers:
+ anyOf:
+ - items:
+ type: string
+ type: array
+ - type: 'null'
+ title: Classifiers
+ default: []
+ quality:
+ type: object
+ title: Quality
+ default: {}
+ history:
+ items:
+ $ref: '#/components/schemas/ServiceRelease'
+ type: array
+ title: History
+ description: history of releases for this service at this point in time,
+ starting from the newest to the oldest. It includes current release.
+ default: []
+ type: object
+ required:
+ - key
+ - version
+ - name
+ - description
+ - type
+ - contact
+ - authors
+ - owner
+ - inputs
+ - outputs
+ - accessRights
+ title: CatalogServiceGet
+ example:
+ accessRights:
+ '1':
+ execute: true
+ write: false
+ authors:
+ - affiliation: ACME
+ email: author@acme.com
+ name: Author Bar
+ classifiers: []
+ contact: contact@acme.com
+ description: A service which awaits for time to pass, two times.
+ description_ui: true
+ history:
+ - released: '2024-07-20T15:00:00'
+ version: 2.2.1
+ version_display: Summer Release
+ - compatibility:
+ canUpdateTo:
+ version: 2.2.1
+ version: 2.0.0
+ - version: 0.9.11
+ - version: 0.9.10
+ - compatibility:
+ canUpdateTo:
+ version: 0.9.11
+ version: 0.9.8
+ - compatibility:
+ can_update_to:
+ version: 0.9.11
+ released: '2024-01-20T18:49:17'
+ version: 0.9.1
+ versionDisplay: Matterhorn
+ - retired: '2024-07-20T15:00:00'
+ version: 0.9.0
+ - version: 0.8.0
+ - version: 0.1.0
+ inputs:
+ input0:
+ contentSchema:
+ title: Acceleration
+ type: number
+ x_unit: m/s**2
+ description: acceleration with units
+ keyId: input_1
+ label: Acceleration
+ type: ref_contentSchema
+ unitLong: meter/second3
+ unitShort: m/s3
+ key: simcore/services/comp/itis/sleeper
+ name: sleeper
+ outputs:
+ outFile:
+ description: Time the service waited before completion
+ displayOrder: 2
+ keyId: output_2
+ label: Time Slept
+ type: number
+ unit: second
+ unitLong: seconds
+ unitShort: sec
+ owner: owner@acme.com
+ quality: {}
+ type: computational
+ version: 2.2.1
+ version_display: 2 Xtreme
+ CatalogServiceUpdate:
+ properties:
+ name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Name
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ descriptionUi:
+ type: boolean
+ title: Descriptionui
+ default: false
+ versionDisplay:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Versiondisplay
+ deprecated:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Deprecated
+ classifiers:
+ anyOf:
+ - items:
+ type: string
+ type: array
+ - type: 'null'
+ title: Classifiers
+ quality:
+ type: object
+ title: Quality
+ default: {}
+ accessRights:
+ anyOf:
+ - additionalProperties:
+ $ref: '#/components/schemas/ServiceGroupAccessRightsV2'
+ type: object
+ - type: 'null'
+ title: Accessrights
+ type: object
+ title: CatalogServiceUpdate
+ ChangePasswordBody:
+ properties:
+ current:
+ type: string
+ format: password
+ title: Current
+ writeOnly: true
+ new:
+ type: string
+ format: password
+ title: New
+ writeOnly: true
+ confirm:
+ type: string
+ format: password
+ title: Confirm
+ writeOnly: true
+ additionalProperties: false
+ type: object
+ required:
+ - current
+ - new
+ - confirm
+ title: ChangePasswordBody
+ CheckpointAnnotations:
+ properties:
+ tag:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Tag
+ message:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Message
+ type: object
+ title: CheckpointAnnotations
+ CheckpointApiModel:
+ properties:
+ id:
+ type: integer
+ exclusiveMinimum: true
+ title: Id
+ minimum: 0
+ checksum:
+ type: string
+ pattern: ^[a-fA-F0-9]{40}$
+ title: Checksum
+ created_at:
+ type: string
+ format: date-time
+ title: Created At
+ tags:
+ items:
+ type: string
+ type: array
+ title: Tags
+ message:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Message
+ parents_ids:
+ anyOf:
+ - items:
+ type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ type: array
+ - type: 'null'
+ title: Parents Ids
+ url:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Url
+ type: object
+ required:
+ - id
+ - checksum
+ - created_at
+ - tags
+ - url
+ title: CheckpointApiModel
+ CheckpointNew:
+ properties:
+ tag:
+ type: string
+ title: Tag
+ message:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Message
+ type: object
+ required:
+ - tag
+ title: CheckpointNew
+ ClusterAccessRights:
+ properties:
+ read:
+ type: boolean
+ title: Read
+ description: allows to run pipelines on that cluster
+ write:
+ type: boolean
+ title: Write
+ description: allows to modify the cluster
+ delete:
+ type: boolean
+ title: Delete
+ description: allows to delete a cluster
+ additionalProperties: false
+ type: object
+ required:
+ - read
+ - write
+ - delete
+ title: ClusterAccessRights
+ ClusterCreate:
+ properties:
+ name:
+ type: string
+ title: Name
+ description: The human readable name of the cluster
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ type:
+ $ref: '#/components/schemas/ClusterTypeInModel'
+ owner:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Owner
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ description: url to the image describing this cluster
+ endpoint:
+ type: string
+ minLength: 1
+ format: uri
+ title: Endpoint
+ authentication:
+ oneOf:
+ - $ref: '#/components/schemas/SimpleAuthentication'
+ - $ref: '#/components/schemas/KerberosAuthentication'
+ - $ref: '#/components/schemas/JupyterHubTokenAuthentication'
+ title: Authentication
+ discriminator:
+ propertyName: type
+ mapping:
+ jupyterhub: '#/components/schemas/JupyterHubTokenAuthentication'
+ kerberos: '#/components/schemas/KerberosAuthentication'
+ simple: '#/components/schemas/SimpleAuthentication'
+ accessRights:
+ additionalProperties:
+ $ref: '#/components/schemas/ClusterAccessRights'
+ type: object
+ title: Accessrights
+ type: object
+ required:
+ - name
+ - type
+ - endpoint
+ - authentication
+ title: ClusterCreate
+ ClusterDetails:
+ properties:
+ scheduler:
+ $ref: '#/components/schemas/Scheduler'
+ description: This contains dask scheduler information given by the underlying
+ dask library
+ dashboardLink:
+ type: string
+ minLength: 1
+ format: uri
+ title: Dashboardlink
+ description: Link to this scheduler's dashboard
+ type: object
+ required:
+ - scheduler
+ - dashboardLink
+ title: ClusterDetails
+ ClusterGet:
+ properties:
+ name:
+ type: string
+ title: Name
+ description: The human readable name of the cluster
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ type:
+ $ref: '#/components/schemas/ClusterTypeInModel'
+ owner:
+ type: integer
+ exclusiveMinimum: true
+ title: Owner
+ minimum: 0
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ description: url to the image describing this cluster
+ endpoint:
+ type: string
+ minLength: 1
+ format: uri
+ title: Endpoint
+ authentication:
+ oneOf:
+ - $ref: '#/components/schemas/SimpleAuthentication'
+ - $ref: '#/components/schemas/KerberosAuthentication'
+ - $ref: '#/components/schemas/JupyterHubTokenAuthentication'
+ - $ref: '#/components/schemas/NoAuthentication'
+ - $ref: '#/components/schemas/TLSAuthentication'
+ title: Authentication
+ description: Dask gateway authentication
+ discriminator:
+ propertyName: type
+ mapping:
+ jupyterhub: '#/components/schemas/JupyterHubTokenAuthentication'
+ kerberos: '#/components/schemas/KerberosAuthentication'
+ none: '#/components/schemas/NoAuthentication'
+ simple: '#/components/schemas/SimpleAuthentication'
+ tls: '#/components/schemas/TLSAuthentication'
+ accessRights:
+ additionalProperties:
+ $ref: '#/components/schemas/ClusterAccessRights'
+ type: object
+ title: Accessrights
+ default: {}
+ id:
+ type: integer
+ minimum: 0
+ title: Id
+ description: The cluster ID
+ type: object
+ required:
+ - name
+ - type
+ - owner
+ - endpoint
+ - authentication
+ - id
+ title: ClusterGet
+ ClusterPatch:
+ properties:
+ name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Name
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ type:
+ anyOf:
+ - $ref: '#/components/schemas/ClusterTypeInModel'
+ - type: 'null'
+ owner:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Owner
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ endpoint:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Endpoint
+ authentication:
+ anyOf:
+ - oneOf:
+ - $ref: '#/components/schemas/SimpleAuthentication'
+ - $ref: '#/components/schemas/KerberosAuthentication'
+ - $ref: '#/components/schemas/JupyterHubTokenAuthentication'
+ discriminator:
+ propertyName: type
+ mapping:
+ jupyterhub: '#/components/schemas/JupyterHubTokenAuthentication'
+ kerberos: '#/components/schemas/KerberosAuthentication'
+ simple: '#/components/schemas/SimpleAuthentication'
+ - type: 'null'
+ title: Authentication
+ accessRights:
+ anyOf:
+ - additionalProperties:
+ $ref: '#/components/schemas/ClusterAccessRights'
+ type: object
+ - type: 'null'
+ title: Accessrights
+ type: object
+ title: ClusterPatch
+ ClusterPing:
+ properties:
+ endpoint:
+ type: string
+ minLength: 1
+ format: uri
+ title: Endpoint
+ authentication:
+ oneOf:
+ - $ref: '#/components/schemas/SimpleAuthentication'
+ - $ref: '#/components/schemas/KerberosAuthentication'
+ - $ref: '#/components/schemas/JupyterHubTokenAuthentication'
+ - $ref: '#/components/schemas/NoAuthentication'
+ - $ref: '#/components/schemas/TLSAuthentication'
+ title: Authentication
+ description: Dask gateway authentication
+ discriminator:
+ propertyName: type
+ mapping:
+ jupyterhub: '#/components/schemas/JupyterHubTokenAuthentication'
+ kerberos: '#/components/schemas/KerberosAuthentication'
+ none: '#/components/schemas/NoAuthentication'
+ simple: '#/components/schemas/SimpleAuthentication'
+ tls: '#/components/schemas/TLSAuthentication'
+ type: object
+ required:
+ - endpoint
+ - authentication
+ title: ClusterPing
+ ClusterTypeInModel:
+ type: string
+ enum:
+ - AWS
+ - ON_PREMISE
+ - ON_DEMAND
+ title: ClusterTypeInModel
+ CodePageParams:
+ properties:
+ message:
+ type: string
+ title: Message
+ expiration_2fa:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Expiration 2Fa
+ next_url:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Next Url
+ type: object
+ required:
+ - message
+ title: CodePageParams
+ Compatibility:
+ properties:
+ canUpdateTo:
+ $ref: '#/components/schemas/CompatibleService'
+ description: Latest compatible service at this moment
+ type: object
+ required:
+ - canUpdateTo
+ title: Compatibility
+ CompatibleService:
+ properties:
+ key:
+ anyOf:
+ - type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ - type: 'null'
+ title: Key
+ description: If None, it refer to current service. Used only for inter-service
+ compatibility
+ version:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Version
+ type: object
+ required:
+ - version
+ title: CompatibleService
+ ComputationStart:
+ properties:
+ force_restart:
+ type: boolean
+ title: Force Restart
+ default: false
+ cluster_id:
+ type: integer
+ minimum: 0
+ title: Cluster Id
+ default: 0
+ subgraph:
+ items:
+ type: string
+ type: array
+ uniqueItems: true
+ title: Subgraph
+ default: []
+ type: object
+ title: ComputationStart
+ ComputationTaskGet:
+ properties:
+ cluster_id:
+ anyOf:
+ - type: integer
+ minimum: 0
+ - type: 'null'
+ title: Cluster Id
+ type: object
+ required:
+ - cluster_id
+ title: ComputationTaskGet
+ ConnectServiceToPricingPlanBodyParams:
+ properties:
+ serviceKey:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Servicekey
+ serviceVersion:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Serviceversion
+ type: object
+ required:
+ - serviceKey
+ - serviceVersion
+ title: ConnectServiceToPricingPlanBodyParams
+ CountryInfoDict:
+ properties:
+ name:
+ type: string
+ title: Name
+ alpha2:
+ type: string
+ title: Alpha2
+ type: object
+ required:
+ - name
+ - alpha2
+ title: CountryInfoDict
+ CreatePricingPlanBodyParams:
+ properties:
+ displayName:
+ type: string
+ title: Displayname
+ description:
+ type: string
+ title: Description
+ classification:
+ $ref: '#/components/schemas/PricingPlanClassification'
+ pricingPlanKey:
+ type: string
+ title: Pricingplankey
+ type: object
+ required:
+ - displayName
+ - description
+ - classification
+ - pricingPlanKey
+ title: CreatePricingPlanBodyParams
+ CreatePricingUnitBodyParams:
+ properties:
+ unitName:
+ type: string
+ title: Unitname
+ unitExtraInfo:
+ $ref: '#/components/schemas/UnitExtraInfo-Input'
+ default:
+ type: boolean
+ title: Default
+ specificInfo:
+ $ref: '#/components/schemas/SpecificInfo'
+ costPerUnit:
+ anyOf:
+ - type: number
+ - type: string
+ title: Costperunit
+ comment:
+ type: string
+ title: Comment
+ type: object
+ required:
+ - unitName
+ - unitExtraInfo
+ - default
+ - specificInfo
+ - costPerUnit
+ - comment
+ title: CreatePricingUnitBodyParams
+ CreateWalletBodyParams:
+ properties:
+ name:
+ type: string
+ title: Name
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Thumbnail
+ type: object
+ required:
+ - name
+ title: CreateWalletBodyParams
+ CreateWalletPayment:
+ properties:
+ priceDollars:
+ anyOf:
+ - type: number
+ exclusiveMaximum: true
+ exclusiveMinimum: true
+ maximum: 1000000.0
+ minimum: 0.0
+ - type: string
+ title: Pricedollars
+ comment:
+ anyOf:
+ - type: string
+ maxLength: 100
+ - type: 'null'
+ title: Comment
+ type: object
+ required:
+ - priceDollars
+ title: CreateWalletPayment
+ DatCoreFileLink:
+ properties:
+ store:
+ type: integer
+ title: Store
+ description: 'The store identifier: 0 for simcore S3, 1 for datcore'
+ path:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: Path
+ description: The path to the file in the storage provider domain
+ label:
+ type: string
+ title: Label
+ description: The real file name
+ eTag:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Etag
+ description: Entity tag that uniquely represents the file. The method to
+ generate the tag is not specified (black box).
+ dataset:
+ type: string
+ title: Dataset
+ description: Unique identifier to access the dataset on datcore (REQUIRED
+ for datcore)
+ additionalProperties: false
+ type: object
+ required:
+ - store
+ - path
+ - label
+ - dataset
+ title: DatCoreFileLink
+ description: I/O port type to hold a link to a file in DATCORE storage
+ DatasetMetaData:
+ properties:
+ dataset_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Dataset Id
+ display_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Display Name
+ type: object
+ title: DatasetMetaData
+ example:
+ dataset_id: N:id-aaaa
+ display_name: simcore-testing
+ DictModel_str_Annotated_float__Gt__:
+ additionalProperties:
+ type: number
+ exclusiveMinimum: true
+ minimum: 0.0
+ type: object
+ title: DictModel[str, Annotated[float, Gt]]
+ DownloadLink:
+ properties:
+ downloadLink:
+ type: string
+ title: Downloadlink
+ label:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Label
+ description: Display name
+ additionalProperties: false
+ type: object
+ required:
+ - downloadLink
+ title: DownloadLink
+ description: I/O port type to hold a generic download link to a file (e.g. S3
+ pre-signed link, etc)
+ EmailTestFailed:
+ properties:
+ test_name:
+ type: string
+ title: Test Name
+ error_type:
+ type: string
+ title: Error Type
+ error_message:
+ type: string
+ title: Error Message
+ traceback:
+ type: string
+ title: Traceback
+ type: object
+ required:
+ - test_name
+ - error_type
+ - error_message
+ - traceback
+ title: EmailTestFailed
+ EmailTestPassed:
+ properties:
+ fixtures:
+ type: object
+ title: Fixtures
+ info:
+ type: object
+ title: Info
+ type: object
+ required:
+ - fixtures
+ - info
+ title: EmailTestPassed
+ EmptyModel:
+ properties: {}
+ additionalProperties: false
+ type: object
+ title: EmptyModel
+ Envelope_AppStatusCheck_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/AppStatusCheck'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[AppStatusCheck]
+ Envelope_CatalogServiceGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/CatalogServiceGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[CatalogServiceGet]
+ Envelope_CheckpointApiModel_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/CheckpointApiModel'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[CheckpointApiModel]
+ Envelope_ClusterDetails_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ClusterDetails'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ClusterDetails]
+ Envelope_ClusterGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ClusterGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ClusterGet]
+ Envelope_ComputationTaskGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ComputationTaskGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ComputationTaskGet]
+ Envelope_FileMetaDataGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileMetaDataGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileMetaDataGet]
+ Envelope_FileUploadCompleteFutureResponse_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileUploadCompleteFutureResponse'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileUploadCompleteFutureResponse]
+ Envelope_FileUploadCompleteResponse_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileUploadCompleteResponse'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileUploadCompleteResponse]
+ Envelope_FileUploadCompletionBody_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileUploadCompletionBody'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileUploadCompletionBody]
+ Envelope_FileUploadSchema_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FileUploadSchema'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FileUploadSchema]
+ Envelope_FolderGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/FolderGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[FolderGet]
+ Envelope_GetCreditPrice_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/GetCreditPrice'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[GetCreditPrice]
+ Envelope_GetProduct_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/GetProduct'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[GetProduct]
+ Envelope_GetProjectInactivityResponse_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/GetProjectInactivityResponse'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[GetProjectInactivityResponse]
+ Envelope_GetWalletAutoRecharge_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/GetWalletAutoRecharge'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[GetWalletAutoRecharge]
+ Envelope_GroupGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/GroupGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[GroupGet]
+ Envelope_GroupUserGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/GroupUserGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[GroupUserGet]
+ Envelope_HealthInfoDict_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/HealthInfoDict'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[HealthInfoDict]
+ Envelope_InvitationGenerated_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/InvitationGenerated'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[InvitationGenerated]
+ Envelope_InvitationInfo_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/InvitationInfo'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[InvitationInfo]
+ Envelope_Log_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/Log'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[Log]
+ Envelope_LoginNextPage_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/LoginNextPage'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[LoginNextPage]
+ Envelope_MyGroupsGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/MyGroupsGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[MyGroupsGet]
+ Envelope_NodeCreated_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/NodeCreated'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[NodeCreated]
+ Envelope_NodeRetrieved_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/NodeRetrieved'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[NodeRetrieved]
+ Envelope_PaymentMethodGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PaymentMethodGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[PaymentMethodGet]
+ Envelope_PaymentMethodInitiated_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PaymentMethodInitiated'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[PaymentMethodInitiated]
+ Envelope_PresignedLink_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PresignedLink'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[PresignedLink]
+ Envelope_PricingPlanAdminGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PricingPlanAdminGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[PricingPlanAdminGet]
+ Envelope_PricingPlanToServiceAdminGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PricingPlanToServiceAdminGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[PricingPlanToServiceAdminGet]
+ Envelope_PricingUnitAdminGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PricingUnitAdminGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[PricingUnitAdminGet]
+ Envelope_PricingUnitGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PricingUnitGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[PricingUnitGet]
+ Envelope_ProfileGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ProfileGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ProfileGet]
+ Envelope_ProjectGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ProjectGet]
+ Envelope_ProjectGroupGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectGroupGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ProjectGroupGet]
+ Envelope_ProjectMetadataGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectMetadataGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ProjectMetadataGet]
+ Envelope_ProjectState_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectState'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ProjectState]
+ Envelope_ProjectsCommentsAPI_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectsCommentsAPI'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ProjectsCommentsAPI]
+ Envelope_RegisterPhoneNextPage_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/RegisterPhoneNextPage'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[RegisterPhoneNextPage]
+ Envelope_ResearchResource_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ResearchResource'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ResearchResource]
+ Envelope_ServiceInputGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ServiceInputGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ServiceInputGet]
+ Envelope_ServicePricingPlanGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ServicePricingPlanGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ServicePricingPlanGet]
+ Envelope_StatusDiagnosticsGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/StatusDiagnosticsGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[StatusDiagnosticsGet]
+ Envelope_TableSynchronisation_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/TableSynchronisation'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[TableSynchronisation]
+ Envelope_TagGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/TagGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[TagGet]
+ Envelope_TaskGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/TaskGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[TaskGet]
+ Envelope_TaskStatus_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/TaskStatus'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[TaskStatus]
+ Envelope_ThirdPartyToken_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/ThirdPartyToken'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[ThirdPartyToken]
+ Envelope_Union_EmailTestFailed__EmailTestPassed__:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/EmailTestFailed'
+ - $ref: '#/components/schemas/EmailTestPassed'
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[Union[EmailTestFailed, EmailTestPassed]]
+ Envelope_Union_NodeGetIdle__NodeGetUnknown__RunningDynamicServiceDetails__NodeGet__:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/NodeGetIdle'
+ - $ref: '#/components/schemas/NodeGetUnknown'
+ - $ref: '#/components/schemas/RunningDynamicServiceDetails'
+ - $ref: '#/components/schemas/NodeGet'
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[Union[NodeGetIdle, NodeGetUnknown, RunningDynamicServiceDetails,
+ NodeGet]]
+ Envelope_Union_PricingUnitGet__NoneType__:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/PricingUnitGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[Union[PricingUnitGet, NoneType]]
+ Envelope_Union_WalletGet__NoneType__:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/WalletGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[Union[WalletGet, NoneType]]
+ Envelope_Url_:
+ properties:
+ data:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[Url]
+ Envelope_UserProfile_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/UserProfile'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[UserProfile]
+ Envelope_WalletGetWithAvailableCredits_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/WalletGetWithAvailableCredits'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[WalletGetWithAvailableCredits]
+ Envelope_WalletGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/WalletGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[WalletGet]
+ Envelope_WalletGroupGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/WalletGroupGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[WalletGroupGet]
+ Envelope_WalletPaymentInitiated_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/WalletPaymentInitiated'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[WalletPaymentInitiated]
+ Envelope_WorkbenchViewApiModel_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/WorkbenchViewApiModel'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[WorkbenchViewApiModel]
+ Envelope_WorkspaceGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/WorkspaceGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[WorkspaceGet]
+ Envelope_WorkspaceGroupGet_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/WorkspaceGroupGet'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[WorkspaceGroupGet]
+ Envelope__ComputationStarted_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/_ComputationStarted'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[_ComputationStarted]
+ Envelope__ProjectGroupAccess_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/_ProjectGroupAccess'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[_ProjectGroupAccess]
+ Envelope__ProjectNodePreview_:
+ properties:
+ data:
+ anyOf:
+ - $ref: '#/components/schemas/_ProjectNodePreview'
+ - type: 'null'
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[_ProjectNodePreview]
+ Envelope_dict_Annotated_str__StringConstraints___ImageResources__:
+ properties:
+ data:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[dict[Annotated[str, StringConstraints], ImageResources]]
+ Envelope_dict_Literal__comment_id____Annotated_int__Gt___:
+ properties:
+ data:
+ anyOf:
+ - additionalProperties:
+ type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ type: object
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[dict[Literal['comment_id'], Annotated[int, Gt]]]
+ Envelope_dict_UUID__Activity__:
+ properties:
+ data:
+ anyOf:
+ - additionalProperties:
+ $ref: '#/components/schemas/Activity'
+ type: object
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[dict[UUID, Activity]]
+ Envelope_dict_UUID__ProjectInputGet__:
+ properties:
+ data:
+ anyOf:
+ - additionalProperties:
+ $ref: '#/components/schemas/ProjectInputGet'
+ type: object
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[dict[UUID, ProjectInputGet]]
+ Envelope_dict_UUID__ProjectOutputGet__:
+ properties:
+ data:
+ anyOf:
+ - additionalProperties:
+ $ref: '#/components/schemas/ProjectOutputGet'
+ type: object
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[dict[UUID, ProjectOutputGet]]
+ Envelope_dict_str__Any__:
+ properties:
+ data:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[dict[str, Any]]
+ Envelope_list_Annotated_str__StringConstraints___:
+ properties:
+ data:
+ anyOf:
+ - items:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[Annotated[str, StringConstraints]]]
+ Envelope_list_Announcement__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/Announcement'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[Announcement]]
+ Envelope_list_ClusterGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ClusterGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ClusterGet]]
+ Envelope_list_DatasetMetaData__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/DatasetMetaData'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[DatasetMetaData]]
+ Envelope_list_FileMetaDataGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/FileMetaDataGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[FileMetaDataGet]]
+ Envelope_list_FolderGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/FolderGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[FolderGet]]
+ Envelope_list_GroupUserGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/GroupUserGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[GroupUserGet]]
+ Envelope_list_OsparcCreditsAggregatedByServiceGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/OsparcCreditsAggregatedByServiceGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[OsparcCreditsAggregatedByServiceGet]]
+ Envelope_list_PaymentMethodGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/PaymentMethodGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[PaymentMethodGet]]
+ Envelope_list_PermissionGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/PermissionGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[PermissionGet]]
+ Envelope_list_PricingPlanAdminGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/PricingPlanAdminGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[PricingPlanAdminGet]]
+ Envelope_list_PricingPlanToServiceAdminGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/PricingPlanToServiceAdminGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[PricingPlanToServiceAdminGet]]
+ Envelope_list_ProjectGroupGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ProjectGroupGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ProjectGroupGet]]
+ Envelope_list_ProjectMetadataPortGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ProjectMetadataPortGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ProjectMetadataPortGet]]
+ Envelope_list_ProjectsCommentsAPI__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ProjectsCommentsAPI'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ProjectsCommentsAPI]]
+ Envelope_list_ResourceHit__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ResourceHit'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ResourceHit]]
+ Envelope_list_ServiceGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ServiceGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ServiceGet]]
+ Envelope_list_ServiceInputGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ServiceInputGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ServiceInputGet]]
+ Envelope_list_ServiceOutputGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ServiceOutputGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ServiceOutputGet]]
+ Envelope_list_ServiceRunGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ServiceRunGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ServiceRunGet]]
+ Envelope_list_TagGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/TagGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[TagGet]]
+ Envelope_list_TagGroupGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/TagGroupGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[TagGroupGet]]
+ Envelope_list_TaskGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/TaskGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[TaskGet]]
+ Envelope_list_ThirdPartyToken__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/ThirdPartyToken'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[ThirdPartyToken]]
+ Envelope_list_UserNotification__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/UserNotification'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[UserNotification]]
+ Envelope_list_UserProfile__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/UserProfile'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[UserProfile]]
+ Envelope_list_Viewer__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/Viewer'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[Viewer]]
+ Envelope_list_WalletGetWithAvailableCredits__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/WalletGetWithAvailableCredits'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[WalletGetWithAvailableCredits]]
+ Envelope_list_WalletGroupGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/WalletGroupGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[WalletGroupGet]]
+ Envelope_list_WorkspaceGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/WorkspaceGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[WorkspaceGet]]
+ Envelope_list_WorkspaceGroupGet__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/WorkspaceGroupGet'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[WorkspaceGroupGet]]
+ Envelope_list__ProjectNodePreview__:
+ properties:
+ data:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/_ProjectNodePreview'
+ type: array
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[list[_ProjectNodePreview]]
+ Envelope_str_:
+ properties:
+ data:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Data
+ error:
+ anyOf:
+ - {}
+ - type: 'null'
+ title: Error
+ type: object
+ title: Envelope[str]
+ EnvelopedError:
+ properties:
+ data:
+ type: 'null'
+ title: Data
+ error:
+ $ref: '#/components/schemas/ErrorGet'
+ type: object
+ required:
+ - error
+ title: EnvelopedError
+ ErrorGet:
+ properties:
+ message:
+ type: string
+ minLength: 5
+ title: Message
+ description: Message displayed to the user
+ supportId:
+ anyOf:
+ - type: string
+ maxLength: 100
+ minLength: 1
+ - type: 'null'
+ title: Supportid
+ description: ID to track the incident during support
+ status:
+ type: integer
+ title: Status
+ default: 400
+ deprecated: true
+ errors:
+ items:
+ $ref: '#/components/schemas/ErrorItemType'
+ type: array
+ title: Errors
+ default: []
+ deprecated: true
+ logs:
+ items:
+ $ref: '#/components/schemas/LogMessageType'
+ type: array
+ title: Logs
+ default: []
+ deprecated: true
+ type: object
+ required:
+ - message
+ title: ErrorGet
+ ErrorItemType:
+ properties:
+ code:
+ type: string
+ title: Code
+ message:
+ type: string
+ title: Message
+ resource:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Resource
+ field:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Field
+ type: object
+ required:
+ - code
+ - message
+ - resource
+ - field
+ title: ErrorItemType
+ ExtractedResults:
+ properties:
+ progress:
+ type: object
+ title: Progress
+ description: Progress in each computational node
+ labels:
+ type: object
+ title: Labels
+ description: Maps captured node with a label
+ values:
+ type: object
+ title: Values
+ description: Captured outputs per node
+ type: object
+ required:
+ - progress
+ - labels
+ - values
+ title: ExtractedResults
+ example:
+ labels:
+ 0f1e38c9-dcb7-443c-a745-91b97ac28ccc: Integer iterator
+ 2d0ce8b9-c9c3-43ce-ad2f-ad493898de37: Probe Sensor - Integer
+ 445b44d1-59b3-425c-ac48-7c13e0f2ea5b: Probe Sensor - Integer_2
+ d76fca06-f050-4790-88a8-0aac10c87b39: Boolean Parameter
+ progress:
+ 4c08265a-427b-4ac3-9eab-1d11c822ada4: 0
+ e33c6880-1b1d-4419-82d7-270197738aa9: 100
+ values:
+ 0f1e38c9-dcb7-443c-a745-91b97ac28ccc:
+ out_1: 1
+ out_2:
+ - 3
+ - 4
+ 2d0ce8b9-c9c3-43ce-ad2f-ad493898de37:
+ in_1: 7
+ 445b44d1-59b3-425c-ac48-7c13e0f2ea5b:
+ in_1: 1
+ d76fca06-f050-4790-88a8-0aac10c87b39:
+ out_1: true
+ FileMetaData:
+ properties:
+ file_uuid:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: File Uuid
+ location_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Location Id
+ project_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Project Name
+ node_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Node Name
+ file_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: File Name
+ file_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: File Id
+ created_at:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Created At
+ last_modified:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Last Modified
+ file_size:
+ anyOf:
+ - type: integer
+ - type: 'null'
+ title: File Size
+ entity_tag:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Entity Tag
+ is_directory:
+ anyOf:
+ - type: boolean
+ - type: 'null'
+ title: Is Directory
+ type: object
+ title: FileMetaData
+ example:
+ created_at: '2019-06-19T12:29:03.308611Z'
+ entity_tag: a87ff679a2f3e71d9181a67b7542122c
+ file_id: N:package:e263da07-2d89-45a6-8b0f-61061b913873
+ file_name: example.txt
+ file_size: 73
+ file_uuid: simcore-testing/105/1000/3
+ is_directory: false
+ last_modified: '2019-06-19T12:29:03.78852Z'
+ location_id: '0'
+ node_name: alpha
+ project_name: futurology
+ FileMetaDataGet:
+ properties:
+ file_uuid:
+ type: string
+ title: File Uuid
+ description: NOT a unique ID, like (api|uuid)/uuid/file_name or DATCORE
+ folder structure
+ location_id:
+ type: integer
+ title: Location Id
+ description: Storage location
+ project_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Project Name
+ description: optional project name, used by frontend to display path
+ node_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Node Name
+ description: optional node name, used by frontend to display path
+ file_name:
+ type: string
+ title: File Name
+ description: Display name for a file
+ file_id:
+ anyOf:
+ - type: string
+ pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$
+ - type: string
+ pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$
+ title: File Id
+ description: THIS IS the unique ID for the file. either (api|project_id)/node_id/file_name.ext
+ for S3 and N:package:UUID for datcore
+ created_at:
+ type: string
+ format: date-time
+ title: Created At
+ last_modified:
+ type: string
+ format: date-time
+ title: Last Modified
+ file_size:
+ anyOf:
+ - type: integer
+ enum:
+ - -1
+ const: -1
+ - type: integer
+ minimum: 0
+ title: File Size
+ description: File size in bytes (-1 means invalid)
+ default: -1
+ entity_tag:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Entity Tag
+ description: Entity tag (or ETag), represents a specific version of the
+ file, None if invalid upload or datcore
+ is_soft_link:
+ type: boolean
+ title: Is Soft Link
+ description: If true, this file is a soft link.i.e. is another entry with
+ the same object_name
+ default: false
+ is_directory:
+ type: boolean
+ title: Is Directory
+ description: if True this is a directory
+ default: false
+ sha256_checksum:
+ anyOf:
+ - type: string
+ pattern: ^[a-fA-F0-9]{64}$
+ - type: 'null'
+ title: Sha256 Checksum
+ description: 'SHA256 message digest of the file content. Main purpose: cheap
+ lookup.'
+ type: object
+ required:
+ - file_uuid
+ - location_id
+ - file_name
+ - file_id
+ - created_at
+ - last_modified
+ title: FileMetaDataGet
+ FileUploadCompleteFutureResponse:
+ properties:
+ state:
+ $ref: '#/components/schemas/FileUploadCompleteState'
+ e_tag:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: E Tag
+ type: object
+ required:
+ - state
+ title: FileUploadCompleteFutureResponse
+ FileUploadCompleteLinks:
+ properties:
+ state:
+ type: string
+ minLength: 1
+ format: uri
+ title: State
+ type: object
+ required:
+ - state
+ title: FileUploadCompleteLinks
+ FileUploadCompleteResponse:
+ properties:
+ links:
+ $ref: '#/components/schemas/FileUploadCompleteLinks'
+ type: object
+ required:
+ - links
+ title: FileUploadCompleteResponse
+ FileUploadCompleteState:
+ type: string
+ enum:
+ - ok
+ - nok
+ title: FileUploadCompleteState
+ FileUploadCompletionBody:
+ properties:
+ parts:
+ items:
+ $ref: '#/components/schemas/UploadedPart'
+ type: array
+ title: Parts
+ type: object
+ required:
+ - parts
+ title: FileUploadCompletionBody
+ FileUploadLinks:
+ properties:
+ abort_upload:
+ type: string
+ minLength: 1
+ format: uri
+ title: Abort Upload
+ complete_upload:
+ type: string
+ minLength: 1
+ format: uri
+ title: Complete Upload
+ type: object
+ required:
+ - abort_upload
+ - complete_upload
+ title: FileUploadLinks
+ FileUploadSchema:
+ properties:
+ chunk_size:
+ type: integer
+ minimum: 0
+ title: Chunk Size
+ urls:
+ items:
+ type: string
+ minLength: 1
+ format: uri
+ type: array
+ title: Urls
+ links:
+ $ref: '#/components/schemas/FileUploadLinks'
+ type: object
+ required:
+ - chunk_size
+ - urls
+ - links
+ title: FileUploadSchema
+ FolderCreateBodyParams:
+ properties:
+ name:
+ type: string
+ maxLength: 100
+ minLength: 1
+ title: Name
+ parentFolderId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Parentfolderid
+ workspaceId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Workspaceid
+ additionalProperties: false
+ type: object
+ required:
+ - name
+ title: FolderCreateBodyParams
+ FolderGet:
+ properties:
+ folderId:
+ type: integer
+ exclusiveMinimum: true
+ title: Folderid
+ minimum: 0
+ parentFolderId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Parentfolderid
+ name:
+ type: string
+ title: Name
+ createdAt:
+ type: string
+ format: date-time
+ title: Createdat
+ modifiedAt:
+ type: string
+ format: date-time
+ title: Modifiedat
+ trashedAt:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Trashedat
+ owner:
+ type: integer
+ exclusiveMinimum: true
+ title: Owner
+ minimum: 0
+ workspaceId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Workspaceid
+ myAccessRights:
+ $ref: '#/components/schemas/AccessRights'
+ type: object
+ required:
+ - folderId
+ - name
+ - createdAt
+ - modifiedAt
+ - trashedAt
+ - owner
+ - workspaceId
+ - myAccessRights
+ title: FolderGet
+ FolderReplaceBodyParams:
+ properties:
+ name:
+ type: string
+ maxLength: 100
+ minLength: 1
+ title: Name
+ parentFolderId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Parentfolderid
+ additionalProperties: false
+ type: object
+ required:
+ - name
+ title: FolderReplaceBodyParams
+ GenerateInvitation:
+ properties:
+ guest:
+ type: string
+ format: email
+ title: Guest
+ trialAccountDays:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Trialaccountdays
+ extraCreditsInUsd:
+ anyOf:
+ - type: integer
+ exclusiveMaximum: true
+ minimum: 0
+ maximum: 500
+ - type: 'null'
+ title: Extracreditsinusd
+ type: object
+ required:
+ - guest
+ title: GenerateInvitation
+ GetCreditPrice:
+ properties:
+ productName:
+ type: string
+ title: Productname
+ usdPerCredit:
+ anyOf:
+ - type: number
+ minimum: 0.0
+ - type: 'null'
+ title: Usdpercredit
+ description: Price of a credit in USD. If None, then this product's price
+ is UNDEFINED
+ minPaymentAmountUsd:
+ anyOf:
+ - type: integer
+ minimum: 0
+ - type: 'null'
+ title: Minpaymentamountusd
+ description: Minimum amount (included) in USD that can be paid for this
+ productCan be None if this product's price is UNDEFINED
+ type: object
+ required:
+ - productName
+ - usdPerCredit
+ - minPaymentAmountUsd
+ title: GetCreditPrice
+ GetProduct:
+ properties:
+ name:
+ type: string
+ title: Name
+ displayName:
+ type: string
+ title: Displayname
+ shortName:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Shortname
+ description: Short display name for SMS
+ vendor:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Vendor
+ description: vendor attributes
+ issues:
+ anyOf:
+ - items:
+ type: object
+ type: array
+ - type: 'null'
+ title: Issues
+ description: Reference to issues tracker
+ manuals:
+ anyOf:
+ - items:
+ type: object
+ type: array
+ - type: 'null'
+ title: Manuals
+ description: List of manuals
+ support:
+ anyOf:
+ - items:
+ type: object
+ type: array
+ - type: 'null'
+ title: Support
+ description: List of support resources
+ loginSettings:
+ type: object
+ title: Loginsettings
+ maxOpenStudiesPerUser:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Maxopenstudiesperuser
+ isPaymentEnabled:
+ type: boolean
+ title: Ispaymentenabled
+ creditsPerUsd:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Creditsperusd
+ templates:
+ items:
+ $ref: '#/components/schemas/GetProductTemplate'
+ type: array
+ title: Templates
+ description: List of templates available to this product for communications
+ (e.g. emails, sms, etc)
+ type: object
+ required:
+ - name
+ - displayName
+ - loginSettings
+ - maxOpenStudiesPerUser
+ - isPaymentEnabled
+ - creditsPerUsd
+ title: GetProduct
+ GetProductTemplate:
+ properties:
+ id:
+ type: string
+ maxLength: 100
+ minLength: 1
+ title: Id
+ content:
+ type: string
+ title: Content
+ type: object
+ required:
+ - id
+ - content
+ title: GetProductTemplate
+ GetProjectInactivityResponse:
+ properties:
+ is_inactive:
+ type: boolean
+ title: Is Inactive
+ type: object
+ required:
+ - is_inactive
+ title: GetProjectInactivityResponse
+ GetWalletAutoRecharge:
+ properties:
+ enabled:
+ type: boolean
+ title: Enabled
+ description: Enables/disables auto-recharge trigger in this wallet
+ default: false
+ paymentMethodId:
+ anyOf:
+ - type: string
+ maxLength: 100
+ minLength: 1
+ - type: 'null'
+ title: Paymentmethodid
+ description: Payment method in the wallet used to perform the auto-recharge
+ payments or None if still undefined
+ minBalanceInCredits:
+ type: string
+ title: Minbalanceincredits
+ description: Minimum balance in credits that triggers an auto-recharge [Read
+ only]
+ topUpAmountInUsd:
+ type: string
+ title: Topupamountinusd
+ description: Amount in USD payed when auto-recharge condition is satisfied
+ monthlyLimitInUsd:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Monthlylimitinusd
+ description: Maximum amount in USD charged within a natural month.None indicates
+ no limit.
+ type: object
+ required:
+ - paymentMethodId
+ - minBalanceInCredits
+ - topUpAmountInUsd
+ - monthlyLimitInUsd
+ title: GetWalletAutoRecharge
+ GroupAccessRights:
+ properties:
+ read:
+ type: boolean
+ title: Read
+ write:
+ type: boolean
+ title: Write
+ delete:
+ type: boolean
+ title: Delete
+ type: object
+ required:
+ - read
+ - write
+ - delete
+ title: GroupAccessRights
+ description: defines acesss rights for the user
+ GroupCreate:
+ properties:
+ label:
+ type: string
+ title: Label
+ description:
+ type: string
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ type: object
+ required:
+ - label
+ - description
+ title: GroupCreate
+ GroupGet:
+ properties:
+ gid:
+ type: integer
+ title: Gid
+ description: the group ID
+ label:
+ type: string
+ title: Label
+ description: the group name
+ description:
+ type: string
+ title: Description
+ description: the group description
+ thumbnail:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ description: url to the group thumbnail
+ accessRights:
+ $ref: '#/components/schemas/GroupAccessRights'
+ inclusionRules:
+ additionalProperties:
+ type: string
+ type: object
+ title: Inclusionrules
+ description: Maps user's column and regular expression
+ type: object
+ required:
+ - gid
+ - label
+ - description
+ - accessRights
+ title: GroupGet
+ GroupUpdate:
+ properties:
+ label:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Label
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ type: object
+ title: GroupUpdate
+ GroupUserAdd:
+ properties:
+ uid:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Uid
+ email:
+ anyOf:
+ - type: string
+ format: email
+ - type: 'null'
+ title: Email
+ type: object
+ title: GroupUserAdd
+ description: "Identify the user with either `email` or `uid` \u2014 only one."
+ GroupUserGet:
+ properties:
+ id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Id
+ description: the user id
+ login:
+ anyOf:
+ - type: string
+ format: email
+ - type: 'null'
+ title: Login
+ description: the user login email
+ first_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: First Name
+ description: the user first name
+ last_name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Last Name
+ description: the user last name
+ gravatar_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Gravatar Id
+ description: the user gravatar id hash
+ gid:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Gid
+ description: the user primary gid
+ accessRights:
+ $ref: '#/components/schemas/GroupAccessRights'
+ type: object
+ required:
+ - accessRights
+ title: GroupUserGet
+ example:
+ accessRights:
+ delete: false
+ read: true
+ write: false
+ first_name: Mr
+ gid: '3'
+ gravatar_id: a1af5c6ecc38e81f29695f01d6ceb540
+ id: '1'
+ last_name: Smith
+ login: mr.smith@matrix.com
+ GroupUserUpdate:
+ properties:
+ accessRights:
+ $ref: '#/components/schemas/GroupAccessRights'
+ type: object
+ required:
+ - accessRights
+ title: GroupUserUpdate
+ example:
+ accessRights:
+ delete: false
+ read: true
+ write: false
+ HardwareInfo:
+ properties:
+ aws_ec2_instances:
+ items:
+ type: string
+ type: array
+ title: Aws Ec2 Instances
+ type: object
+ required:
+ - aws_ec2_instances
+ title: HardwareInfo
+ HealthInfoDict:
+ properties:
+ name:
+ type: string
+ title: Name
+ version:
+ type: string
+ title: Version
+ api_version:
+ type: string
+ title: Api Version
+ type: object
+ required:
+ - name
+ - version
+ - api_version
+ title: HealthInfoDict
+ ImageResources:
+ properties:
+ image:
+ type: string
+ pattern: ^(?:([a-z0-9-]+(?:\.[a-z0-9-]+)+(?::\d+)?|[a-z0-9-]+:\d+)/)?((?:[a-z0-9][a-z0-9_.-]*/)*[a-z0-9-_]+[a-z0-9])(?::([\w][\w.-]{0,127}))?(\@sha256:[a-fA-F0-9]{32,64})?$
+ title: Image
+ description: Used by the frontend to provide a context for the users.Services
+ with a docker-compose spec will have multiple entries.Using the `image:version`
+ instead of the docker-compose spec is more helpful for the end user.
+ resources:
+ additionalProperties:
+ $ref: '#/components/schemas/ResourceValue'
+ type: object
+ title: Resources
+ boot_modes:
+ items:
+ $ref: '#/components/schemas/BootMode'
+ type: array
+ title: Boot Modes
+ description: describe how a service shall be booted, using CPU, MPI, openMP
+ or GPU
+ default:
+ - CPU
+ type: object
+ required:
+ - image
+ - resources
+ title: ImageResources
+ example:
+ image: simcore/service/dynamic/pretty-intense:1.0.0
+ resources:
+ AIRAM:
+ limit: 1
+ reservation: 1
+ ANY_resource:
+ limit: some_value
+ reservation: some_value
+ CPU:
+ limit: 4
+ reservation: 0.1
+ RAM:
+ limit: 103079215104
+ reservation: 536870912
+ VRAM:
+ limit: 1
+ reservation: 1
+ InvitationCheck:
+ properties:
+ invitation:
+ type: string
+ title: Invitation
+ description: Invitation code
+ additionalProperties: false
+ type: object
+ required:
+ - invitation
+ title: InvitationCheck
+ InvitationGenerated:
+ properties:
+ productName:
+ type: string
+ title: Productname
+ issuer:
+ type: string
+ title: Issuer
+ guest:
+ type: string
+ format: email
+ title: Guest
+ trialAccountDays:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Trialaccountdays
+ extraCreditsInUsd:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Extracreditsinusd
+ created:
+ type: string
+ format: date-time
+ title: Created
+ invitationLink:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Invitationlink
+ type: object
+ required:
+ - productName
+ - issuer
+ - guest
+ - created
+ - invitationLink
+ title: InvitationGenerated
+ InvitationInfo:
+ properties:
+ email:
+ anyOf:
+ - type: string
+ format: email
+ - type: 'null'
+ title: Email
+ description: Email associated to invitation or None
+ additionalProperties: false
+ type: object
+ title: InvitationInfo
+ JupyterHubTokenAuthentication:
+ properties:
+ type:
+ type: string
+ enum:
+ - jupyterhub
+ const: jupyterhub
+ title: Type
+ default: jupyterhub
+ api_token:
+ type: string
+ title: Api Token
+ additionalProperties: false
+ type: object
+ required:
+ - api_token
+ title: JupyterHubTokenAuthentication
+ KerberosAuthentication:
+ properties:
+ type:
+ type: string
+ enum:
+ - kerberos
+ const: kerberos
+ title: Type
+ default: kerberos
+ additionalProperties: false
+ type: object
+ title: KerberosAuthentication
+ Limits:
+ properties:
+ cpus:
+ type: number
+ exclusiveMinimum: true
+ title: Cpus
+ minimum: 0.0
+ mem:
+ type: number
+ exclusiveMinimum: true
+ title: Mem
+ minimum: 0.0
+ type: object
+ required:
+ - cpus
+ - mem
+ title: Limits
+ LinkType:
+ type: string
+ enum:
+ - PRESIGNED
+ - S3
+ title: LinkType
+ Log:
+ properties:
+ level:
+ anyOf:
+ - $ref: '#/components/schemas/LogLevel'
+ - type: 'null'
+ description: log level
+ default: INFO
+ message:
+ type: string
+ title: Message
+ description: log message. If logger is USER, then it MUST be human readable
+ logger:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Logger
+ description: name of the logger receiving this message
+ type: object
+ required:
+ - message
+ title: Log
+ example:
+ level: INFO
+ logger: user-logger
+ message: Hi there, Mr user
+ LogLevel:
+ type: string
+ enum:
+ - DEBUG
+ - INFO
+ - WARNING
+ - ERROR
+ title: LogLevel
+ LogMessageType:
+ properties:
+ message:
+ type: string
+ title: Message
+ level:
+ type: string
+ title: Level
+ default: INFO
+ logger:
+ type: string
+ title: Logger
+ default: user
+ type: object
+ required:
+ - message
+ title: LogMessageType
+ LoginBody:
+ properties:
+ email:
+ type: string
+ format: email
+ title: Email
+ password:
+ type: string
+ format: password
+ title: Password
+ writeOnly: true
+ additionalProperties: false
+ type: object
+ required:
+ - email
+ - password
+ title: LoginBody
+ LoginNextPage:
+ properties:
+ name:
+ type: string
+ title: Name
+ description: Code name to the front-end page. Ideally a PageStr
+ parameters:
+ anyOf:
+ - $ref: '#/components/schemas/CodePageParams'
+ - type: 'null'
+ type: object
+ required:
+ - name
+ title: LoginNextPage
+ LoginTwoFactorAuthBody:
+ properties:
+ email:
+ type: string
+ format: email
+ title: Email
+ code:
+ type: string
+ format: password
+ title: Code
+ writeOnly: true
+ additionalProperties: false
+ type: object
+ required:
+ - email
+ - code
+ title: LoginTwoFactorAuthBody
+ LogoutBody:
+ properties:
+ client_session_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Client Session Id
+ additionalProperties: false
+ type: object
+ title: LogoutBody
+ Marker:
+ properties:
+ color:
+ type: string
+ format: color
+ title: Color
+ additionalProperties: false
+ type: object
+ required:
+ - color
+ title: Marker
+ MyGroupsGet:
+ properties:
+ me:
+ $ref: '#/components/schemas/GroupGet'
+ organizations:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/GroupGet'
+ type: array
+ - type: 'null'
+ title: Organizations
+ all:
+ $ref: '#/components/schemas/GroupGet'
+ product:
+ anyOf:
+ - $ref: '#/components/schemas/GroupGet'
+ - type: 'null'
+ type: object
+ required:
+ - me
+ - all
+ title: MyGroupsGet
+ example:
+ all:
+ accessRights:
+ delete: false
+ read: true
+ write: false
+ description: Open to all users
+ gid: '0'
+ label: All
+ me:
+ accessRights:
+ delete: true
+ read: true
+ write: true
+ description: A very special user
+ gid: '27'
+ label: A user
+ organizations:
+ - accessRights:
+ delete: false
+ read: true
+ write: false
+ description: The Foundation for Research on Information Technologies in
+ Society
+ gid: '15'
+ label: ITIS Foundation
+ - accessRights:
+ delete: false
+ read: true
+ write: false
+ description: Some foundation
+ gid: '16'
+ label: Blue Fundation
+ NoAuthentication:
+ properties:
+ type:
+ type: string
+ enum:
+ - none
+ const: none
+ title: Type
+ default: none
+ additionalProperties: false
+ type: object
+ title: NoAuthentication
+ Node-Input:
+ properties:
+ key:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Key
+ description: distinctive name for the node based on the docker registry
+ path
+ version:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Version
+ description: semantic version number of the node
+ label:
+ type: string
+ title: Label
+ description: The short name of the node
+ progress:
+ anyOf:
+ - type: number
+ maximum: 100.0
+ minimum: 0.0
+ - type: 'null'
+ title: Progress
+ description: the node progress value (deprecated in DB, still used for API
+ only)
+ deprecated: true
+ thumbnail:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Thumbnail
+ description: url of the latest screenshot of the node
+ runHash:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Runhash
+ description: the hex digest of the resolved inputs +outputs hash at the
+ time when the last outputs were generated
+ nullable: true
+ inputs:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Inputs
+ description: values of input properties
+ inputsRequired:
+ items:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ type: array
+ title: Inputsrequired
+ description: Defines inputs that are required in order to run the service
+ inputsUnits:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Inputsunits
+ description: Overrides default unit (if any) defined in the service for
+ each port
+ inputAccess:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Inputaccess
+ description: map with key - access level pairs
+ inputNodes:
+ anyOf:
+ - items:
+ type: string
+ format: uuid
+ type: array
+ - type: 'null'
+ title: Inputnodes
+ description: node IDs of where the node is connected to
+ outputs:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Outputs
+ description: values of output properties
+ outputNode:
+ anyOf:
+ - type: boolean
+ - type: 'null'
+ title: Outputnode
+ deprecated: true
+ outputNodes:
+ anyOf:
+ - items:
+ type: string
+ format: uuid
+ type: array
+ - type: 'null'
+ title: Outputnodes
+ description: Used in group-nodes. Node IDs of those connected to the output
+ parent:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: Parent
+ description: Parent's (group-nodes') node ID s. Used to group
+ nullable: true
+ position:
+ anyOf:
+ - $ref: '#/components/schemas/Position'
+ - type: 'null'
+ description: Use projects_ui.WorkbenchUI.position instead
+ deprecated: true
+ state:
+ anyOf:
+ - $ref: '#/components/schemas/NodeState'
+ - type: 'null'
+ description: The node's state object
+ bootOptions:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Bootoptions
+ description: Some services provide alternative parameters to be injected
+ at boot time. The user selection should be stored here, and it will overwrite
+ the services's defaults.
+ additionalProperties: false
+ type: object
+ required:
+ - key
+ - version
+ - label
+ title: Node
+ Node-Output:
+ properties:
+ key:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Key
+ description: distinctive name for the node based on the docker registry
+ path
+ version:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Version
+ description: semantic version number of the node
+ label:
+ type: string
+ title: Label
+ description: The short name of the node
+ progress:
+ anyOf:
+ - type: number
+ maximum: 100.0
+ minimum: 0.0
+ - type: 'null'
+ title: Progress
+ description: the node progress value (deprecated in DB, still used for API
+ only)
+ deprecated: true
+ thumbnail:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Thumbnail
+ description: url of the latest screenshot of the node
+ runHash:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Runhash
+ description: the hex digest of the resolved inputs +outputs hash at the
+ time when the last outputs were generated
+ nullable: true
+ inputs:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Inputs
+ description: values of input properties
+ inputsRequired:
+ items:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ type: array
+ title: Inputsrequired
+ description: Defines inputs that are required in order to run the service
+ inputsUnits:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Inputsunits
+ description: Overrides default unit (if any) defined in the service for
+ each port
+ inputAccess:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Inputaccess
+ description: map with key - access level pairs
+ inputNodes:
+ anyOf:
+ - items:
+ type: string
+ format: uuid
+ type: array
+ - type: 'null'
+ title: Inputnodes
+ description: node IDs of where the node is connected to
+ outputs:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Outputs
+ description: values of output properties
+ outputNode:
+ anyOf:
+ - type: boolean
+ - type: 'null'
+ title: Outputnode
+ deprecated: true
+ outputNodes:
+ anyOf:
+ - items:
+ type: string
+ format: uuid
+ type: array
+ - type: 'null'
+ title: Outputnodes
+ description: Used in group-nodes. Node IDs of those connected to the output
+ parent:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: Parent
+ description: Parent's (group-nodes') node ID s. Used to group
+ nullable: true
+ position:
+ anyOf:
+ - $ref: '#/components/schemas/Position'
+ - type: 'null'
+ description: Use projects_ui.WorkbenchUI.position instead
+ deprecated: true
+ state:
+ anyOf:
+ - $ref: '#/components/schemas/NodeState'
+ - type: 'null'
+ description: The node's state object
+ bootOptions:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Bootoptions
+ description: Some services provide alternative parameters to be injected
+ at boot time. The user selection should be stored here, and it will overwrite
+ the services's defaults.
+ additionalProperties: false
+ type: object
+ required:
+ - key
+ - version
+ - label
+ title: Node
+ NodeCreate:
+ properties:
+ service_key:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ service_version:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ service_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Service Id
+ type: object
+ required:
+ - service_key
+ - service_version
+ title: NodeCreate
+ NodeCreated:
+ properties:
+ nodeId:
+ type: string
+ format: uuid
+ title: Nodeid
+ type: object
+ required:
+ - nodeId
+ title: NodeCreated
+ NodeGet:
+ properties:
+ publishedPort:
+ anyOf:
+ - type: integer
+ exclusiveMaximum: true
+ exclusiveMinimum: true
+ maximum: 65535
+ minimum: 0
+ - type: 'null'
+ title: Publishedport
+ description: The ports where the service provides its interface
+ entryPoint:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Entrypoint
+ description: The entry point where the service provides its interface if
+ specified
+ serviceUuid:
+ type: string
+ title: Serviceuuid
+ description: The UUID attached to this service
+ serviceKey:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Servicekey
+ description: distinctive name for the node based on the docker registry
+ path
+ serviceVersion:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Serviceversion
+ description: semantic version number
+ serviceHost:
+ type: string
+ title: Servicehost
+ description: service host name within the network
+ servicePort:
+ type: integer
+ exclusiveMaximum: true
+ exclusiveMinimum: true
+ title: Serviceport
+ description: port to access the service within the network
+ maximum: 65535
+ minimum: 0
+ serviceBasepath:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Servicebasepath
+ description: different base path where current service is mounted otherwise
+ defaults to root
+ default: ''
+ serviceState:
+ $ref: '#/components/schemas/ServiceState'
+ description: 'the service state * ''pending'' - The service is waiting for
+ resources to start * ''pulling'' - The service is being pulled from the
+ registry * ''starting'' - The service is starting * ''running'' - The
+ service is running * ''complete'' - The service completed * ''failed''
+ - The service failed to start
+
+ '
+ serviceMessage:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Servicemessage
+ description: the service message
+ userId:
+ type: string
+ title: Userid
+ description: the user that started the service
+ type: object
+ required:
+ - publishedPort
+ - serviceUuid
+ - serviceKey
+ - serviceVersion
+ - serviceHost
+ - servicePort
+ - serviceState
+ - userId
+ title: NodeGet
+ NodeGetIdle:
+ properties:
+ serviceState:
+ type: string
+ enum:
+ - idle
+ const: idle
+ title: Servicestate
+ serviceUuid:
+ type: string
+ format: uuid
+ title: Serviceuuid
+ type: object
+ required:
+ - serviceState
+ - serviceUuid
+ title: NodeGetIdle
+ example:
+ service_state: idle
+ service_uuid: 3fa85f64-5717-4562-b3fc-2c963f66afa6
+ NodeGetUnknown:
+ properties:
+ serviceState:
+ type: string
+ enum:
+ - unknown
+ const: unknown
+ title: Servicestate
+ serviceUuid:
+ type: string
+ format: uuid
+ title: Serviceuuid
+ type: object
+ required:
+ - serviceState
+ - serviceUuid
+ title: NodeGetUnknown
+ example:
+ service_state: unknown
+ service_uuid: 3fa85f64-5717-4562-b3fc-2c963f66afa6
+ NodeOutputs:
+ properties:
+ outputs:
+ type: object
+ title: Outputs
+ type: object
+ required:
+ - outputs
+ title: NodeOutputs
+ NodePatch:
+ properties:
+ key:
+ anyOf:
+ - type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ - type: 'null'
+ title: Key
+ version:
+ anyOf:
+ - type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ - type: 'null'
+ title: Version
+ label:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Label
+ inputs:
+ type: object
+ title: Inputs
+ inputsRequired:
+ anyOf:
+ - items:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ type: array
+ - type: 'null'
+ title: Inputsrequired
+ inputNodes:
+ anyOf:
+ - items:
+ type: string
+ format: uuid
+ type: array
+ - type: 'null'
+ title: Inputnodes
+ progress:
+ anyOf:
+ - type: number
+ maximum: 100.0
+ minimum: 0.0
+ - type: 'null'
+ title: Progress
+ bootOptions:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Bootoptions
+ outputs:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Outputs
+ type: object
+ title: NodePatch
+ NodeRetrieve:
+ properties:
+ port_keys:
+ items:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ type: array
+ title: Port Keys
+ default: []
+ type: object
+ title: NodeRetrieve
+ NodeRetrieved:
+ properties:
+ sizeBytes:
+ type: integer
+ minimum: 0
+ title: Sizebytes
+ description: The amount of data transferred by the retrieve call
+ type: object
+ required:
+ - sizeBytes
+ title: NodeRetrieved
+ NodeScreenshot:
+ properties:
+ thumbnail_url:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Thumbnail Url
+ file_url:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: File Url
+ mimetype:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Mimetype
+ description: File's media type or None if unknown. SEE https://www.iana.org/assignments/media-types/media-types.xhtml
+ type: object
+ required:
+ - thumbnail_url
+ - file_url
+ title: NodeScreenshot
+ NodeState:
+ properties:
+ modified:
+ type: boolean
+ title: Modified
+ description: true if the node's outputs need to be re-computed
+ default: true
+ dependencies:
+ items:
+ type: string
+ format: uuid
+ type: array
+ uniqueItems: true
+ title: Dependencies
+ description: contains the node inputs dependencies if they need to be computed
+ first
+ currentStatus:
+ $ref: '#/components/schemas/RunningState'
+ description: the node's current state
+ default: NOT_STARTED
+ progress:
+ anyOf:
+ - type: number
+ maximum: 1.0
+ minimum: 0.0
+ - type: 'null'
+ title: Progress
+ description: current progress of the task if available (None if not started
+ or not a computational task)
+ default: 0
+ additionalProperties: false
+ type: object
+ title: NodeState
+ NotificationCategory:
+ type: string
+ enum:
+ - NEW_ORGANIZATION
+ - STUDY_SHARED
+ - TEMPLATE_SHARED
+ - ANNOTATION_NOTE
+ - WALLET_SHARED
+ title: NotificationCategory
+ OsparcCreditsAggregatedByServiceGet:
+ properties:
+ osparc_credits:
+ type: string
+ title: Osparc Credits
+ service_key:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ running_time_in_hours:
+ type: string
+ title: Running Time In Hours
+ type: object
+ required:
+ - osparc_credits
+ - service_key
+ - running_time_in_hours
+ title: OsparcCreditsAggregatedByServiceGet
+ Owner:
+ properties:
+ user_id:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ description: Owner's user id
+ minimum: 0
+ first_name:
+ anyOf:
+ - type: string
+ maxLength: 255
+ - type: 'null'
+ title: First Name
+ description: Owner's first name
+ last_name:
+ anyOf:
+ - type: string
+ maxLength: 255
+ - type: 'null'
+ title: Last Name
+ description: Owner's last name
+ additionalProperties: false
+ type: object
+ required:
+ - user_id
+ - first_name
+ - last_name
+ title: Owner
+ PageLinks:
+ properties:
+ self:
+ type: string
+ title: Self
+ first:
+ type: string
+ title: First
+ prev:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Prev
+ next:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Next
+ last:
+ type: string
+ title: Last
+ additionalProperties: false
+ type: object
+ required:
+ - self
+ - first
+ - prev
+ - next
+ - last
+ title: PageLinks
+ PageMetaInfoLimitOffset:
+ properties:
+ limit:
+ type: integer
+ exclusiveMinimum: true
+ title: Limit
+ default: 20
+ minimum: 0
+ total:
+ type: integer
+ minimum: 0
+ title: Total
+ offset:
+ type: integer
+ minimum: 0
+ title: Offset
+ default: 0
+ count:
+ type: integer
+ minimum: 0
+ title: Count
+ additionalProperties: false
+ type: object
+ required:
+ - total
+ - count
+ title: PageMetaInfoLimitOffset
+ Page_CatalogServiceGet_:
+ properties:
+ _meta:
+ $ref: '#/components/schemas/PageMetaInfoLimitOffset'
+ _links:
+ $ref: '#/components/schemas/PageLinks'
+ data:
+ items:
+ $ref: '#/components/schemas/CatalogServiceGet'
+ type: array
+ title: Data
+ additionalProperties: false
+ type: object
+ required:
+ - _meta
+ - _links
+ - data
+ title: Page[CatalogServiceGet]
+ Page_CheckpointApiModel_:
+ properties:
+ _meta:
+ $ref: '#/components/schemas/PageMetaInfoLimitOffset'
+ _links:
+ $ref: '#/components/schemas/PageLinks'
+ data:
+ items:
+ $ref: '#/components/schemas/CheckpointApiModel'
+ type: array
+ title: Data
+ additionalProperties: false
+ type: object
+ required:
+ - _meta
+ - _links
+ - data
+ title: Page[CheckpointApiModel]
+ Page_PaymentTransaction_:
+ properties:
+ _meta:
+ $ref: '#/components/schemas/PageMetaInfoLimitOffset'
+ _links:
+ $ref: '#/components/schemas/PageLinks'
+ data:
+ items:
+ $ref: '#/components/schemas/PaymentTransaction'
+ type: array
+ title: Data
+ additionalProperties: false
+ type: object
+ required:
+ - _meta
+ - _links
+ - data
+ title: Page[PaymentTransaction]
+ Page_ProjectIterationItem_:
+ properties:
+ _meta:
+ $ref: '#/components/schemas/PageMetaInfoLimitOffset'
+ _links:
+ $ref: '#/components/schemas/PageLinks'
+ data:
+ items:
+ $ref: '#/components/schemas/ProjectIterationItem'
+ type: array
+ title: Data
+ additionalProperties: false
+ type: object
+ required:
+ - _meta
+ - _links
+ - data
+ title: Page[ProjectIterationItem]
+ Page_ProjectIterationResultItem_:
+ properties:
+ _meta:
+ $ref: '#/components/schemas/PageMetaInfoLimitOffset'
+ _links:
+ $ref: '#/components/schemas/PageLinks'
+ data:
+ items:
+ $ref: '#/components/schemas/ProjectIterationResultItem'
+ type: array
+ title: Data
+ additionalProperties: false
+ type: object
+ required:
+ - _meta
+ - _links
+ - data
+ title: Page[ProjectIterationResultItem]
+ Page_ProjectListItem_:
+ properties:
+ _meta:
+ $ref: '#/components/schemas/PageMetaInfoLimitOffset'
+ _links:
+ $ref: '#/components/schemas/PageLinks'
+ data:
+ items:
+ $ref: '#/components/schemas/ProjectListItem'
+ type: array
+ title: Data
+ additionalProperties: false
+ type: object
+ required:
+ - _meta
+ - _links
+ - data
+ title: Page[ProjectListItem]
+ Page_RepoApiModel_:
+ properties:
+ _meta:
+ $ref: '#/components/schemas/PageMetaInfoLimitOffset'
+ _links:
+ $ref: '#/components/schemas/PageLinks'
+ data:
+ items:
+ $ref: '#/components/schemas/RepoApiModel'
+ type: array
+ title: Data
+ additionalProperties: false
+ type: object
+ required:
+ - _meta
+ - _links
+ - data
+ title: Page[RepoApiModel]
+ ParentMetaProjectRef:
+ properties:
+ project_id:
+ type: string
+ format: uuid
+ title: Project Id
+ ref_id:
+ type: integer
+ exclusiveMinimum: true
+ title: Ref Id
+ minimum: 0
+ type: object
+ required:
+ - project_id
+ - ref_id
+ title: ParentMetaProjectRef
+ PatchRequestBody:
+ properties:
+ value:
+ title: Value
+ type: object
+ required:
+ - value
+ title: PatchRequestBody
+ PaymentMethodGet:
+ properties:
+ idr:
+ type: string
+ maxLength: 100
+ minLength: 1
+ title: Idr
+ walletId:
+ type: integer
+ exclusiveMinimum: true
+ title: Walletid
+ minimum: 0
+ cardHolderName:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Cardholdername
+ cardNumberMasked:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Cardnumbermasked
+ cardType:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Cardtype
+ expirationMonth:
+ anyOf:
+ - type: integer
+ - type: 'null'
+ title: Expirationmonth
+ expirationYear:
+ anyOf:
+ - type: integer
+ - type: 'null'
+ title: Expirationyear
+ created:
+ type: string
+ format: date-time
+ title: Created
+ autoRecharge:
+ type: boolean
+ title: Autorecharge
+ description: If true, this payment-method is used for auto-recharge
+ default: false
+ type: object
+ required:
+ - idr
+ - walletId
+ - created
+ title: PaymentMethodGet
+ PaymentMethodInitiated:
+ properties:
+ walletId:
+ type: integer
+ exclusiveMinimum: true
+ title: Walletid
+ minimum: 0
+ paymentMethodId:
+ type: string
+ maxLength: 100
+ minLength: 1
+ title: Paymentmethodid
+ paymentMethodFormUrl:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Paymentmethodformurl
+ description: Link to external site that holds the payment submission form
+ type: object
+ required:
+ - walletId
+ - paymentMethodId
+ - paymentMethodFormUrl
+ title: PaymentMethodInitiated
+ PaymentTransaction:
+ properties:
+ paymentId:
+ type: string
+ maxLength: 100
+ minLength: 1
+ title: Paymentid
+ priceDollars:
+ type: string
+ title: Pricedollars
+ walletId:
+ type: integer
+ exclusiveMinimum: true
+ title: Walletid
+ minimum: 0
+ osparcCredits:
+ type: string
+ title: Osparccredits
+ comment:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Comment
+ createdAt:
+ type: string
+ format: date-time
+ title: Createdat
+ completedAt:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Completedat
+ completedStatus:
+ type: string
+ enum:
+ - PENDING
+ - SUCCESS
+ - FAILED
+ - CANCELED
+ title: Completedstatus
+ stateMessage:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Statemessage
+ invoiceUrl:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Invoiceurl
+ type: object
+ required:
+ - paymentId
+ - priceDollars
+ - walletId
+ - osparcCredits
+ - createdAt
+ - completedAt
+ - completedStatus
+ title: PaymentTransaction
+ PermissionGet:
+ properties:
+ name:
+ type: string
+ title: Name
+ allowed:
+ type: boolean
+ title: Allowed
+ type: object
+ required:
+ - name
+ - allowed
+ title: PermissionGet
+ PhoneConfirmationBody:
+ properties:
+ email:
+ type: string
+ format: email
+ title: Email
+ phone:
+ type: string
+ title: Phone
+ description: Phone number E.164, needed on the deployments with 2FA
+ code:
+ type: string
+ format: password
+ title: Code
+ writeOnly: true
+ additionalProperties: false
+ type: object
+ required:
+ - email
+ - phone
+ - code
+ title: PhoneConfirmationBody
+ PortLink:
+ properties:
+ nodeUuid:
+ type: string
+ format: uuid
+ title: Nodeuuid
+ description: The node to get the port output from
+ output:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ title: Output
+ description: The port key in the node given by nodeUuid
+ additionalProperties: false
+ type: object
+ required:
+ - nodeUuid
+ - output
+ title: PortLink
+ description: I/O port type to reference to an output port of another node in
+ the same project
+ Position:
+ properties:
+ x:
+ type: integer
+ title: X
+ description: The x position
+ y:
+ type: integer
+ title: Y
+ description: The y position
+ additionalProperties: false
+ type: object
+ required:
+ - x
+ - y
+ title: Position
+ PreUserProfile:
+ properties:
+ firstName:
+ type: string
+ title: Firstname
+ lastName:
+ type: string
+ title: Lastname
+ email:
+ type: string
+ format: email
+ title: Email
+ institution:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Institution
+ description: company, university, ...
+ phone:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Phone
+ address:
+ type: string
+ title: Address
+ city:
+ type: string
+ title: City
+ state:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: State
+ postalCode:
+ type: string
+ title: Postalcode
+ country:
+ type: string
+ title: Country
+ extras:
+ type: object
+ title: Extras
+ description: Keeps extra information provided in the request form. At most
+ MAX_NUM_EXTRAS fields
+ type: object
+ required:
+ - firstName
+ - lastName
+ - email
+ - phone
+ - address
+ - city
+ - postalCode
+ - country
+ title: PreUserProfile
+ Preference:
+ properties:
+ defaultValue:
+ title: Defaultvalue
+ description: used by the frontend
+ value:
+ title: Value
+ description: preference value
+ type: object
+ required:
+ - defaultValue
+ - value
+ title: Preference
+ PresignedLink:
+ properties:
+ link:
+ type: string
+ minLength: 1
+ format: uri
+ title: Link
+ type: object
+ required:
+ - link
+ title: PresignedLink
+ PricingPlanAdminGet:
+ properties:
+ pricingPlanId:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricingplanid
+ minimum: 0
+ displayName:
+ type: string
+ title: Displayname
+ description:
+ type: string
+ title: Description
+ classification:
+ $ref: '#/components/schemas/PricingPlanClassification'
+ createdAt:
+ type: string
+ format: date-time
+ title: Createdat
+ pricingPlanKey:
+ type: string
+ title: Pricingplankey
+ pricingUnits:
+ anyOf:
+ - items:
+ $ref: '#/components/schemas/PricingUnitGet'
+ type: array
+ - type: 'null'
+ title: Pricingunits
+ isActive:
+ type: boolean
+ title: Isactive
+ type: object
+ required:
+ - pricingPlanId
+ - displayName
+ - description
+ - classification
+ - createdAt
+ - pricingPlanKey
+ - pricingUnits
+ - isActive
+ title: PricingPlanAdminGet
+ PricingPlanClassification:
+ type: string
+ enum:
+ - TIER
+ const: TIER
+ title: PricingPlanClassification
+ PricingPlanToServiceAdminGet:
+ properties:
+ pricingPlanId:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricingplanid
+ minimum: 0
+ serviceKey:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Servicekey
+ serviceVersion:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Serviceversion
+ created:
+ type: string
+ format: date-time
+ title: Created
+ type: object
+ required:
+ - pricingPlanId
+ - serviceKey
+ - serviceVersion
+ - created
+ title: PricingPlanToServiceAdminGet
+ PricingUnitAdminGet:
+ properties:
+ pricingUnitId:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricingunitid
+ minimum: 0
+ unitName:
+ type: string
+ title: Unitname
+ unitExtraInfo:
+ $ref: '#/components/schemas/UnitExtraInfo-Output'
+ currentCostPerUnit:
+ type: number
+ title: Currentcostperunit
+ default:
+ type: boolean
+ title: Default
+ specificInfo:
+ $ref: '#/components/schemas/HardwareInfo'
+ type: object
+ required:
+ - pricingUnitId
+ - unitName
+ - unitExtraInfo
+ - currentCostPerUnit
+ - default
+ - specificInfo
+ title: PricingUnitAdminGet
+ PricingUnitCostUpdate:
+ properties:
+ cost_per_unit:
+ anyOf:
+ - type: number
+ - type: string
+ title: Cost Per Unit
+ comment:
+ type: string
+ title: Comment
+ type: object
+ required:
+ - cost_per_unit
+ - comment
+ title: PricingUnitCostUpdate
+ PricingUnitGet:
+ properties:
+ pricingUnitId:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricingunitid
+ minimum: 0
+ unitName:
+ type: string
+ title: Unitname
+ unitExtraInfo:
+ $ref: '#/components/schemas/UnitExtraInfo-Output'
+ currentCostPerUnit:
+ type: number
+ title: Currentcostperunit
+ default:
+ type: boolean
+ title: Default
+ type: object
+ required:
+ - pricingUnitId
+ - unitName
+ - unitExtraInfo
+ - currentCostPerUnit
+ - default
+ title: PricingUnitGet
+ ProfileGet:
+ properties:
+ id:
+ type: integer
+ exclusiveMinimum: true
+ title: Id
+ minimum: 0
+ first_name:
+ anyOf:
+ - type: string
+ maxLength: 255
+ - type: 'null'
+ title: First Name
+ last_name:
+ anyOf:
+ - type: string
+ maxLength: 255
+ - type: 'null'
+ title: Last Name
+ login:
+ type: string
+ format: email
+ title: Login
+ role:
+ type: string
+ enum:
+ - ANONYMOUS
+ - GUEST
+ - USER
+ - TESTER
+ - PRODUCT_OWNER
+ - ADMIN
+ title: Role
+ groups:
+ anyOf:
+ - $ref: '#/components/schemas/MyGroupsGet'
+ - type: 'null'
+ gravatar_id:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Gravatar Id
+ expirationDate:
+ anyOf:
+ - type: string
+ format: date
+ - type: 'null'
+ title: Expirationdate
+ description: If user has a trial account, it sets the expiration date, otherwise
+ None
+ preferences:
+ additionalProperties:
+ $ref: '#/components/schemas/Preference'
+ type: object
+ title: Preferences
+ type: object
+ required:
+ - id
+ - login
+ - role
+ - preferences
+ title: ProfileGet
+ ProfileUpdate:
+ properties:
+ first_name:
+ anyOf:
+ - type: string
+ maxLength: 255
+ - type: 'null'
+ title: First Name
+ last_name:
+ anyOf:
+ - type: string
+ maxLength: 255
+ - type: 'null'
+ title: Last Name
+ type: object
+ title: ProfileUpdate
+ example:
+ first_name: Pedro
+ last_name: Crespo
+ ProjectCopyOverride:
+ properties:
+ name:
+ type: string
+ title: Name
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ prjOwner:
+ type: string
+ format: email
+ title: Prjowner
+ type: object
+ required:
+ - name
+ - prjOwner
+ title: ProjectCopyOverride
+ ProjectCreateNew:
+ properties:
+ uuid:
+ anyOf:
+ - type: string
+ format: uuid
+ - type: 'null'
+ title: Uuid
+ name:
+ type: string
+ title: Name
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ workbench:
+ type: object
+ title: Workbench
+ accessRights:
+ additionalProperties:
+ $ref: '#/components/schemas/AccessRights'
+ type: object
+ title: Accessrights
+ tags:
+ items:
+ type: integer
+ type: array
+ title: Tags
+ classifiers:
+ items:
+ type: string
+ type: array
+ title: Classifiers
+ ui:
+ anyOf:
+ - $ref: '#/components/schemas/StudyUI-Input'
+ - type: 'null'
+ workspaceId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Workspaceid
+ folderId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Folderid
+ type: object
+ required:
+ - name
+ - workbench
+ - accessRights
+ title: ProjectCreateNew
+ ProjectGet:
+ properties:
+ uuid:
+ type: string
+ format: uuid
+ title: Uuid
+ name:
+ type: string
+ title: Name
+ description:
+ type: string
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: string
+ enum:
+ - ''
+ const: ''
+ title: Thumbnail
+ creationDate:
+ type: string
+ pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z
+ title: Creationdate
+ lastChangeDate:
+ type: string
+ pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z
+ title: Lastchangedate
+ workbench:
+ type: object
+ title: Workbench
+ prjOwner:
+ type: string
+ format: email
+ title: Prjowner
+ accessRights:
+ additionalProperties:
+ $ref: '#/components/schemas/AccessRights'
+ type: object
+ title: Accessrights
+ tags:
+ items:
+ type: integer
+ type: array
+ title: Tags
+ classifiers:
+ items:
+ type: string
+ type: array
+ title: Classifiers
+ default: []
+ state:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectState'
+ - type: 'null'
+ ui:
+ anyOf:
+ - $ref: '#/components/schemas/EmptyModel'
+ - $ref: '#/components/schemas/StudyUI-Output'
+ - type: 'null'
+ title: Ui
+ quality:
+ type: object
+ title: Quality
+ default: {}
+ dev:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Dev
+ permalink:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectPermalink'
+ - type: 'null'
+ workspaceId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Workspaceid
+ folderId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Folderid
+ trashedAt:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Trashedat
+ type: object
+ required:
+ - uuid
+ - name
+ - description
+ - thumbnail
+ - creationDate
+ - lastChangeDate
+ - workbench
+ - prjOwner
+ - accessRights
+ - tags
+ - dev
+ - workspaceId
+ - folderId
+ - trashedAt
+ title: ProjectGet
+ ProjectGroupGet:
+ properties:
+ gid:
+ type: integer
+ exclusiveMinimum: true
+ title: Gid
+ minimum: 0
+ read:
+ type: boolean
+ title: Read
+ write:
+ type: boolean
+ title: Write
+ delete:
+ type: boolean
+ title: Delete
+ created:
+ type: string
+ format: date-time
+ title: Created
+ modified:
+ type: string
+ format: date-time
+ title: Modified
+ type: object
+ required:
+ - gid
+ - read
+ - write
+ - delete
+ - created
+ - modified
+ title: ProjectGroupGet
+ ProjectInputGet:
+ properties:
+ key:
+ type: string
+ format: uuid
+ title: Key
+ description: Project port's unique identifer. Same as the UUID of the associated
+ port node
+ value:
+ title: Value
+ description: Value assigned to this i/o port
+ label:
+ type: string
+ title: Label
+ type: object
+ required:
+ - key
+ - value
+ - label
+ title: ProjectInputGet
+ ProjectInputUpdate:
+ properties:
+ key:
+ type: string
+ format: uuid
+ title: Key
+ description: Project port's unique identifer. Same as the UUID of the associated
+ port node
+ value:
+ title: Value
+ description: Value assigned to this i/o port
+ type: object
+ required:
+ - key
+ - value
+ title: ProjectInputUpdate
+ ProjectIterationItem:
+ properties:
+ name:
+ type: string
+ title: Name
+ description: Iteration's resource API name
+ parent:
+ $ref: '#/components/schemas/ParentMetaProjectRef'
+ description: Reference to the the meta-project that created this iteration
+ iteration_index:
+ type: integer
+ exclusiveMinimum: true
+ title: Iteration Index
+ minimum: 0
+ workcopy_project_id:
+ type: string
+ format: uuid
+ title: Workcopy Project Id
+ description: ID to this iteration's working copy.A working copy is a real
+ project where this iteration is run
+ workcopy_project_url:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Workcopy Project Url
+ description: reference to a working copy project
+ type: object
+ required:
+ - name
+ - parent
+ - iteration_index
+ - workcopy_project_id
+ - workcopy_project_url
+ title: ProjectIterationItem
+ ProjectIterationResultItem:
+ properties:
+ name:
+ type: string
+ title: Name
+ description: Iteration's resource API name
+ parent:
+ $ref: '#/components/schemas/ParentMetaProjectRef'
+ description: Reference to the the meta-project that created this iteration
+ iteration_index:
+ type: integer
+ exclusiveMinimum: true
+ title: Iteration Index
+ minimum: 0
+ workcopy_project_id:
+ type: string
+ format: uuid
+ title: Workcopy Project Id
+ description: ID to this iteration's working copy.A working copy is a real
+ project where this iteration is run
+ workcopy_project_url:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Workcopy Project Url
+ description: reference to a working copy project
+ results:
+ $ref: '#/components/schemas/ExtractedResults'
+ type: object
+ required:
+ - name
+ - parent
+ - iteration_index
+ - workcopy_project_id
+ - workcopy_project_url
+ - results
+ title: ProjectIterationResultItem
+ ProjectListItem:
+ properties:
+ uuid:
+ type: string
+ format: uuid
+ title: Uuid
+ name:
+ type: string
+ title: Name
+ description:
+ type: string
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: string
+ enum:
+ - ''
+ const: ''
+ title: Thumbnail
+ creationDate:
+ type: string
+ pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z
+ title: Creationdate
+ lastChangeDate:
+ type: string
+ pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z
+ title: Lastchangedate
+ workbench:
+ type: object
+ title: Workbench
+ prjOwner:
+ type: string
+ format: email
+ title: Prjowner
+ accessRights:
+ additionalProperties:
+ $ref: '#/components/schemas/AccessRights'
+ type: object
+ title: Accessrights
+ tags:
+ items:
+ type: integer
+ type: array
+ title: Tags
+ classifiers:
+ items:
+ type: string
+ type: array
+ title: Classifiers
+ default: []
+ state:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectState'
+ - type: 'null'
+ ui:
+ anyOf:
+ - $ref: '#/components/schemas/EmptyModel'
+ - $ref: '#/components/schemas/StudyUI-Output'
+ - type: 'null'
+ title: Ui
+ quality:
+ type: object
+ title: Quality
+ default: {}
+ dev:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Dev
+ permalink:
+ anyOf:
+ - $ref: '#/components/schemas/ProjectPermalink'
+ - type: 'null'
+ workspaceId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Workspaceid
+ folderId:
+ anyOf:
+ - type: integer
+ exclusiveMinimum: true
+ minimum: 0
+ - type: 'null'
+ title: Folderid
+ trashedAt:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Trashedat
+ type: object
+ required:
+ - uuid
+ - name
+ - description
+ - thumbnail
+ - creationDate
+ - lastChangeDate
+ - workbench
+ - prjOwner
+ - accessRights
+ - tags
+ - dev
+ - workspaceId
+ - folderId
+ - trashedAt
+ title: ProjectListItem
+ ProjectLocked:
+ properties:
+ value:
+ type: boolean
+ title: Value
+ description: True if the project is locked
+ status:
+ $ref: '#/components/schemas/ProjectStatus'
+ description: The status of the project
+ owner:
+ anyOf:
+ - $ref: '#/components/schemas/Owner'
+ - type: 'null'
+ description: If locked, the user that owns the lock
+ additionalProperties: false
+ type: object
+ required:
+ - value
+ - status
+ title: ProjectLocked
+ ProjectMetadataGet:
+ properties:
+ projectUuid:
+ type: string
+ format: uuid
+ title: Projectuuid
+ custom:
+ additionalProperties:
+ anyOf:
+ - type: boolean
+ - type: integer
+ - type: number
+ - type: string
+ type: object
+ title: Custom
+ description: Custom key-value map
+ type: object
+ required:
+ - projectUuid
+ title: ProjectMetadataGet
+ ProjectMetadataPortGet:
+ properties:
+ key:
+ type: string
+ format: uuid
+ title: Key
+ description: Project port's unique identifer. Same as the UUID of the associated
+ port node
+ kind:
+ type: string
+ enum:
+ - input
+ - output
+ title: Kind
+ content_schema:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Content Schema
+ description: jsonschema for the port's value. SEE https://json-schema.org/understanding-json-schema/
+ type: object
+ required:
+ - key
+ - kind
+ title: ProjectMetadataPortGet
+ ProjectMetadataUpdate:
+ properties:
+ custom:
+ additionalProperties:
+ anyOf:
+ - type: boolean
+ - type: integer
+ - type: number
+ - type: string
+ type: object
+ title: Custom
+ type: object
+ required:
+ - custom
+ title: ProjectMetadataUpdate
+ ProjectOutputGet:
+ properties:
+ key:
+ type: string
+ format: uuid
+ title: Key
+ description: Project port's unique identifer. Same as the UUID of the associated
+ port node
+ value:
+ title: Value
+ description: Value assigned to this i/o port
+ label:
+ type: string
+ title: Label
+ type: object
+ required:
+ - key
+ - value
+ - label
+ title: ProjectOutputGet
+ ProjectPatch:
+ properties:
+ name:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Name
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ - type: 'null'
+ title: Thumbnail
+ accessRights:
+ anyOf:
+ - additionalProperties:
+ $ref: '#/components/schemas/AccessRights'
+ type: object
+ - type: 'null'
+ title: Accessrights
+ classifiers:
+ anyOf:
+ - items:
+ type: string
+ type: array
+ - type: 'null'
+ title: Classifiers
+ dev:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Dev
+ ui:
+ anyOf:
+ - $ref: '#/components/schemas/StudyUI-Input'
+ - type: 'null'
+ quality:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Quality
+ type: object
+ title: ProjectPatch
+ ProjectPermalink:
+ properties:
+ url:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Url
+ is_public:
+ type: boolean
+ title: Is Public
+ type: object
+ required:
+ - url
+ - is_public
+ title: ProjectPermalink
+ ProjectRunningState:
+ properties:
+ value:
+ $ref: '#/components/schemas/RunningState'
+ description: The running state of the project
+ additionalProperties: false
+ type: object
+ required:
+ - value
+ title: ProjectRunningState
+ ProjectState:
+ properties:
+ locked:
+ $ref: '#/components/schemas/ProjectLocked'
+ description: The project lock state
+ state:
+ $ref: '#/components/schemas/ProjectRunningState'
+ description: The project running state
+ additionalProperties: false
+ type: object
+ required:
+ - locked
+ - state
+ title: ProjectState
+ ProjectStatus:
+ type: string
+ enum:
+ - CLOSED
+ - CLOSING
+ - CLONING
+ - EXPORTING
+ - OPENING
+ - OPENED
+ - MAINTAINING
+ title: ProjectStatus
+ ProjectTypeAPI:
+ type: string
+ enum:
+ - all
+ - template
+ - user
+ title: ProjectTypeAPI
+ ProjectsCommentsAPI:
+ properties:
+ comment_id:
+ type: integer
+ exclusiveMinimum: true
+ title: Comment Id
+ description: Primary key, identifies the comment
+ minimum: 0
+ project_uuid:
+ type: string
+ format: uuid
+ title: Project Uuid
+ description: project reference for this table
+ user_id:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ description: user reference for this table
+ minimum: 0
+ contents:
+ type: string
+ title: Contents
+ description: Contents of the comment
+ created:
+ type: string
+ format: date-time
+ title: Created
+ description: Timestamp on creation
+ modified:
+ type: string
+ format: date-time
+ title: Modified
+ description: Timestamp with last update
+ additionalProperties: false
+ type: object
+ required:
+ - comment_id
+ - project_uuid
+ - user_id
+ - contents
+ - created
+ - modified
+ title: ProjectsCommentsAPI
+ PutWalletBodyParams:
+ properties:
+ name:
+ type: string
+ title: Name
+ description:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Description
+ thumbnail:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Thumbnail
+ status:
+ $ref: '#/components/schemas/WalletStatus'
+ type: object
+ required:
+ - name
+ - description
+ - thumbnail
+ - status
+ title: PutWalletBodyParams
+ RegisterBody:
+ properties:
+ email:
+ type: string
+ format: email
+ title: Email
+ password:
+ type: string
+ format: password
+ title: Password
+ writeOnly: true
+ confirm:
+ anyOf:
+ - type: string
+ format: password
+ writeOnly: true
+ - type: 'null'
+ title: Confirm
+ description: Password confirmation
+ invitation:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Invitation
+ description: Invitation code
+ additionalProperties: false
+ type: object
+ required:
+ - email
+ - password
+ title: RegisterBody
+ RegisterPhoneBody:
+ properties:
+ email:
+ type: string
+ format: email
+ title: Email
+ phone:
+ type: string
+ title: Phone
+ description: Phone number E.164, needed on the deployments with 2FA
+ additionalProperties: false
+ type: object
+ required:
+ - email
+ - phone
+ title: RegisterPhoneBody
+ RegisterPhoneNextPage:
+ properties:
+ name:
+ type: string
+ title: Name
+ description: Code name to the front-end page. Ideally a PageStr
+ parameters:
+ anyOf:
+ - $ref: '#/components/schemas/_PageParams'
+ - type: 'null'
+ logger:
+ type: string
+ title: Logger
+ default: user
+ deprecated: true
+ level:
+ type: string
+ enum:
+ - INFO
+ - WARNING
+ - ERROR
+ title: Level
+ default: INFO
+ message:
+ type: string
+ title: Message
+ type: object
+ required:
+ - name
+ - message
+ title: RegisterPhoneNextPage
+ ReplaceWalletAutoRecharge:
+ properties:
+ enabled:
+ type: boolean
+ title: Enabled
+ paymentMethodId:
+ type: string
+ maxLength: 100
+ minLength: 1
+ title: Paymentmethodid
+ topUpAmountInUsd:
+ anyOf:
+ - type: number
+ minimum: 0.0
+ - type: string
+ title: Topupamountinusd
+ monthlyLimitInUsd:
+ anyOf:
+ - type: number
+ minimum: 0.0
+ - type: string
+ - type: 'null'
+ title: Monthlylimitinusd
+ type: object
+ required:
+ - enabled
+ - paymentMethodId
+ - topUpAmountInUsd
+ - monthlyLimitInUsd
+ title: ReplaceWalletAutoRecharge
+ RepoApiModel:
+ properties:
+ project_uuid:
+ type: string
+ format: uuid
+ title: Project Uuid
+ url:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Url
+ type: object
+ required:
+ - project_uuid
+ - url
+ title: RepoApiModel
+ ResearchResource:
+ properties:
+ rrid:
+ type: string
+ pattern: ^(RRID:)([^_\s]{1,30})_(\S{1,30})$
+ title: Rrid
+ description: Unique identifier used as classifier, i.e. to tag studies and
+ services
+ name:
+ type: string
+ title: Name
+ description:
+ type: string
+ title: Description
+ type: object
+ required:
+ - rrid
+ - name
+ - description
+ title: ResearchResource
+ Resend2faBody:
+ properties:
+ email:
+ type: string
+ format: email
+ title: Email
+ description: User email (identifier)
+ via:
+ type: string
+ enum:
+ - SMS
+ - Email
+ title: Via
+ default: SMS
+ additionalProperties: false
+ type: object
+ required:
+ - email
+ title: Resend2faBody
+ ResetPasswordBody:
+ properties:
+ email:
+ type: string
+ title: Email
+ additionalProperties: false
+ type: object
+ required:
+ - email
+ title: ResetPasswordBody
+ ResetPasswordConfirmation:
+ properties:
+ password:
+ type: string
+ format: password
+ title: Password
+ writeOnly: true
+ confirm:
+ type: string
+ format: password
+ title: Confirm
+ writeOnly: true
+ additionalProperties: false
+ type: object
+ required:
+ - password
+ - confirm
+ title: ResetPasswordConfirmation
+ ResourceHit:
+ properties:
+ rid:
+ type: string
+ title: Rid
+ name:
+ type: string
+ title: Name
+ type: object
+ required:
+ - rid
+ - name
+ title: ResourceHit
+ ResourceValue:
+ properties:
+ limit:
+ anyOf:
+ - type: integer
+ - type: number
+ - type: string
+ title: Limit
+ reservation:
+ anyOf:
+ - type: integer
+ - type: number
+ - type: string
+ title: Reservation
+ type: object
+ required:
+ - limit
+ - reservation
+ title: ResourceValue
+ RunningDynamicServiceDetails:
+ properties:
+ service_key:
+ type: string
+ pattern: ^simcore/services/dynamic/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Service Key
+ description: distinctive name for the node based on the docker registry
+ path
+ service_version:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Service Version
+ description: semantic version number of the node
+ user_id:
+ type: integer
+ exclusiveMinimum: true
+ title: User Id
+ minimum: 0
+ project_id:
+ type: string
+ format: uuid
+ title: Project Id
+ service_uuid:
+ type: string
+ format: uuid
+ title: Service Uuid
+ service_basepath:
+ anyOf:
+ - type: string
+ format: path
+ - type: 'null'
+ title: Service Basepath
+ description: predefined path where the dynamic service should be served.
+ If empty, the service shall use the root endpoint.
+ boot_type:
+ $ref: '#/components/schemas/ServiceBootType'
+ description: Describes how the dynamic services was started (legacy=V0,
+ modern=V2).Since legacy services do not have this label it defaults to
+ V0.
+ default: V0
+ service_host:
+ type: string
+ title: Service Host
+ description: the service swarm internal host name
+ service_port:
+ type: integer
+ exclusiveMaximum: true
+ exclusiveMinimum: true
+ title: Service Port
+ description: the service swarm internal port
+ maximum: 65535
+ minimum: 0
+ published_port:
+ anyOf:
+ - type: integer
+ exclusiveMaximum: true
+ exclusiveMinimum: true
+ maximum: 65535
+ minimum: 0
+ - type: 'null'
+ title: Published Port
+ description: the service swarm published port if any
+ deprecated: true
+ entry_point:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Entry Point
+ description: if empty the service entrypoint is on the root endpoint.
+ deprecated: true
+ service_state:
+ $ref: '#/components/schemas/ServiceState'
+ description: service current state
+ service_message:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Service Message
+ description: additional information related to service state
+ type: object
+ required:
+ - service_key
+ - service_version
+ - user_id
+ - project_id
+ - service_uuid
+ - service_host
+ - service_port
+ - service_state
+ title: RunningDynamicServiceDetails
+ RunningState:
+ type: string
+ enum:
+ - UNKNOWN
+ - PUBLISHED
+ - NOT_STARTED
+ - PENDING
+ - WAITING_FOR_RESOURCES
+ - STARTED
+ - SUCCESS
+ - FAILED
+ - ABORTED
+ - WAITING_FOR_CLUSTER
+ title: RunningState
+ description: 'State of execution of a project''s computational workflow
+
+
+ SEE StateType for task state'
+ Scheduler:
+ properties:
+ status:
+ type: string
+ title: Status
+ description: The running status of the scheduler
+ workers:
+ anyOf:
+ - additionalProperties:
+ $ref: '#/components/schemas/Worker'
+ type: object
+ - type: 'null'
+ title: Workers
+ type: object
+ required:
+ - status
+ title: Scheduler
+ SelectBox:
+ properties:
+ structure:
+ items:
+ $ref: '#/components/schemas/Structure'
+ type: array
+ minItems: 1
+ title: Structure
+ additionalProperties: false
+ type: object
+ required:
+ - structure
+ title: SelectBox
+ ServiceBootType:
+ type: string
+ enum:
+ - V0
+ - V2
+ title: ServiceBootType
+ ServiceGet:
+ properties:
+ key:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Key
+ description: Service key ID
+ title:
+ type: string
+ title: Title
+ description: Service name for display
+ description:
+ type: string
+ title: Description
+ description: Long description of the service
+ thumbnail:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: Thumbnail
+ description: Url to service thumbnail
+ file_extensions:
+ items:
+ type: string
+ type: array
+ title: File Extensions
+ description: File extensions that this service can process
+ view_url:
+ type: string
+ maxLength: 2083
+ minLength: 1
+ format: uri
+ title: View Url
+ description: Redirection to open a service in osparc (see /view)
+ type: object
+ required:
+ - key
+ - title
+ - description
+ - thumbnail
+ - view_url
+ title: ServiceGet
+ example:
+ description: It is also sim4life for the web
+ file_extensions:
+ - smash
+ - h5
+ key: simcore/services/dynamic/sim4life
+ thumbnail: https://via.placeholder.com/170x120.png
+ title: Sim4Life Mattermost
+ view_url: https://host.com/view?viewer_key=simcore/services/dynamic/raw-graphs&viewer_version=1.2.3
+ ServiceGroupAccessRightsV2:
+ properties:
+ execute:
+ type: boolean
+ title: Execute
+ default: false
+ write:
+ type: boolean
+ title: Write
+ default: false
+ additionalProperties: false
+ type: object
+ title: ServiceGroupAccessRightsV2
+ ServiceInputGet:
+ properties:
+ unitLong:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Unitlong
+ description: Long name of the unit for display (html-compatible), if available
+ unitShort:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Unitshort
+ description: Short name for the unit for display (html-compatible), if available
+ displayOrder:
+ anyOf:
+ - type: number
+ - type: 'null'
+ title: Displayorder
+ description: 'DEPRECATED: new display order is taken from the item position.
+ This will be removed.'
+ deprecated: true
+ label:
+ type: string
+ title: Label
+ description: short name for the property
+ description:
+ type: string
+ title: Description
+ description: description of the property
+ type:
+ type: string
+ pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$
+ title: Type
+ description: data type expected on this input glob matching for data type
+ is allowed
+ contentSchema:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Contentschema
+ description: jsonschema of this input/output. Required when type='ref_contentSchema'
+ fileToKeyMap:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Filetokeymap
+ description: Place the data associated with the named keys in files
+ unit:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Unit
+ description: Units, when it refers to a physical quantity
+ deprecated: true
+ defaultValue:
+ anyOf:
+ - type: boolean
+ - type: integer
+ - type: number
+ - type: string
+ - type: 'null'
+ title: Defaultvalue
+ deprecated: true
+ widget:
+ anyOf:
+ - $ref: '#/components/schemas/Widget'
+ - type: 'null'
+ description: custom widget to use instead of the default one determined
+ from the data-type
+ keyId:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ title: Keyid
+ description: Unique name identifier for this input
+ additionalProperties: false
+ type: object
+ required:
+ - label
+ - description
+ - type
+ - keyId
+ title: ServiceInputGet
+ description: Extends fields of api_schemas_catalog.services.ServiceGet.outputs[*]
+ example:
+ defaultValue: 0
+ description: Time to wait before completion
+ displayOrder: 2
+ keyId: input_2
+ label: Sleep Time
+ type: number
+ unit: second
+ unitLong: seconds
+ unitShort: sec
+ widget:
+ details:
+ minHeight: 1
+ type: TextArea
+ ServiceKeyVersion:
+ properties:
+ key:
+ type: string
+ pattern: ^simcore/services/((comp|dynamic|frontend))/([a-z0-9][a-z0-9_.-]*/)*([a-z0-9-_]+[a-z0-9])$
+ title: Key
+ description: distinctive name for the node based on the docker registry
+ path
+ version:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Version
+ description: service version number
+ type: object
+ required:
+ - key
+ - version
+ title: ServiceKeyVersion
+ description: Service `key-version` pair uniquely identifies a service
+ ServiceOutputGet:
+ properties:
+ unitLong:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Unitlong
+ description: Long name of the unit for display (html-compatible), if available
+ unitShort:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Unitshort
+ description: Short name for the unit for display (html-compatible), if available
+ displayOrder:
+ anyOf:
+ - type: number
+ - type: 'null'
+ title: Displayorder
+ description: 'DEPRECATED: new display order is taken from the item position.
+ This will be removed.'
+ deprecated: true
+ label:
+ type: string
+ title: Label
+ description: short name for the property
+ description:
+ type: string
+ title: Description
+ description: description of the property
+ type:
+ type: string
+ pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$
+ title: Type
+ description: data type expected on this input glob matching for data type
+ is allowed
+ contentSchema:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Contentschema
+ description: jsonschema of this input/output. Required when type='ref_contentSchema'
+ fileToKeyMap:
+ anyOf:
+ - type: object
+ - type: 'null'
+ title: Filetokeymap
+ description: Place the data associated with the named keys in files
+ unit:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Unit
+ description: Units, when it refers to a physical quantity
+ deprecated: true
+ widget:
+ anyOf:
+ - $ref: '#/components/schemas/Widget'
+ - type: 'null'
+ description: custom widget to use instead of the default one determined
+ from the data-type
+ deprecated: true
+ keyId:
+ type: string
+ pattern: ^[-_a-zA-Z0-9]+$
+ title: Keyid
+ description: Unique name identifier for this input
+ additionalProperties: false
+ type: object
+ required:
+ - label
+ - description
+ - type
+ - keyId
+ title: ServiceOutputGet
+ description: Extends fields of api_schemas_catalog.services.ServiceGet.outputs[*]
+ example:
+ description: Time the service waited before completion
+ displayOrder: 2
+ keyId: output_2
+ label: Time Slept
+ type: number
+ unit: second
+ unitLong: seconds
+ unitShort: sec
+ ServicePricingPlanGet:
+ properties:
+ pricingPlanId:
+ type: integer
+ exclusiveMinimum: true
+ title: Pricingplanid
+ minimum: 0
+ displayName:
+ type: string
+ title: Displayname
+ description:
+ type: string
+ title: Description
+ classification:
+ $ref: '#/components/schemas/PricingPlanClassification'
+ createdAt:
+ type: string
+ format: date-time
+ title: Createdat
+ pricingPlanKey:
+ type: string
+ title: Pricingplankey
+ pricingUnits:
+ items:
+ $ref: '#/components/schemas/PricingUnitGet'
+ type: array
+ title: Pricingunits
+ type: object
+ required:
+ - pricingPlanId
+ - displayName
+ - description
+ - classification
+ - createdAt
+ - pricingPlanKey
+ - pricingUnits
+ title: ServicePricingPlanGet
+ ServiceRelease:
+ properties:
+ version:
+ type: string
+ pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$
+ title: Version
+ versionDisplay:
+ anyOf:
+ - type: string
+ - type: 'null'
+ title: Versiondisplay
+ description: If None, then display `version`
+ released:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Released
+ description: When provided, it indicates the release timestamp
+ retired:
+ anyOf:
+ - type: string
+ format: date-time
+ - type: 'null'
+ title: Retired
+ description: 'whether this service is planned to be retired. If None, the
+ service is still active. If now