diff --git a/docs/api_doc/butler-api.json b/docs/api_doc/butler-api.json index 84820e13..0dbf720b 100644 --- a/docs/api_doc/butler-api.json +++ b/docs/api_doc/butler-api.json @@ -1,1997 +1 @@ -{ - "swagger": "2.0", - "info": { - "title": "Butler API documentation", - "description": "Butler is a microservice that provides add-on features to Qlik Sense Enterprise on Windows.\nButler offers both a REST API and things like failed reload notifications etc.\n\nThis page contains the API documentation. Full documentation is available at https://butler.ptarmiganlabs.com", - "version": "8.2.0" - }, - "definitions": {}, - "paths": { - "/v4/configfile/endpointsenabled": { - "get": { - "summary": "Get an array of all enabled API endpoints.", - "description": "Get an array of all enabled API endpoints, using the key names from the Butler config file.\n\nNote: Endpoints are enabled/disabled in the Butler main configuration file.", - "responses": { - "200": { - "description": "Enabled API enpooints.", - "schema": { - "description": "Enabled API enpooints.", - "type": "array", - "items": { "type": "string" }, - "example": [ - "activeUserCount", - "activeUsers", - "apiListEnbledEndpoints" - ] - } - } - } - } - }, - "/v4/base62tobase16": { - "get": { - "summary": "Converts strings from base62 to base16.", - "description": "Converts strings from base62 to base16.", - "parameters": [ - { - "type": "string", - "description": "The base62 encoded string that should be converted to base16", - "example": "6DMW88LpSok9Z7P7hUK0wv7bF", - "required": true, - "in": "query", - "name": "base62" - } - ], - "responses": { - "200": { - "description": "Base conversion successful.", - "schema": { - "description": "Base conversion successful.", - "type": "object", - "properties": { - "base62": { - "type": "string", - "description": "The base62 encoded string that should be converted to base16" - }, - "base16": { - "type": "string", - "description": "Resulting base16 encoded string." - } - }, - "example": { - "base62": "6DMW88LpSok9Z7P7hUK0wv7bF", - "base16": "3199af08bfeeaf5d420f27ed9c01e74370077" - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/base16tobase62": { - "get": { - "summary": "Converts strings from base16 to base62.", - "description": "Converts strings from base16 to base62.", - "parameters": [ - { - "type": "string", - "description": "The base16 encoded string that should be converted to base62", - "example": "3199af08bfeeaf5d420f27ed9c01e74370077", - "required": true, - "in": "query", - "name": "base16" - } - ], - "responses": { - "200": { - "description": "Base conversion successful.", - "schema": { - "description": "Base conversion successful.", - "type": "object", - "properties": { - "base62": { - "type": "string", - "description": "The base62 encoded string that should be converted to base16" - }, - "base16": { - "type": "string", - "description": "Resulting base62 encoded string." - } - }, - "example": { - "base16": "3199af08bfeeaf5d420f27ed9c01e74370077", - "base62": "6DMW88LpSok9Z7P7hUK0wv7bF" - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/butlerping": { - "get": { - "summary": "Tests if Butler is alive and responding", - "description": "Tests if Butler is alive and responding", - "responses": { - "200": { - "description": "Butler is alive and well.", - "schema": { - "description": "Butler is alive and well.", - "type": "object", - "properties": { - "response": { - "type": "string", - "example": "Butler reporting for duty" - }, - "butlerVersion": { "type": "string", "example": "5.5.0" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/filecopy": { - "put": { - "summary": "Copy file(s) between well defined, approved locations.", - "description": "Copying of files is only posttible between pre-approved directories.\nDefining approved source and destination directories is done in Butler's config file.\n\nIf the source directory contains subdirectories, these will be copied too.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "fromFile": { - "type": "string", - "description": "Name of source file.", - "example": "subfolder/file1.qvd" - }, - "toFile": { - "type": "string", - "description": "Name of destination file. Can be different from source file name, if needed.", - "example": "archive/file1_20200925.qvd" - }, - "overwrite": { - "type": "boolean", - "description": "Controls whether destination file should be overwritten if it already exists. Note that the copy operation will silently fail if you set this to false and the destination exists. Defaults to false.", - "example": false - }, - "preserveTimestamp": { - "type": "boolean", - "description": "When true, the timestamp of the source file(s) will be preserved on the destination file(s). When false, timestamp behaviour is OS-dependent. Defaults to false.", - "example": false - } - } - } - } - ], - "responses": { - "201": { - "description": "File copied.", - "schema": { - "description": "File copied.", - "type": "object", - "properties": { - "fromFile": { - "type": "string", - "description": "Name of source file.", - "example": "subfolder/file1.qvd" - }, - "toFile": { - "type": "string", - "description": "Name of destination file. Can be different from source file name, if needed.", - "example": "archive/file1_20200925.qvd" - }, - "overwrite": { - "type": "boolean", - "description": "Controls whether destination file should be overwritten if it already exists. Note that the copy operation will silently fail if you set this to false and the destination exists. Defaults to false.", - "example": false - }, - "preserveTimestamp": { - "type": "boolean", - "description": "When true, the timestamp of the source file(s) will be preserved on the destination file(s). When false, timestamp behaviour is OS-dependent. Defaults to false.", - "example": false - } - } - } - }, - "400": { - "description": "\"Required parameter missing\" or \"fromFile not found\".", - "schema": { - "description": "\"Required parameter missing\" or \"fromFile not found\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "403": { - "description": "No approved fromDir/toDir for file copy.", - "schema": { - "description": "No approved fromDir/toDir for file copy.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/filemove": { - "put": { - "summary": "Move file(s) between well defined, approved locations.", - "description": "Moving of files is only posttible between pre-approved directories.\nDefining approved source and destination directories is done in Butler's config file.\n\nIf the source directory contains subdirectories, these will be moved too.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "fromFile": { - "type": "string", - "description": "Name of source file.", - "example": "subfolder/file1.qvd" - }, - "toFile": { - "type": "string", - "description": "Name of destination file. Can be different from source file name, if needed.", - "example": "archive/file1_20200925.qvd" - }, - "overwrite": { - "type": "boolean", - "description": "Controls whether destination file should be overwritten if it already exists. Defaults to false.", - "example": false - } - } - } - } - ], - "responses": { - "201": { - "description": "File moved.", - "schema": { - "description": "File moved.", - "type": "object", - "properties": { - "fromFile": { - "type": "string", - "description": "Name of source file.", - "example": "subfolder/file1.qvd" - }, - "toFile": { - "type": "string", - "description": "Name of destination file. Can be different from source file name, if needed.", - "example": "archive/file1_20200925.qvd" - }, - "overwrite": { - "type": "boolean", - "description": "Controls whether destination file should be overwritten if it already exists. Defaults to false.", - "example": false - } - } - } - }, - "400": { - "description": "\"Required parameter missing\" or \"fromFile not found\".", - "schema": { - "description": "\"Required parameter missing\" or \"fromFile not found\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "403": { - "description": "No approved fromDir/toDir for file copy.", - "schema": { - "description": "No approved fromDir/toDir for file copy.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/filedelete": { - "delete": { - "summary": "Delete file(s) in well defined, approved locations.", - "description": "It is only possible to delete files in pre-approved directories, or subdirectories thereof.\nDefining approved directories is done in Butler's config file.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "deleteFile": { - "type": "string", - "description": "Name of file to be deleted. Use forward/backward slashes in paths as needed, depending on whether Butler runs on Windows/non-Windows platform.", - "example": "data/qvdstore/sales/file1.qvd" - } - } - } - } - ], - "responses": { - "204": { - "description": "File deleted.", - "schema": { "description": "File deleted.", "type": "object" } - }, - "400": { - "description": "\"Required parameter missing\" or \"File requested for delete not found\".", - "schema": { - "description": "\"Required parameter missing\" or \"File requested for delete not found\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "403": { - "description": "No approved directory matches the delete request.", - "schema": { - "description": "No approved directory matches the delete request.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/createdirqvd": { - "post": { - "summary": "Creates a directory in designated QVD directory.", - "description": "Creates a directory in QVD directory (which is defined in Butler's config file).", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "directory": { - "type": "string", - "description": "Directory that should be created.", - "example": "subfolder/2020-10" - } - } - } - } - ], - "responses": { - "201": { - "description": "Directory created.", - "schema": { - "description": "Directory created.", - "type": "object", - "properties": { - "directory": { - "type": "string", - "description": "Directory that was created.", - "example": "subfolder/2020-10" - } - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/createdir": { - "post": { - "summary": "Creates a directory anywhere in the file system.", - "description": "If the directory already exists nothing will happen.\nIf permissions don't allow a directory to be created, or if the path is invalid, an error will be returned.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "directory": { - "type": "string", - "description": "Path to directory that should be created. Can be a relative or absolute path.", - "example": "/Users/joe/data/qvds/2020" - } - } - } - } - ], - "responses": { - "201": { - "description": "Directory created.", - "schema": { - "description": "Directory created.", - "type": "object", - "properties": { - "directory": { - "type": "string", - "description": "Directory that was created.", - "example": "/Users/joe/data/qvds/2020" - } - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error (file system permissions etc).", - "schema": { - "description": "Internal error (file system permissions etc).", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/keyvaluesnamespaces": { - "get": { - "summary": "List all currently defined namespaces.", - "responses": { - "200": { - "description": "Array of all namespaces.", - "schema": { - "description": "Array of all namespaces.", - "type": "array", - "items": { "type": "string" }, - "example": [ - "Weekly sales app", - "Sales ETL step 1", - "Sales ETL step 2" - ] - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/keyvalues/{namespace}": { - "get": { - "summary": "Get the value associated with a key, in a specific namespace.", - "parameters": [ - { - "type": "string", - "description": "", - "example": "Last extract timestamp", - "required": true, - "in": "query", - "name": "key" - }, - { - "type": "string", - "description": "", - "example": "Sales ETL step 2", - "required": true, - "in": "path", - "name": "namespace" - } - ], - "responses": { - "200": { - "description": "Key and it's associated value and metadata returned.", - "schema": { - "description": "Key and it's associated value and metadata returned.", - "type": "object", - "properties": { - "namespace": { - "type": "string", - "description": "Namespace name.", - "example": "Sales ETL step 2" - }, - "key": { - "type": "string", - "description": "Key name.", - "example": "Last extract timestamp" - }, - "value": { - "type": "string", - "description": "Value stored in the key-value pair.", - "example": "2020-09-29 17:14:56" - } - } - } - }, - "400": { - "description": "\"Namespace or key not found\" or \"Required parameter missing\".", - "schema": { - "description": "\"Namespace or key not found\" or \"Required parameter missing\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - }, - "post": { - "summary": "Create a new key-value pair in the specified namespace.", - "description": "If the specified key already exists it will be overwritten.\n\nIf the posted data has a TTL, it will start counting when the post occur.\nI.e. if a previouly posted key also had a TTL, it will be replace with the most recent TTL.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "Key to use", - "example": "ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_1" - }, - "value": { - "type": "string", - "description": "Value to set", - "example": "12345.789" - }, - "ttl": { - "type": "number", - "description": "Time to live = how long (milliseconds) the key-value pair should exist before being automatically deleted", - "example": 10000 - } - } - } - }, - { - "type": "string", - "description": "Name of namespace.", - "example": "Sales ETL step 2", - "required": true, - "in": "path", - "name": "namespace" - } - ], - "responses": { - "201": { - "description": "Key successfully set.", - "schema": { - "description": "Key successfully set.", - "type": "object", - "properties": { - "namespace": { - "type": "string", - "description": "Name of namespace.", - "example": "Sales ETL step 2" - }, - "key": { - "type": "string", - "description": "Key name.", - "example": "Last extract timestamp" - }, - "value": { - "type": "string", - "description": "Value stored in the key-value pair.", - "example": "2020-09-29 17:14:56" - }, - "ttl": { - "type": "number", - "description": "Time-to-live for the key-value pair. 0 if no ttl was set, otherwise in milliseconds.", - "example": 60000 - } - } - } - }, - "400": { - "description": "\"Namespace not found\" or \"Required parameter missing\".", - "schema": { - "description": "\"Namespace not found\" or \"Required parameter missing\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - }, - "delete": { - "summary": "Delete a namespace and all key-value pairs in it.", - "parameters": [ - { - "type": "string", - "description": "Name of namespace.", - "example": "Sales ETL step 2", - "required": true, - "in": "path", - "name": "namespace" - } - ], - "responses": { - "204": { - "description": "Namespace successfully deleted.", - "schema": { - "description": "Namespace successfully deleted.", - "type": "string", - "example": "" - } - }, - "400": { - "description": "\"Namespace not found\" or \"Required parameter missing\".", - "schema": { - "description": "\"Namespace not found\" or \"Required parameter missing\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/keyvalues/{namespace}/keyexists": { - "get": { - "summary": "Checks if a key exists in a namespace.", - "description": "Returns true if the specified key exists, otherwise false.", - "parameters": [ - { - "type": "string", - "description": "", - "example": "Last extract timestamp", - "required": true, - "in": "query", - "name": "key" - }, - { - "type": "string", - "description": "", - "example": "Sales ETL step 2", - "required": true, - "in": "path", - "name": "namespace" - } - ], - "responses": { - "200": { - "description": "Key exist/no-exist returned, together with the data if the does exist.", - "schema": { - "description": "Key exist/no-exist returned, together with the data if the does exist.", - "type": "object", - "properties": { - "keyExists": { - "type": "boolean", - "description": "true/false flag indicating whether the specified key exists in the given namespace." - }, - "keyValue": { - "type": "object", - "properties": { - "namespace": { - "type": "string", - "description": "Namespace name.", - "example": "Sales ETL step 2" - }, - "key": { - "type": "string", - "description": "Key name.", - "example": "Last extract timestamp" - }, - "value": { - "type": "string", - "description": "Value stored in the key-value pair.", - "example": "2020-09-29 17:14:56" - } - } - } - } - } - }, - "400": { - "description": "\"Namespace not found\" or \"Required parameter missing\".", - "schema": { - "description": "\"Namespace not found\" or \"Required parameter missing\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/keyvalues/{namespace}/{key}": { - "delete": { - "summary": "Delete a key-value pair in a specific namespace.", - "parameters": [ - { - "type": "string", - "description": "Name of namespace.", - "example": "Sales ETL step 2", - "required": true, - "in": "path", - "name": "namespace" - }, - { - "type": "string", - "description": "Key to use", - "example": "ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_1", - "required": true, - "in": "path", - "name": "key" - } - ], - "responses": { - "204": { - "description": "Key-value pair successfully deleted.", - "schema": { - "description": "Key-value pair successfully deleted.", - "type": "string", - "example": "" - } - }, - "400": { - "description": "\"Namespace or key not found\" or \"Required parameter missing\".", - "schema": { - "description": "\"Namespace or key not found\" or \"Required parameter missing\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/keylist/{namespace}": { - "get": { - "summary": "Retrieve a list of all keys present in the specified namespace.", - "parameters": [ - { - "type": "string", - "description": "Name of namespace whose keys should be returned.", - "example": "Sales ETL step 2", - "required": true, - "in": "path", - "name": "namespace" - } - ], - "responses": { - "200": { - "description": "Object containing namespace name + list of allkeys in the namespace.", - "schema": { - "description": "Object containing namespace name + list of allkeys in the namespace.", - "type": "object", - "properties": { - "namespace": { - "type": "string", - "description": "", - "example": "Sales ETL step 2" - }, - "keys": { - "type": "array", - "items": { "type": "object", "key": { "type": "string" } }, - "example": [ - { - "key": "ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_1" - }, - { - "key": "ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_2" - } - ] - } - } - } - }, - "400": { - "description": "\"Namespace not found\" or \"Required parameter missing\".", - "schema": { - "description": "\"Namespace not found\" or \"Required parameter missing\".", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/mqttpublishmessage": { - "put": { - "summary": "Publish a message to a MQTT topic.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "topic": { - "type": "string", - "description": "Topic to which message should be published.", - "example": "qliksense/new_data_notification/sales" - }, - "message": { - "type": "string", - "description": "The message is a generic text string and can thus contain anything that can be represented in a string, including JSON, key-value pairs, plain text etc.", - "example": "dt=20201028" - } - }, - "required": ["topic", "message"] - } - } - ], - "responses": { - "201": { - "description": "MQTT message successfully published.", - "schema": { - "description": "MQTT message successfully published.", - "type": "object", - "properties": { - "topic": { - "type": "string", - "example": "qliksense/new_data_notification/sales" - }, - "message": { "type": "string", "example": "dt=20201028" } - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/newrelic/metric": { - "post": { - "summary": "Post metrics to New Relic.", - "description": "This endpoint posts metrics to the New Relic metrics API.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Metric name.", - "example": "memory.heap", - "maxLength": 254 - }, - "type": { - "type": "string", - "description": "Metric type.", - "example": "gauge", - "enum": ["gauge"] - }, - "value": { - "type": "number", - "description": "Value of the metric.", - "example": 2.3 - }, - "timestamp": { - "type": "number", - "description": "The metric's start time in Unix time. Uses UTC time zone. This field also support seconds, microseconds, and nanoseconds. However, the data will be converted to milliseconds for storage and query. Metrics reported with a timestamp older than 48 hours ago or newer than 24 hours from the time they are reported are dropped by New Relic. If left empty Butler will use the current time as timestamp.", - "example": 1642164296053 - }, - "interval": { - "type": "number", - "description": "The length of the time window (millisec). Required for count and summary metric types." - }, - "attributes": { - "type": "array", - "description": "Dimensions that will be associated with the metric.", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "example": "host.name", - "maxLength": 254 - }, - "value": { "type": "string", "example": "dev.server.com" } - } - } - } - }, - "required": ["name", "type", "value"] - } - } - ], - "responses": { - "202": { - "description": "Data accepted and sent to New Relic.", - "schema": { - "description": "Data accepted and sent to New Relic.", - "type": "object", - "properties": { - "newRelicResultCode": { "type": "number", "example": "202" }, - "newRelicResultText": { - "type": "string", - "example": "Data accepted." - } - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/app/{appId}/reload": { - "put": { - "summary": "Do a stand-alone reload of a Qlik Sense app, without using a task.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "reloadMode": { - "type": "integer", - "description": "Reload mode that will be used. 0, 1 or 2. If not specified 0 will be used" - }, - "partialReload": { - "type": "boolean", - "description": "Should a full (=false) or partial (=true) reload be done? If not specified a full reload will be done.", - "example": true - }, - "startQSEoWTaskOnSuccess": { - "type": "array", - "description": "Array of task IDs that should be started when the app has successfully reloaded.", - "items": { "type": "string", "minItems": 0 }, - "example": [ - "09b3c78f-04dd-45e3-a4bf-1b074d6572fa", - "eaf1da4f-fd44-4cea-b2de-7b67a6496ee3" - ] - }, - "startQSEoWTaskOnFailure": { - "type": "array", - "description": "Array of task IDs that should be started if the app fails reloading.", - "items": { "type": "string", "minItems": 0 }, - "example": [ - "09b3c78f-04dd-45e3-a4bf-1b074d6572fa", - "eaf1da4f-fd44-4cea-b2de-7b67a6496ee3" - ] - } - } - } - }, - { - "type": "string", - "description": "ID of Qlik Sense app.", - "example": "210832b5-6174-4572-bd19-3e61eda675ef", - "required": true, - "in": "path", - "name": "appId" - } - ], - "responses": { - "201": { - "description": "App successfully reloaded.", - "schema": { - "description": "App successfully reloaded.", - "type": "object", - "properties": { - "appId": { - "type": "string", - "description": "ID of reloaded app", - "example": "210832b5-6174-4572-bd19-3e61eda675ef" - } - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/senseappdump/{appId}": { - "get": { - "summary": "Dump a Sense app to JSON.", - "description": "Does the same thing as `/v4/app/:appId/dump`", - "parameters": [ - { - "type": "string", - "description": "ID of Qlik Sense app.", - "example": "210832b5-6174-4572-bd19-3e61eda675ef", - "required": true, - "in": "path", - "name": "appId" - } - ], - "responses": { - "200": { - "description": "App dump successful. App metadata returned as JSON.", - "schema": { - "description": "App dump successful. App metadata returned as JSON.", - "type": "object", - "example": { - "properties": {}, - "loadScript": "", - "sheets": [], - "stories": [], - "masterobjects": [], - "appprops": [], - "dataconnections": [], - "dimensions": [], - "bookmarks": [], - "embeddedmedia": [], - "snapshots": [], - "fields": [], - "variables": [], - "measures": [] - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "422": { - "description": "App not found in Qlik Sense.", - "schema": { - "description": "App not found in Qlik Sense.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/app/{appId}/dump": { - "get": { - "summary": "Dump a Sense app to JSON.", - "description": "Does the same thing as `/v4/senseappdump/:appId`", - "parameters": [ - { - "type": "string", - "description": "ID of Qlik Sense app.", - "example": "210832b5-6174-4572-bd19-3e61eda675ef", - "required": true, - "in": "path", - "name": "appId" - } - ], - "responses": { - "200": { - "description": "App dump successful. App metadata returned as JSON.", - "schema": { - "description": "App dump successful. App metadata returned as JSON.", - "type": "object", - "example": { - "properties": {}, - "loadScript": "", - "sheets": [], - "stories": [], - "masterobjects": [], - "appprops": [], - "dataconnections": [], - "dimensions": [], - "bookmarks": [], - "embeddedmedia": [], - "snapshots": [], - "fields": [], - "variables": [], - "measures": [] - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "422": { - "description": "App not found in Qlik Sense.", - "schema": { - "description": "App not found in Qlik Sense.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/senselistapps": { - "get": { - "summary": "Get a list of all apps in Sense environment.", - "description": "Does the same thing as `/v4/apps/list`", - "responses": { - "200": { - "description": "App list successfully retrieved.", - "schema": { - "description": "App list successfully retrieved.", - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "App ID", - "example": "5d7ae888-61cd-4539-97b2-6cf5baaa6f9d" - }, - "name": { - "type": "string", - "description": "App name", - "example": "2021 sales targets" - } - } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/apps/list": { - "get": { - "summary": "Get a list of all apps in Sense environment.", - "description": "Does the same thing as `/v4/senselistapps`", - "responses": { - "200": { - "description": "App list successfully retrieved.", - "schema": { - "description": "App list successfully retrieved.", - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "App ID", - "example": "5d7ae888-61cd-4539-97b2-6cf5baaa6f9d" - }, - "name": { - "type": "string", - "description": "App name", - "example": "2021 sales targets" - } - } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/reloadtask/{taskId}/start": { - "put": { - "summary": "Start a Qlik Sense task.", - "description": "An optional array of zero or more objects can be passed in the message body. It is used to pass additional info related to the reload task being started.\n\nCurrently supported values in this array are:\n\n- A key-value pair that will be stored in Butler's KV store. If Butler's key-value store is not enabled, any key-value information passed in this parameter will simply be ignored.\nSetting `ttl=0` disables the TTL feature, i.e. the KV pair will not expire.\n- A task identified by its taskId that should be started.\n- Tasks identified by tags set on tasks in the QMC.\n- Tasks identified by custom properties set in the QMC.\n\nThis parameter uses a generic JSON/object format (type + payload).\nIt's thus possible to add new integrations in future Butler versions.", - "parameters": [ - { - "type": "boolean", - "description": "If set to `true`, all specified taskIds must exist. If one or more taskIds does not exist in the Sense server, *no* tasks will be started.\n\nIf set to `false`, all existing taskIds will be started. Missing/invalid taskIds will be ignored.\n\nIn either case, missing/invalid taskIds will be reported in the result set back to the client calling the API.\n\nNote: Tasks started by specifying tags and/or custom properties are not affected by this.", - "example": true, - "required": false, - "in": "query", - "name": "allTaskIdsMustExist" - }, - { - "name": "body", - "in": "body", - "schema": { - "type": "array", - "description": "Optional object with extra info.", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "keyvaluestore", - "enum": [ - "keyvaluestore", - "starttaskid", - "starttasktag", - "starttaskcustomproperty" - ] - }, - "payload": { "type": "object" } - } - }, - "example": [ - { - "type": "starttaskid", - "payload": { - "taskId": "7552d9fc-d1bb-4975-9a38-18357de531ea" - } - }, - { "type": "starttasktag", "payload": { "tag": "startTask1" } }, - { - "type": "starttaskcustomproperty", - "payload": { - "customPropertyName": "taskGroup", - "customPropertyValue": "tasks2" - } - }, - { - "type": "keyvaluestore", - "payload": { - "namespace": "MyFineNamespace", - "key": "AnImportantKey", - "value": "TheValue", - "ttl": 10000 - } - } - ] - } - }, - { - "type": "string", - "description": "ID of Qlik Sense task.\nButler will ignore the \"magic\" task ID of \"-\" (=dash, hyphen). This ID will not be reported as invalid.", - "example": "210832b5-6174-4572-bd19-3e61eda675ef", - "required": true, - "in": "path", - "name": "taskId" - } - ], - "responses": { - "200": { - "description": "Task successfully started.", - "schema": { - "description": "Task successfully started.", - "type": "object", - "example": { - "tasksId": { - "started": [ - { - "taskId": "e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e", - "taskName": "Reload task of App1" - } - ], - "invalid": [{ "taskId": "abc" }], - "denied": [ - { "taskId": "a1a11a11-b1c0-4879-88fc-c7cdd9c1cf3e" } - ] - }, - "tasksTag": [ - { - "taskId": "e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e", - "taskName": "Reload task of App1" - } - ], - "tasksTagDenied": [{ "tag": "startTask_invalid1" }], - "tasksCP": [ - { - "taskId": "e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e", - "taskName": "Reload task of App1" - } - ], - "tasksCPDenied": [ - { "name": "taskGroup", "value": "cp_value_denied1" } - ] - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - }, - "post": { - "summary": "Start a Qlik Sense task.", - "description": "An optional array of zero or more objects can be passed in the message body. It is used to pass additional info related to the reload task being started.\n\nCurrently supported values in this array are:\n\n- A key-value pair that will be stored in Butler's KV store. If Butler's key-value store is not enabled, any key-value information passed in this parameter will simply be ignored.\nSetting `ttl=0` disables the TTL feature, i.e. the KV pair will not expire.\n- A task identified by its taskId that should be started.\n- Tasks identified by tags set on tasks in the QMC.\n- Tasks identified by custom properties set in the QMC.\n\nThis parameter uses a generic JSON/object format (type + payload).\nIt's thus possible to add new integrations in future Butler versions.", - "parameters": [ - { - "type": "boolean", - "description": "If set to `true`, all specified taskIds must exist. If one or more taskIds does not exist in the Sense server, *no* tasks will be started.\n\nIf set to `false`, all existing taskIds will be started. Missing/invalid taskIds will be ignored.\n\nIn either case, missing/invalid taskIds will be reported in the result set back to the client calling the API.\n\nNote: Tasks started by specifying tags and/or custom properties are not affected by this.", - "example": true, - "required": false, - "in": "query", - "name": "allTaskIdsMustExist" - }, - { - "name": "body", - "in": "body", - "schema": { - "type": "array", - "description": "Optional object with extra info.", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "example": "keyvaluestore", - "enum": [ - "keyvaluestore", - "starttaskid", - "starttasktag", - "starttaskcustomproperty" - ] - }, - "payload": { "type": "object" } - } - }, - "example": [ - { - "type": "starttaskid", - "payload": { - "taskId": "7552d9fc-d1bb-4975-9a38-18357de531ea" - } - }, - { "type": "starttasktag", "payload": { "tag": "startTask1" } }, - { - "type": "starttaskcustomproperty", - "payload": { - "customPropertyName": "taskGroup", - "customPropertyValue": "tasks2" - } - }, - { - "type": "keyvaluestore", - "payload": { - "namespace": "MyFineNamespace", - "key": "AnImportantKey", - "value": "TheValue", - "ttl": 10000 - } - } - ] - } - }, - { - "type": "string", - "description": "ID of Qlik Sense task.\nButler will ignore the \"magic\" task ID of \"-\" (=dash, hyphen). This ID will not be reported as invalid.", - "example": "210832b5-6174-4572-bd19-3e61eda675ef", - "required": true, - "in": "path", - "name": "taskId" - } - ], - "responses": { - "200": { - "description": "Task successfully started.", - "schema": { - "description": "Task successfully started.", - "type": "object", - "example": { - "tasksId": { - "started": [ - { - "taskId": "e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e", - "taskName": "Reload task of App1" - } - ], - "invalid": [{ "taskId": "abc" }], - "denied": [ - { "taskId": "a1a11a11-b1c0-4879-88fc-c7cdd9c1cf3e" } - ] - }, - "tasksTag": [ - { - "taskId": "e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e", - "taskName": "Reload task of App1" - } - ], - "tasksTagDenied": [{ "tag": "startTask_invalid1" }], - "tasksCP": [ - { - "taskId": "e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e", - "taskName": "Reload task of App1" - } - ], - "tasksCPDenied": [ - { "name": "taskGroup", "value": "cp_value_denied1" } - ] - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - }, - "/v4/slackpostmessage": { - "put": { - "summary": "Send message to Slack.", - "description": "Sends a basic message to Slack.", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "channel": { - "type": "string", - "description": "Slack channel to post message into. Prefix channel name with #.", - "example": "#reload-notification" - }, - "from_user": { - "type": "string", - "description": "Name of sending user, as shown in the Slack message", - "example": "Butler the Bot" - }, - "msg": { - "type": "string", - "description": "Text going into the Slack message", - "example": "This is a message from Qlik Sense" - }, - "emoji": { - "type": "string", - "description": "Emoji to shown next to Slack message", - "example": "thumbsup" - } - }, - "required": ["channel", "from_user", "msg"] - } - } - ], - "responses": { - "201": { - "description": "Message successfully sent to Slack.", - "schema": { - "description": "Message successfully sent to Slack.", - "type": "object", - "properties": { - "channel": { - "type": "string", - "description": "Slack channel to post message into. Prefix channel name with #.", - "example": "#reload-notification" - }, - "from_user": { - "type": "string", - "description": "Name of sending user, as shown in the Slack message", - "example": "Butler the Bot" - }, - "msg": { - "type": "string", - "description": "Text going into the Slack message", - "example": "This is a message from Qlik Sense" - }, - "emoji": { - "type": "string", - "description": "Emoji to shown next to Slack message", - "example": "thumbsup" - } - } - } - }, - "400": { - "description": "Required parameter missing.", - "schema": { - "description": "Required parameter missing.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - }, - "500": { - "description": "Internal error.", - "schema": { - "description": "Internal error.", - "type": "object", - "properties": { - "statusCode": { "type": "number" }, - "code": { "type": "string" }, - "error": { "type": "string" }, - "message": { "type": "string" }, - "time": { "type": "string" } - } - } - } - } - } - } - }, - "host": "localhost:8081", - "schemes": ["http"], - "produces": ["application/json"], - "externalDocs": { - "url": "https://github.com/ptarmiganlabs", - "description": "Butler family of tools on GitHub" - } -} +{"swagger":"2.0","info":{"title":"Butler API documentation","description":"Butler is a microservice that provides add-on features to Qlik Sense Enterprise on Windows.\nButler offers both a REST API and things like failed reload notifications etc.\n\nThis page contains the API documentation. Full documentation is available at https://butler.ptarmiganlabs.com","version":"8.2.0"},"definitions":{},"paths":{"/v4/configfile/endpointsenabled":{"get":{"summary":"Get an array of all enabled API endpoints.","description":"Get an array of all enabled API endpoints, using the key names from the Butler config file.\n\nNote: Endpoints are enabled/disabled in the Butler main configuration file.","responses":{"200":{"description":"Enabled API enpooints.","schema":{"description":"Enabled API enpooints.","type":"array","items":{"type":"string"},"example":["activeUserCount","activeUsers","apiListEnbledEndpoints"]}}}}},"/v4/base62tobase16":{"get":{"summary":"Converts strings from base62 to base16.","description":"Converts strings from base62 to base16.","parameters":[{"type":"string","description":"The base62 encoded string that should be converted to base16","example":"6DMW88LpSok9Z7P7hUK0wv7bF","required":true,"in":"query","name":"base62"}],"responses":{"200":{"description":"Base conversion successful.","schema":{"description":"Base conversion successful.","type":"object","properties":{"base62":{"type":"string","description":"The base62 encoded string that should be converted to base16"},"base16":{"type":"string","description":"Resulting base16 encoded string."}},"example":{"base62":"6DMW88LpSok9Z7P7hUK0wv7bF","base16":"3199af08bfeeaf5d420f27ed9c01e74370077"}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/base16tobase62":{"get":{"summary":"Converts strings from base16 to base62.","description":"Converts strings from base16 to base62.","parameters":[{"type":"string","description":"The base16 encoded string that should be converted to base62","example":"3199af08bfeeaf5d420f27ed9c01e74370077","required":true,"in":"query","name":"base16"}],"responses":{"200":{"description":"Base conversion successful.","schema":{"description":"Base conversion successful.","type":"object","properties":{"base62":{"type":"string","description":"The base62 encoded string that should be converted to base16"},"base16":{"type":"string","description":"Resulting base62 encoded string."}},"example":{"base16":"3199af08bfeeaf5d420f27ed9c01e74370077","base62":"6DMW88LpSok9Z7P7hUK0wv7bF"}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/butlerping":{"get":{"summary":"Tests if Butler is alive and responding","description":"Tests if Butler is alive and responding","responses":{"200":{"description":"Butler is alive and well.","schema":{"description":"Butler is alive and well.","type":"object","properties":{"response":{"type":"string","example":"Butler reporting for duty"},"butlerVersion":{"type":"string","example":"5.5.0"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/filecopy":{"put":{"summary":"Copy file(s) between well defined, approved locations.","description":"Copying of files is only posttible between pre-approved directories.\nDefining approved source and destination directories is done in Butler's config file.\n\nIf the source directory contains subdirectories, these will be copied too.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"fromFile":{"type":"string","description":"Name of source file.","example":"subfolder/file1.qvd"},"toFile":{"type":"string","description":"Name of destination file. Can be different from source file name, if needed.","example":"archive/file1_20200925.qvd"},"overwrite":{"type":"boolean","description":"Controls whether destination file should be overwritten if it already exists. Note that the copy operation will silently fail if you set this to false and the destination exists. Defaults to false.","example":false},"preserveTimestamp":{"type":"boolean","description":"When true, the timestamp of the source file(s) will be preserved on the destination file(s). When false, timestamp behaviour is OS-dependent. Defaults to false.","example":false}}}}],"responses":{"201":{"description":"File copied.","schema":{"description":"File copied.","type":"object","properties":{"fromFile":{"type":"string","description":"Name of source file.","example":"subfolder/file1.qvd"},"toFile":{"type":"string","description":"Name of destination file. Can be different from source file name, if needed.","example":"archive/file1_20200925.qvd"},"overwrite":{"type":"boolean","description":"Controls whether destination file should be overwritten if it already exists. Note that the copy operation will silently fail if you set this to false and the destination exists. Defaults to false.","example":false},"preserveTimestamp":{"type":"boolean","description":"When true, the timestamp of the source file(s) will be preserved on the destination file(s). When false, timestamp behaviour is OS-dependent. Defaults to false.","example":false}}}},"400":{"description":"\"Required parameter missing\" or \"fromFile not found\".","schema":{"description":"\"Required parameter missing\" or \"fromFile not found\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"403":{"description":"No approved fromDir/toDir for file copy.","schema":{"description":"No approved fromDir/toDir for file copy.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/filemove":{"put":{"summary":"Move file(s) between well defined, approved locations.","description":"Moving of files is only posttible between pre-approved directories.\nDefining approved source and destination directories is done in Butler's config file.\n\nIf the source directory contains subdirectories, these will be moved too.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"fromFile":{"type":"string","description":"Name of source file.","example":"subfolder/file1.qvd"},"toFile":{"type":"string","description":"Name of destination file. Can be different from source file name, if needed.","example":"archive/file1_20200925.qvd"},"overwrite":{"type":"boolean","description":"Controls whether destination file should be overwritten if it already exists. Defaults to false.","example":false}}}}],"responses":{"201":{"description":"File moved.","schema":{"description":"File moved.","type":"object","properties":{"fromFile":{"type":"string","description":"Name of source file.","example":"subfolder/file1.qvd"},"toFile":{"type":"string","description":"Name of destination file. Can be different from source file name, if needed.","example":"archive/file1_20200925.qvd"},"overwrite":{"type":"boolean","description":"Controls whether destination file should be overwritten if it already exists. Defaults to false.","example":false}}}},"400":{"description":"\"Required parameter missing\" or \"fromFile not found\".","schema":{"description":"\"Required parameter missing\" or \"fromFile not found\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"403":{"description":"No approved fromDir/toDir for file copy.","schema":{"description":"No approved fromDir/toDir for file copy.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/filedelete":{"delete":{"summary":"Delete file(s) in well defined, approved locations.","description":"It is only possible to delete files in pre-approved directories, or subdirectories thereof.\nDefining approved directories is done in Butler's config file.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"deleteFile":{"type":"string","description":"Name of file to be deleted. Use forward/backward slashes in paths as needed, depending on whether Butler runs on Windows/non-Windows platform.","example":"data/qvdstore/sales/file1.qvd"}}}}],"responses":{"204":{"description":"File deleted.","schema":{"description":"File deleted.","type":"object"}},"400":{"description":"\"Required parameter missing\" or \"File requested for delete not found\".","schema":{"description":"\"Required parameter missing\" or \"File requested for delete not found\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"403":{"description":"No approved directory matches the delete request.","schema":{"description":"No approved directory matches the delete request.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/createdirqvd":{"post":{"summary":"Creates a directory in designated QVD directory.","description":"Creates a directory in QVD directory (which is defined in Butler's config file).","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"directory":{"type":"string","description":"Directory that should be created.","example":"subfolder/2020-10"}}}}],"responses":{"201":{"description":"Directory created.","schema":{"description":"Directory created.","type":"object","properties":{"directory":{"type":"string","description":"Directory that was created.","example":"subfolder/2020-10"}}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/createdir":{"post":{"summary":"Creates a directory anywhere in the file system.","description":"If the directory already exists nothing will happen.\nIf permissions don't allow a directory to be created, or if the path is invalid, an error will be returned.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"directory":{"type":"string","description":"Path to directory that should be created. Can be a relative or absolute path.","example":"/Users/joe/data/qvds/2020"}}}}],"responses":{"201":{"description":"Directory created.","schema":{"description":"Directory created.","type":"object","properties":{"directory":{"type":"string","description":"Directory that was created.","example":"/Users/joe/data/qvds/2020"}}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error (file system permissions etc).","schema":{"description":"Internal error (file system permissions etc).","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/keyvaluesnamespaces":{"get":{"summary":"List all currently defined namespaces.","responses":{"200":{"description":"Array of all namespaces.","schema":{"description":"Array of all namespaces.","type":"array","items":{"type":"string"},"example":["Weekly sales app","Sales ETL step 1","Sales ETL step 2"]}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/keyvalues/{namespace}":{"get":{"summary":"Get the value associated with a key, in a specific namespace.","parameters":[{"type":"string","description":"","example":"Last extract timestamp","required":true,"in":"query","name":"key"},{"type":"string","description":"","example":"Sales ETL step 2","required":true,"in":"path","name":"namespace"}],"responses":{"200":{"description":"Key and it's associated value and metadata returned.","schema":{"description":"Key and it's associated value and metadata returned.","type":"object","properties":{"namespace":{"type":"string","description":"Namespace name.","example":"Sales ETL step 2"},"key":{"type":"string","description":"Key name.","example":"Last extract timestamp"},"value":{"type":"string","description":"Value stored in the key-value pair.","example":"2020-09-29 17:14:56"}}}},"400":{"description":"\"Namespace or key not found\" or \"Required parameter missing\".","schema":{"description":"\"Namespace or key not found\" or \"Required parameter missing\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}},"post":{"summary":"Create a new key-value pair in the specified namespace.","description":"If the specified key already exists it will be overwritten.\n\nIf the posted data has a TTL, it will start counting when the post occur.\nI.e. if a previouly posted key also had a TTL, it will be replace with the most recent TTL.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"key":{"type":"string","description":"Key to use","example":"ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_1"},"value":{"type":"string","description":"Value to set","example":"12345.789"},"ttl":{"type":"number","description":"Time to live = how long (milliseconds) the key-value pair should exist before being automatically deleted","example":10000}}}},{"type":"string","description":"Name of namespace.","example":"Sales ETL step 2","required":true,"in":"path","name":"namespace"}],"responses":{"201":{"description":"Key successfully set.","schema":{"description":"Key successfully set.","type":"object","properties":{"namespace":{"type":"string","description":"Name of namespace.","example":"Sales ETL step 2"},"key":{"type":"string","description":"Key name.","example":"Last extract timestamp"},"value":{"type":"string","description":"Value stored in the key-value pair.","example":"2020-09-29 17:14:56"},"ttl":{"type":"number","description":"Time-to-live for the key-value pair. 0 if no ttl was set, otherwise in milliseconds.","example":60000}}}},"400":{"description":"\"Namespace not found\" or \"Required parameter missing\".","schema":{"description":"\"Namespace not found\" or \"Required parameter missing\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}},"delete":{"summary":"Delete a namespace and all key-value pairs in it.","parameters":[{"type":"string","description":"Name of namespace.","example":"Sales ETL step 2","required":true,"in":"path","name":"namespace"}],"responses":{"204":{"description":"Namespace successfully deleted.","schema":{"description":"Namespace successfully deleted.","type":"string","example":""}},"400":{"description":"\"Namespace not found\" or \"Required parameter missing\".","schema":{"description":"\"Namespace not found\" or \"Required parameter missing\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/keyvalues/{namespace}/keyexists":{"get":{"summary":"Checks if a key exists in a namespace.","description":"Returns true if the specified key exists, otherwise false.","parameters":[{"type":"string","description":"","example":"Last extract timestamp","required":true,"in":"query","name":"key"},{"type":"string","description":"","example":"Sales ETL step 2","required":true,"in":"path","name":"namespace"}],"responses":{"200":{"description":"Key exist/no-exist returned, together with the data if the does exist.","schema":{"description":"Key exist/no-exist returned, together with the data if the does exist.","type":"object","properties":{"keyExists":{"type":"boolean","description":"true/false flag indicating whether the specified key exists in the given namespace."},"keyValue":{"type":"object","properties":{"namespace":{"type":"string","description":"Namespace name.","example":"Sales ETL step 2"},"key":{"type":"string","description":"Key name.","example":"Last extract timestamp"},"value":{"type":"string","description":"Value stored in the key-value pair.","example":"2020-09-29 17:14:56"}}}}}},"400":{"description":"\"Namespace not found\" or \"Required parameter missing\".","schema":{"description":"\"Namespace not found\" or \"Required parameter missing\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/keyvalues/{namespace}/{key}":{"delete":{"summary":"Delete a key-value pair in a specific namespace.","parameters":[{"type":"string","description":"Name of namespace.","example":"Sales ETL step 2","required":true,"in":"path","name":"namespace"},{"type":"string","description":"Key to use","example":"ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_1","required":true,"in":"path","name":"key"}],"responses":{"204":{"description":"Key-value pair successfully deleted.","schema":{"description":"Key-value pair successfully deleted.","type":"string","example":""}},"400":{"description":"\"Namespace or key not found\" or \"Required parameter missing\".","schema":{"description":"\"Namespace or key not found\" or \"Required parameter missing\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/keylist/{namespace}":{"get":{"summary":"Retrieve a list of all keys present in the specified namespace.","parameters":[{"type":"string","description":"Name of namespace whose keys should be returned.","example":"Sales ETL step 2","required":true,"in":"path","name":"namespace"}],"responses":{"200":{"description":"Object containing namespace name + list of allkeys in the namespace.","schema":{"description":"Object containing namespace name + list of allkeys in the namespace.","type":"object","properties":{"namespace":{"type":"string","description":"","example":"Sales ETL step 2"},"keys":{"type":"array","items":{"type":"object","key":{"type":"string"}},"example":[{"key":"ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_1"},{"key":"ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_2"}]}}}},"400":{"description":"\"Namespace not found\" or \"Required parameter missing\".","schema":{"description":"\"Namespace not found\" or \"Required parameter missing\".","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/mqttpublishmessage":{"put":{"summary":"Publish a message to a MQTT topic.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"topic":{"type":"string","description":"Topic to which message should be published.","example":"qliksense/new_data_notification/sales"},"message":{"type":"string","description":"The message is a generic text string and can thus contain anything that can be represented in a string, including JSON, key-value pairs, plain text etc.","example":"dt=20201028"}},"required":["topic","message"]}}],"responses":{"201":{"description":"MQTT message successfully published.","schema":{"description":"MQTT message successfully published.","type":"object","properties":{"topic":{"type":"string","example":"qliksense/new_data_notification/sales"},"message":{"type":"string","example":"dt=20201028"}}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/newrelic/metric":{"post":{"summary":"Post metrics to New Relic.","description":"This endpoint posts metrics to the New Relic metrics API.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"name":{"type":"string","description":"Metric name.","example":"memory.heap","maxLength":254},"type":{"type":"string","description":"Metric type.","example":"gauge","enum":["gauge"]},"value":{"type":"number","description":"Value of the metric.","example":2.3},"timestamp":{"type":"number","description":"The metric's start time in Unix time. Uses UTC time zone. This field also support seconds, microseconds, and nanoseconds. However, the data will be converted to milliseconds for storage and query. Metrics reported with a timestamp older than 48 hours ago or newer than 24 hours from the time they are reported are dropped by New Relic. If left empty Butler will use the current time as timestamp.","example":1642164296053},"interval":{"type":"number","description":"The length of the time window (millisec). Required for count and summary metric types."},"attributes":{"type":"array","description":"Dimensions that will be associated with the metric.","items":{"type":"object","properties":{"name":{"type":"string","example":"host.name","maxLength":254},"value":{"type":"string","example":"dev.server.com"}}}}},"required":["name","type","value"]}}],"responses":{"202":{"description":"Data accepted and sent to New Relic.","schema":{"description":"Data accepted and sent to New Relic.","type":"object","properties":{"newRelicResultCode":{"type":"number","example":"202"},"newRelicResultText":{"type":"string","example":"Data accepted."}}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/app/{appId}/reload":{"put":{"summary":"Do a stand-alone reload of a Qlik Sense app, without using a task.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"reloadMode":{"type":"integer","description":"Reload mode that will be used. 0, 1 or 2. If not specified 0 will be used"},"partialReload":{"type":"boolean","description":"Should a full (=false) or partial (=true) reload be done? If not specified a full reload will be done.","example":true},"startQSEoWTaskOnSuccess":{"type":"array","description":"Array of task IDs that should be started when the app has successfully reloaded.","items":{"type":"string","minItems":0},"example":["09b3c78f-04dd-45e3-a4bf-1b074d6572fa","eaf1da4f-fd44-4cea-b2de-7b67a6496ee3"]},"startQSEoWTaskOnFailure":{"type":"array","description":"Array of task IDs that should be started if the app fails reloading.","items":{"type":"string","minItems":0},"example":["09b3c78f-04dd-45e3-a4bf-1b074d6572fa","eaf1da4f-fd44-4cea-b2de-7b67a6496ee3"]}}}},{"type":"string","description":"ID of Qlik Sense app.","example":"210832b5-6174-4572-bd19-3e61eda675ef","required":true,"in":"path","name":"appId"}],"responses":{"201":{"description":"App successfully reloaded.","schema":{"description":"App successfully reloaded.","type":"object","properties":{"appId":{"type":"string","description":"ID of reloaded app","example":"210832b5-6174-4572-bd19-3e61eda675ef"}}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/senseappdump/{appId}":{"get":{"summary":"Dump a Sense app to JSON.","description":"Does the same thing as `/v4/app/:appId/dump`","parameters":[{"type":"string","description":"ID of Qlik Sense app.","example":"210832b5-6174-4572-bd19-3e61eda675ef","required":true,"in":"path","name":"appId"}],"responses":{"200":{"description":"App dump successful. App metadata returned as JSON.","schema":{"description":"App dump successful. App metadata returned as JSON.","type":"object","example":{"properties":{},"loadScript":"","sheets":[],"stories":[],"masterobjects":[],"appprops":[],"dataconnections":[],"dimensions":[],"bookmarks":[],"embeddedmedia":[],"snapshots":[],"fields":[],"variables":[],"measures":[]}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"422":{"description":"App not found in Qlik Sense.","schema":{"description":"App not found in Qlik Sense.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/app/{appId}/dump":{"get":{"summary":"Dump a Sense app to JSON.","description":"Does the same thing as `/v4/senseappdump/:appId`","parameters":[{"type":"string","description":"ID of Qlik Sense app.","example":"210832b5-6174-4572-bd19-3e61eda675ef","required":true,"in":"path","name":"appId"}],"responses":{"200":{"description":"App dump successful. App metadata returned as JSON.","schema":{"description":"App dump successful. App metadata returned as JSON.","type":"object","example":{"properties":{},"loadScript":"","sheets":[],"stories":[],"masterobjects":[],"appprops":[],"dataconnections":[],"dimensions":[],"bookmarks":[],"embeddedmedia":[],"snapshots":[],"fields":[],"variables":[],"measures":[]}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"422":{"description":"App not found in Qlik Sense.","schema":{"description":"App not found in Qlik Sense.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/senselistapps":{"get":{"summary":"Get a list of all apps in Sense environment.","description":"Does the same thing as `/v4/apps/list`","responses":{"200":{"description":"App list successfully retrieved.","schema":{"description":"App list successfully retrieved.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"App ID","example":"5d7ae888-61cd-4539-97b2-6cf5baaa6f9d"},"name":{"type":"string","description":"App name","example":"2021 sales targets"}}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/apps/list":{"get":{"summary":"Get a list of all apps in Sense environment.","description":"Does the same thing as `/v4/senselistapps`","responses":{"200":{"description":"App list successfully retrieved.","schema":{"description":"App list successfully retrieved.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"App ID","example":"5d7ae888-61cd-4539-97b2-6cf5baaa6f9d"},"name":{"type":"string","description":"App name","example":"2021 sales targets"}}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/reloadtask/{taskId}/start":{"put":{"summary":"Start a Qlik Sense task.","description":"An optional array of zero or more objects can be passed in the message body. It is used to pass additional info related to the reload task being started.\n\nCurrently supported values in this array are:\n\n- A key-value pair that will be stored in Butler's KV store. If Butler's key-value store is not enabled, any key-value information passed in this parameter will simply be ignored.\nSetting `ttl=0` disables the TTL feature, i.e. the KV pair will not expire.\n- A task identified by its taskId that should be started.\n- Tasks identified by tags set on tasks in the QMC.\n- Tasks identified by custom properties set in the QMC.\n\nThis parameter uses a generic JSON/object format (type + payload).\nIt's thus possible to add new integrations in future Butler versions.","parameters":[{"type":"boolean","description":"If set to `true`, all specified taskIds must exist. If one or more taskIds does not exist in the Sense server, *no* tasks will be started.\n\nIf set to `false`, all existing taskIds will be started. Missing/invalid taskIds will be ignored.\n\nIn either case, missing/invalid taskIds will be reported in the result set back to the client calling the API.\n\nNote: Tasks started by specifying tags and/or custom properties are not affected by this.","example":true,"required":false,"in":"query","name":"allTaskIdsMustExist"},{"name":"body","in":"body","schema":{"type":"array","description":"Optional object with extra info.","items":{"type":"object","properties":{"type":{"type":"string","example":"keyvaluestore","enum":["keyvaluestore","starttaskid","starttasktag","starttaskcustomproperty"]},"payload":{"type":"object"}}},"example":[{"type":"starttaskid","payload":{"taskId":"7552d9fc-d1bb-4975-9a38-18357de531ea"}},{"type":"starttasktag","payload":{"tag":"startTask1"}},{"type":"starttaskcustomproperty","payload":{"customPropertyName":"taskGroup","customPropertyValue":"tasks2"}},{"type":"keyvaluestore","payload":{"namespace":"MyFineNamespace","key":"AnImportantKey","value":"TheValue","ttl":10000}}]}},{"type":"string","description":"ID of Qlik Sense task.\nButler will ignore the \"magic\" task ID of \"-\" (=dash, hyphen). This ID will not be reported as invalid.","example":"210832b5-6174-4572-bd19-3e61eda675ef","required":true,"in":"path","name":"taskId"}],"responses":{"200":{"description":"Task successfully started.","schema":{"description":"Task successfully started.","type":"object","example":{"tasksId":{"started":[{"taskId":"e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e","taskName":"Reload task of App1"}],"invalid":[{"taskId":"abc"}],"denied":[{"taskId":"a1a11a11-b1c0-4879-88fc-c7cdd9c1cf3e"}]},"tasksTag":[{"taskId":"e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e","taskName":"Reload task of App1"}],"tasksTagDenied":[{"tag":"startTask_invalid1"}],"tasksCP":[{"taskId":"e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e","taskName":"Reload task of App1"}],"tasksCPDenied":[{"name":"taskGroup","value":"cp_value_denied1"}]}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}},"post":{"summary":"Start a Qlik Sense task.","description":"An optional array of zero or more objects can be passed in the message body. It is used to pass additional info related to the reload task being started.\n\nCurrently supported values in this array are:\n\n- A key-value pair that will be stored in Butler's KV store. If Butler's key-value store is not enabled, any key-value information passed in this parameter will simply be ignored.\nSetting `ttl=0` disables the TTL feature, i.e. the KV pair will not expire.\n- A task identified by its taskId that should be started.\n- Tasks identified by tags set on tasks in the QMC.\n- Tasks identified by custom properties set in the QMC.\n\nThis parameter uses a generic JSON/object format (type + payload).\nIt's thus possible to add new integrations in future Butler versions.","parameters":[{"type":"boolean","description":"If set to `true`, all specified taskIds must exist. If one or more taskIds does not exist in the Sense server, *no* tasks will be started.\n\nIf set to `false`, all existing taskIds will be started. Missing/invalid taskIds will be ignored.\n\nIn either case, missing/invalid taskIds will be reported in the result set back to the client calling the API.\n\nNote: Tasks started by specifying tags and/or custom properties are not affected by this.","example":true,"required":false,"in":"query","name":"allTaskIdsMustExist"},{"name":"body","in":"body","schema":{"type":"array","description":"Optional object with extra info.","items":{"type":"object","properties":{"type":{"type":"string","example":"keyvaluestore","enum":["keyvaluestore","starttaskid","starttasktag","starttaskcustomproperty"]},"payload":{"type":"object"}}},"example":[{"type":"starttaskid","payload":{"taskId":"7552d9fc-d1bb-4975-9a38-18357de531ea"}},{"type":"starttasktag","payload":{"tag":"startTask1"}},{"type":"starttaskcustomproperty","payload":{"customPropertyName":"taskGroup","customPropertyValue":"tasks2"}},{"type":"keyvaluestore","payload":{"namespace":"MyFineNamespace","key":"AnImportantKey","value":"TheValue","ttl":10000}}]}},{"type":"string","description":"ID of Qlik Sense task.\nButler will ignore the \"magic\" task ID of \"-\" (=dash, hyphen). This ID will not be reported as invalid.","example":"210832b5-6174-4572-bd19-3e61eda675ef","required":true,"in":"path","name":"taskId"}],"responses":{"200":{"description":"Task successfully started.","schema":{"description":"Task successfully started.","type":"object","example":{"tasksId":{"started":[{"taskId":"e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e","taskName":"Reload task of App1"}],"invalid":[{"taskId":"abc"}],"denied":[{"taskId":"a1a11a11-b1c0-4879-88fc-c7cdd9c1cf3e"}]},"tasksTag":[{"taskId":"e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e","taskName":"Reload task of App1"}],"tasksTagDenied":[{"tag":"startTask_invalid1"}],"tasksCP":[{"taskId":"e3b27f50-b1c0-4879-88fc-c7cdd9c1cf3e","taskName":"Reload task of App1"}],"tasksCPDenied":[{"name":"taskGroup","value":"cp_value_denied1"}]}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}},"/v4/slackpostmessage":{"put":{"summary":"Send message to Slack.","description":"Sends a basic message to Slack.","parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"channel":{"type":"string","description":"Slack channel to post message into. Prefix channel name with #.","example":"#reload-notification"},"from_user":{"type":"string","description":"Name of sending user, as shown in the Slack message","example":"Butler the Bot"},"msg":{"type":"string","description":"Text going into the Slack message","example":"This is a message from Qlik Sense"},"emoji":{"type":"string","description":"Emoji to shown next to Slack message","example":"thumbsup"}},"required":["channel","from_user","msg"]}}],"responses":{"201":{"description":"Message successfully sent to Slack.","schema":{"description":"Message successfully sent to Slack.","type":"object","properties":{"channel":{"type":"string","description":"Slack channel to post message into. Prefix channel name with #.","example":"#reload-notification"},"from_user":{"type":"string","description":"Name of sending user, as shown in the Slack message","example":"Butler the Bot"},"msg":{"type":"string","description":"Text going into the Slack message","example":"This is a message from Qlik Sense"},"emoji":{"type":"string","description":"Emoji to shown next to Slack message","example":"thumbsup"}}}},"400":{"description":"Required parameter missing.","schema":{"description":"Required parameter missing.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}},"500":{"description":"Internal error.","schema":{"description":"Internal error.","type":"object","properties":{"statusCode":{"type":"number"},"code":{"type":"string"},"error":{"type":"string"},"message":{"type":"string"},"time":{"type":"string"}}}}}}}},"host":"localhost:8081","schemes":["http"],"produces":["application/json"],"externalDocs":{"url":"https://github.com/ptarmiganlabs","description":"Butler family of tools on GitHub"}} \ No newline at end of file diff --git a/docs/api_doc/butler-api.yaml b/docs/api_doc/butler-api.yaml index a006be76..e12328fe 100644 --- a/docs/api_doc/butler-api.yaml +++ b/docs/api_doc/butler-api.yaml @@ -1,4 +1,4 @@ -swagger: "2.0" +swagger: '2.0' info: title: Butler API documentation description: >- @@ -25,7 +25,7 @@ paths: Note: Endpoints are enabled/disabled in the Butler main configuration file. responses: - "200": + '200': description: Enabled API enpooints. schema: description: Enabled API enpooints. @@ -48,7 +48,7 @@ paths: in: query name: base62 responses: - "200": + '200': description: Base conversion successful. schema: description: Base conversion successful. @@ -63,7 +63,7 @@ paths: example: base62: 6DMW88LpSok9Z7P7hUK0wv7bF base16: 3199af08bfeeaf5d420f27ed9c01e74370077 - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -79,7 +79,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -107,7 +107,7 @@ paths: in: query name: base16 responses: - "200": + '200': description: Base conversion successful. schema: description: Base conversion successful. @@ -122,7 +122,7 @@ paths: example: base16: 3199af08bfeeaf5d420f27ed9c01e74370077 base62: 6DMW88LpSok9Z7P7hUK0wv7bF - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -138,7 +138,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -159,7 +159,7 @@ paths: summary: Tests if Butler is alive and responding description: Tests if Butler is alive and responding responses: - "200": + '200': description: Butler is alive and well. schema: description: Butler is alive and well. @@ -171,7 +171,7 @@ paths: butlerVersion: type: string example: 5.5.0 - "500": + '500': description: Internal error. schema: description: Internal error. @@ -231,7 +231,7 @@ paths: behaviour is OS-dependent. Defaults to false. example: false responses: - "201": + '201': description: File copied. schema: description: File copied. @@ -262,7 +262,7 @@ paths: preserved on the destination file(s). When false, timestamp behaviour is OS-dependent. Defaults to false. example: false - "400": + '400': description: '"Required parameter missing" or "fromFile not found".' schema: description: '"Required parameter missing" or "fromFile not found".' @@ -278,7 +278,7 @@ paths: type: string time: type: string - "403": + '403': description: No approved fromDir/toDir for file copy. schema: description: No approved fromDir/toDir for file copy. @@ -294,7 +294,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -345,7 +345,7 @@ paths: already exists. Defaults to false. example: false responses: - "201": + '201': description: File moved. schema: description: File moved. @@ -367,7 +367,7 @@ paths: Controls whether destination file should be overwritten if it already exists. Defaults to false. example: false - "400": + '400': description: '"Required parameter missing" or "fromFile not found".' schema: description: '"Required parameter missing" or "fromFile not found".' @@ -383,7 +383,7 @@ paths: type: string time: type: string - "403": + '403': description: No approved fromDir/toDir for file copy. schema: description: No approved fromDir/toDir for file copy. @@ -399,7 +399,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -437,12 +437,12 @@ paths: Windows/non-Windows platform. example: data/qvdstore/sales/file1.qvd responses: - "204": + '204': description: File deleted. schema: description: File deleted. type: object - "400": + '400': description: >- "Required parameter missing" or "File requested for delete not found". @@ -462,7 +462,7 @@ paths: type: string time: type: string - "403": + '403': description: No approved directory matches the delete request. schema: description: No approved directory matches the delete request. @@ -478,7 +478,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -511,7 +511,7 @@ paths: description: Directory that should be created. example: subfolder/2020-10 responses: - "201": + '201': description: Directory created. schema: description: Directory created. @@ -521,7 +521,7 @@ paths: type: string description: Directory that was created. example: subfolder/2020-10 - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -537,7 +537,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -574,7 +574,7 @@ paths: absolute path. example: /Users/joe/data/qvds/2020 responses: - "201": + '201': description: Directory created. schema: description: Directory created. @@ -584,7 +584,7 @@ paths: type: string description: Directory that was created. example: /Users/joe/data/qvds/2020 - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -600,7 +600,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error (file system permissions etc). schema: description: Internal error (file system permissions etc). @@ -620,7 +620,7 @@ paths: get: summary: List all currently defined namespaces. responses: - "200": + '200': description: Array of all namespaces. schema: description: Array of all namespaces. @@ -631,7 +631,7 @@ paths: - Weekly sales app - Sales ETL step 1 - Sales ETL step 2 - "500": + '500': description: Internal error. schema: description: Internal error. @@ -652,19 +652,19 @@ paths: summary: Get the value associated with a key, in a specific namespace. parameters: - type: string - description: "" + description: '' example: Last extract timestamp required: true in: query name: key - type: string - description: "" + description: '' example: Sales ETL step 2 required: true in: path name: namespace responses: - "200": + '200': description: Key and it's associated value and metadata returned. schema: description: Key and it's associated value and metadata returned. @@ -681,8 +681,8 @@ paths: value: type: string description: Value stored in the key-value pair. - example: "2020-09-29 17:14:56" - "400": + example: '2020-09-29 17:14:56' + '400': description: '"Namespace or key not found" or "Required parameter missing".' schema: description: '"Namespace or key not found" or "Required parameter missing".' @@ -698,7 +698,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -738,7 +738,7 @@ paths: value: type: string description: Value to set - example: "12345.789" + example: '12345.789' ttl: type: number description: >- @@ -752,7 +752,7 @@ paths: in: path name: namespace responses: - "201": + '201': description: Key successfully set. schema: description: Key successfully set. @@ -769,14 +769,14 @@ paths: value: type: string description: Value stored in the key-value pair. - example: "2020-09-29 17:14:56" + example: '2020-09-29 17:14:56' ttl: type: number description: >- Time-to-live for the key-value pair. 0 if no ttl was set, otherwise in milliseconds. example: 60000 - "400": + '400': description: '"Namespace not found" or "Required parameter missing".' schema: description: '"Namespace not found" or "Required parameter missing".' @@ -792,7 +792,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -818,13 +818,13 @@ paths: in: path name: namespace responses: - "204": + '204': description: Namespace successfully deleted. schema: description: Namespace successfully deleted. type: string - example: "" - "400": + example: '' + '400': description: '"Namespace not found" or "Required parameter missing".' schema: description: '"Namespace not found" or "Required parameter missing".' @@ -840,7 +840,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -862,19 +862,19 @@ paths: description: Returns true if the specified key exists, otherwise false. parameters: - type: string - description: "" + description: '' example: Last extract timestamp required: true in: query name: key - type: string - description: "" + description: '' example: Sales ETL step 2 required: true in: path name: namespace responses: - "200": + '200': description: >- Key exist/no-exist returned, together with the data if the does exist. @@ -903,8 +903,8 @@ paths: value: type: string description: Value stored in the key-value pair. - example: "2020-09-29 17:14:56" - "400": + example: '2020-09-29 17:14:56' + '400': description: '"Namespace not found" or "Required parameter missing".' schema: description: '"Namespace not found" or "Required parameter missing".' @@ -920,7 +920,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -953,13 +953,13 @@ paths: in: path name: key responses: - "204": + '204': description: Key-value pair successfully deleted. schema: description: Key-value pair successfully deleted. type: string - example: "" - "400": + example: '' + '400': description: '"Namespace or key not found" or "Required parameter missing".' schema: description: '"Namespace or key not found" or "Required parameter missing".' @@ -975,7 +975,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1002,7 +1002,7 @@ paths: in: path name: namespace responses: - "200": + '200': description: Object containing namespace name + list of allkeys in the namespace. schema: description: >- @@ -1012,7 +1012,7 @@ paths: properties: namespace: type: string - description: "" + description: '' example: Sales ETL step 2 keys: type: array @@ -1023,7 +1023,7 @@ paths: example: - key: ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_1 - key: ce68c8ca-b3ff-4371-8285-7c9ce5040e42_parameter_2 - "400": + '400': description: '"Namespace not found" or "Required parameter missing".' schema: description: '"Namespace not found" or "Required parameter missing".' @@ -1039,7 +1039,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1079,7 +1079,7 @@ paths: - topic - message responses: - "201": + '201': description: MQTT message successfully published. schema: description: MQTT message successfully published. @@ -1091,7 +1091,7 @@ paths: message: type: string example: dt=20201028 - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -1107,7 +1107,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1182,7 +1182,7 @@ paths: - type - value responses: - "202": + '202': description: Data accepted and sent to New Relic. schema: description: Data accepted and sent to New Relic. @@ -1190,11 +1190,11 @@ paths: properties: newRelicResultCode: type: number - example: "202" + example: '202' newRelicResultText: type: string example: Data accepted. - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -1210,7 +1210,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1275,7 +1275,7 @@ paths: in: path name: appId responses: - "201": + '201': description: App successfully reloaded. schema: description: App successfully reloaded. @@ -1285,7 +1285,7 @@ paths: type: string description: ID of reloaded app example: 210832b5-6174-4572-bd19-3e61eda675ef - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -1301,7 +1301,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1329,14 +1329,14 @@ paths: in: path name: appId responses: - "200": + '200': description: App dump successful. App metadata returned as JSON. schema: description: App dump successful. App metadata returned as JSON. type: object example: properties: {} - loadScript: "" + loadScript: '' sheets: [] stories: [] masterobjects: [] @@ -1349,7 +1349,7 @@ paths: fields: [] variables: [] measures: [] - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -1365,7 +1365,7 @@ paths: type: string time: type: string - "422": + '422': description: App not found in Qlik Sense. schema: description: App not found in Qlik Sense. @@ -1381,7 +1381,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1409,14 +1409,14 @@ paths: in: path name: appId responses: - "200": + '200': description: App dump successful. App metadata returned as JSON. schema: description: App dump successful. App metadata returned as JSON. type: object example: properties: {} - loadScript: "" + loadScript: '' sheets: [] stories: [] masterobjects: [] @@ -1429,7 +1429,7 @@ paths: fields: [] variables: [] measures: [] - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -1445,7 +1445,7 @@ paths: type: string time: type: string - "422": + '422': description: App not found in Qlik Sense. schema: description: App not found in Qlik Sense. @@ -1461,7 +1461,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1482,7 +1482,7 @@ paths: summary: Get a list of all apps in Sense environment. description: Does the same thing as `/v4/apps/list` responses: - "200": + '200': description: App list successfully retrieved. schema: description: App list successfully retrieved. @@ -1498,7 +1498,7 @@ paths: type: string description: App name example: 2021 sales targets - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1519,7 +1519,7 @@ paths: summary: Get a list of all apps in Sense environment. description: Does the same thing as `/v4/senselistapps` responses: - "200": + '200': description: App list successfully retrieved. schema: description: App list successfully retrieved. @@ -1535,7 +1535,7 @@ paths: type: string description: App name example: 2021 sales targets - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1648,7 +1648,7 @@ paths: in: path name: taskId responses: - "200": + '200': description: Task successfully started. schema: description: Task successfully started. @@ -1673,7 +1673,7 @@ paths: tasksCPDenied: - name: taskGroup value: cp_value_denied1 - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -1689,7 +1689,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1801,7 +1801,7 @@ paths: in: path name: taskId responses: - "200": + '200': description: Task successfully started. schema: description: Task successfully started. @@ -1826,7 +1826,7 @@ paths: tasksCPDenied: - name: taskGroup value: cp_value_denied1 - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -1842,7 +1842,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error. @@ -1873,7 +1873,7 @@ paths: description: >- Slack channel to post message into. Prefix channel name with #. - example: "#reload-notification" + example: '#reload-notification' from_user: type: string description: Name of sending user, as shown in the Slack message @@ -1891,7 +1891,7 @@ paths: - from_user - msg responses: - "201": + '201': description: Message successfully sent to Slack. schema: description: Message successfully sent to Slack. @@ -1902,7 +1902,7 @@ paths: description: >- Slack channel to post message into. Prefix channel name with #. - example: "#reload-notification" + example: '#reload-notification' from_user: type: string description: Name of sending user, as shown in the Slack message @@ -1915,7 +1915,7 @@ paths: type: string description: Emoji to shown next to Slack message example: thumbsup - "400": + '400': description: Required parameter missing. schema: description: Required parameter missing. @@ -1931,7 +1931,7 @@ paths: type: string time: type: string - "500": + '500': description: Internal error. schema: description: Internal error.