From 2d1ef7a1704bc31069f0cf943a2d70715c9cfb02 Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Mon, 17 Feb 2020 20:14:16 +0300 Subject: [PATCH 001/347] Add endpoints to call processes --- .../apiDefinition.swagger.json | 109 +++++++++++++++++- 1 file changed, 104 insertions(+), 5 deletions(-) diff --git a/connectors/Plumsail Documents/apiDefinition.swagger.json b/connectors/Plumsail Documents/apiDefinition.swagger.json index 2d9e20cb8..6076815fd 100644 --- a/connectors/Plumsail Documents/apiDefinition.swagger.json +++ b/connectors/Plumsail Documents/apiDefinition.swagger.json @@ -9,7 +9,7 @@ "data": { "description": "JSON data that should be applied to the template", "type": "object", - "x-ms-summary": "Template Data" + "x-ms-summary": "Template data" }, "documentContent": { "description": "Content of the template", @@ -879,7 +879,7 @@ "data": { "description": "JSON data that should be applied to the template", "type": "object", - "x-ms-summary": "Template Data" + "x-ms-summary": "Template data" }, "html": { "description": "Text HTML template or HTML file template", @@ -1759,7 +1759,7 @@ "data": { "description": "JSON data that should be applied to the template", "type": "object", - "x-ms-summary": "Template Data" + "x-ms-summary": "Template data" }, "documentContent": { "description": "Content of the template", @@ -2629,7 +2629,7 @@ "data": { "description": "JSON data that should be applied to the template", "type": "object", - "x-ms-summary": "Template Data" + "x-ms-summary": "Template data" }, "documentContent": { "description": "Content of the template", @@ -3683,7 +3683,7 @@ "data": { "description": "JSON data that should be applied to the template", "type": "object", - "x-ms-summary": "Template Data" + "x-ms-summary": "Template data" }, "docxDocument": { "description": "Raw content of docx document template. MergeField names should be the same as keys in template data", @@ -5657,6 +5657,105 @@ ], "x-ms-visibility": "internal" } + }, + "/flow/v1/ProcessesFlow/Schema/GetProcesses": { + "post": { + "consumes": [], + "description": "System", + "operationId": "FlowV1ProcessesFlowSchemaGetProcessesPost", + "parameters": [], + "produces": [], + "responses": { + "200": { + "description": "Success" + }, + "403": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@plumsail.com" + }, + "500": { + "description": "Internal server error, please write an email to support@plumsail.com" + } + }, + "summary": "GetProcessesSchema", + "tags": [ + "ProcessesFlowSchema" + ], + "x-ms-visibility": "internal" + } + }, + "/flow/v1/ProcessesFlow/jobs/ExecuteProcess": { + "post": { + "consumes": [ + "application/json-patch+json", + "application/json", + "text/json", + "application/*+json" + ], + "description": "Fill a template related to the selected process with the JSON data", + "operationId": "FlowV1ProcessesFlowJobsExecuteProcessPost", + "parameters": [ + { + "description": "The name of process to be started", + "in": "query", + "name": "processId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "FlowV1ProcessesFlowSchemaGetProcessesPost", + "parameters": {}, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Process name" + }, + { + "description": "JSON data that should be applied to the template", + "in": "body", + "name": "jsonContent", + "required": true, + "schema": { + "type": "object" + }, + "x-ms-summary": "Template data" + } + ], + "produces": [], + "responses": { + "200": { + "description": "Result file", + "schema": { + "format": "binary", + "title": "Result file", + "type": "string" + } + }, + "202": { + "description": "Accepted", + "headers": { + "Location": { + "description": "Contains URL where the result of job exection will be available", + "type": "string" + } + } + }, + "403": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@plumsail.com" + }, + "500": { + "description": "Internal server error, please write an email to support@plumsail.com" + } + }, + "summary": "Start document generation process", + "tags": [ + "ProcessesFlow" + ] + } } }, "produces": [ From 7a77bb342d27e0ce39ea141b73db926ddbf32d7c Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Wed, 19 Feb 2020 13:59:43 +0300 Subject: [PATCH 002/347] Add readme file --- connectors/Plumsail Documents/readme.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 connectors/Plumsail Documents/readme.md diff --git a/connectors/Plumsail Documents/readme.md b/connectors/Plumsail Documents/readme.md new file mode 100644 index 000000000..9310bfa1f --- /dev/null +++ b/connectors/Plumsail Documents/readme.md @@ -0,0 +1,18 @@ +## Plumsail Documents Connector +Plumsail Documents provides a powerful and very extensive REST API. Using this API, you can generate documents in Microsoft Flow, Azure Logic Apps or PowerApps. + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Apps or Power Automate plan with custom connector feature +* A valid [Plumsail Account](https://account.plumsail.com) +* The Power platform CLI tools + +### Deploying the sample +Run the following commands and follow the prompts: + +```paconn +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json --secret +``` + +## Supported Operations +Checkout full API reference on [Plumsail Documents Documentation](https://plumsail.com/docs/documents/v1.x/index.html) \ No newline at end of file From 00de725ce796b30310b18431671a39b5ed8b7c7d Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Tue, 25 Feb 2020 12:13:42 +0300 Subject: [PATCH 003/347] Fix typo in product naming --- certified-connectors/Plumsail Documents/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/Plumsail Documents/readme.md b/certified-connectors/Plumsail Documents/readme.md index 9310bfa1f..26bef2def 100644 --- a/certified-connectors/Plumsail Documents/readme.md +++ b/certified-connectors/Plumsail Documents/readme.md @@ -1,5 +1,5 @@ ## Plumsail Documents Connector -Plumsail Documents provides a powerful and very extensive REST API. Using this API, you can generate documents in Microsoft Flow, Azure Logic Apps or PowerApps. +Plumsail Documents provides a powerful and very extensive REST API. Using this API, you can generate documents in Microsoft Power Automate, Azure Logic Apps or Power Apps. ## Pre-requisites You will need the following to proceed: @@ -11,7 +11,7 @@ You will need the following to proceed: Run the following commands and follow the prompts: ```paconn -paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json --secret +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json --icon [Path to icon.png] ``` ## Supported Operations From fa1ef12f725496aae2e77c37ea21224c0a1b59ca Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Wed, 26 Feb 2020 12:36:08 +0300 Subject: [PATCH 004/347] Add x-ms-api-annotation --- .../Plumsail Documents/apiDefinition.swagger.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/certified-connectors/Plumsail Documents/apiDefinition.swagger.json b/certified-connectors/Plumsail Documents/apiDefinition.swagger.json index 6076815fd..f38f4c9c2 100644 --- a/certified-connectors/Plumsail Documents/apiDefinition.swagger.json +++ b/certified-connectors/Plumsail Documents/apiDefinition.swagger.json @@ -4140,7 +4140,10 @@ }, "description": "The API allows you to create documents from templates (DOCX or HTML file), convert it to PDF and many more. Visit https://plumsail.com/documents for more information", "title": "Plumsail Documents", - "version": "v1" + "version": "v1", + "x-ms-api-annotation": { + "status": "Production" + } }, "parameters": {}, "paths": { From 661fe3984ef7e71c4e5b39a7b4179f4ddfa7199e Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Tue, 3 Mar 2020 18:03:27 +0300 Subject: [PATCH 005/347] Add regex actions & readme & icons --- .../Plumsail Documents/icon.png | Bin 0 -> 2632 bytes .../Plumsail SP/apiDefinition.swagger.json | 468 +++++++++++++++++- certified-connectors/Plumsail SP/icon.png | Bin 0 -> 4254 bytes certified-connectors/Plumsail SP/readme.md | 18 + 4 files changed, 481 insertions(+), 5 deletions(-) create mode 100644 certified-connectors/Plumsail Documents/icon.png create mode 100644 certified-connectors/Plumsail SP/icon.png create mode 100644 certified-connectors/Plumsail SP/readme.md diff --git a/certified-connectors/Plumsail Documents/icon.png b/certified-connectors/Plumsail Documents/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cfffacfb4895e2049329d6541caa76db096ec626 GIT binary patch literal 2632 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 literal 0 HcmV?d00001 diff --git a/certified-connectors/Plumsail SP/readme.md b/certified-connectors/Plumsail SP/readme.md new file mode 100644 index 000000000..fdd048562 --- /dev/null +++ b/certified-connectors/Plumsail SP/readme.md @@ -0,0 +1,18 @@ +## Plumsail SP Connector +Advanced SharePoint actions for Microsoft Flow, Azure Logic Apps or PowerApps. + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Apps or Power Automate plan with custom connector feature +* A valid [Plumsail Account](https://account.plumsail.com) +* The Power platform CLI tools + +### Deploying the sample +Run the following commands and follow the prompts: + +```paconn +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json --icon [Path to icon.png] +``` + +## Supported Operations +Checkout full API reference on [Plumsail Actions Documentation](https://plumsail.com/docs/actions/v1.x/index.html) \ No newline at end of file From cfef84fd87d40852971a98810269f4f2b76815e9 Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Tue, 10 Mar 2020 14:01:32 +0300 Subject: [PATCH 006/347] Remove icons --- certified-connectors/Plumsail Documents/icon.png | Bin 2632 -> 0 bytes certified-connectors/Plumsail SP/icon.png | Bin 4254 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 certified-connectors/Plumsail Documents/icon.png delete mode 100644 certified-connectors/Plumsail SP/icon.png diff --git a/certified-connectors/Plumsail Documents/icon.png b/certified-connectors/Plumsail Documents/icon.png deleted file mode 100644 index cfffacfb4895e2049329d6541caa76db096ec626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2632 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 From ae17cd8a6e96e5561b97a6dc54eeb53d28a1ba29 Mon Sep 17 00:00:00 2001 From: Dmitriy Kozlov Date: Thu, 9 Apr 2020 11:27:03 +0300 Subject: [PATCH 007/347] Updated Plumsail Forms connector --- .../Plumsail Forms/apiDefinition.swagger.json | 229 +++++++++++++----- .../Plumsail Forms/apiProperties.json | 52 ++-- 2 files changed, 187 insertions(+), 94 deletions(-) diff --git a/certified-connectors/Plumsail Forms/apiDefinition.swagger.json b/certified-connectors/Plumsail Forms/apiDefinition.swagger.json index e51124e52..3ee27c01b 100644 --- a/certified-connectors/Plumsail Forms/apiDefinition.swagger.json +++ b/certified-connectors/Plumsail Forms/apiDefinition.swagger.json @@ -8,20 +8,72 @@ "name": "Plumsail Team", "url": "https://plumsail.com", "email": "support@plumsail.com" - }, - "x-ms-api-annotation": { - "status": "Preview" } }, "host": "forms.plumsail.com", "basePath": "/", "schemes": [ - "http" + "https" ], + "consumes": [], + "produces": [], "paths": { + "/api/v{version}/designer/forms": { + "get": { + "tags": [ + "Designer" + ], + "operationId": "GetPublicForms", + "consumes": [], + "produces": [ + "text/plain", + "application/json", + "text/json" + ], + "parameters": [ + { + "name": "format", + "in": "query", + "required": false, + "type": "integer", + "format": "int32", + "enum": [ + 0, + 1 + ] + }, + { + "name": "version", + "in": "path", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns an array of public forms.", + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/definitions/Form" + } + } + }, + "401": { + "description": "Authorization information is missing or invalid." + } + }, + "x-ms-visibility": "internal", + "summary": "Get public forms", + "description": "Returns an array of public forms" + } + }, "/api/flow/schema/form": { "get": { - "tags": [ "Schema" ], + "tags": [ + "Schema" + ], "operationId": "GetFormSchema", "consumes": [], "produces": [], @@ -33,12 +85,16 @@ "type": "string", "format": "uuid", "x-ms-summary": "Form ID", - "description": "Form ID" + "description": "" } ], "responses": { - "200": { "description": "Returns form schema." }, - "401": { "description": "Authorization information is missing or invalid." } + "200": { + "description": "Returns form schema." + }, + "401": { + "description": "Authorization information is missing or invalid." + } }, "x-ms-visibility": "internal", "summary": "Get form schema", @@ -46,37 +102,81 @@ } }, "/api/submissions": { + "x-ms-notification-content": { + "description": "Form data", + "schema": { + "$ref": "#/definitions/FormSchema" + } + }, "post": { - "tags": [ "SubmissionTrigger" ], + "tags": [ + "SubmissionTrigger" + ], "operationId": "FormIsSubmitted", - "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], + "consumes": [ + "application/json-patch+json", + "application/json", + "text/json", + "application/*+json" + ], "produces": [], "parameters": [ { "name": "subscriber", "in": "body", "required": true, - "schema": { "$ref": "#/definitions/Subscriber" } + "schema": { + "required": [ + "callbackUrl", + "formId" + ], + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-notification-url": true + }, + "formId": { + "format": "uuid", + "type": "string", + "x-ms-summary": "Form", + "description": "The form which submissions you want to track.", + "x-ms-dynamic-values": { + "operationId": "GetPublicForms", + "value-path": "id", + "value-title": "name", + "parameters": { + "version": "2" + } + } + } + } + } } ], "responses": { - "201": { "description": "Subscription has been created." }, - "400": { "description": "Invalid subscription configuration." }, - "401": { "description": "Authorization information is missing or invalid." } + "201": { + "description": "Subscription has been created." + }, + "400": { + "description": "Invalid subscription configuration." + }, + "401": { + "description": "Authorization information is missing or invalid." + } }, "x-ms-visibility": "important", "summary": "Form is submitted", "description": "Fires whenever the target form is submitted", "x-ms-trigger": "single" - }, - "x-ms-notification-content": { - "description": "Form data", - "schema": { "$ref": "#/definitions/FormSchema" } } }, "/api/submissions/{subscriberId}": { "delete": { - "tags": [ "SubmissionTrigger" ], + "tags": [ + "SubmissionTrigger" + ], "operationId": "Unsubscribe", "consumes": [], "produces": [], @@ -89,49 +189,55 @@ "format": "uuid" } ], - "responses": { "200": { "description": "Success" } }, + "responses": { + "200": { + "description": "Success" + } + }, "x-ms-visibility": "internal", "summary": "Unsubscribe", "description": "Removes the subscriber" } - }, - "/api/submissions/user": { - "get": { - "tags": [ "SubmissionTrigger" ], - "operationId": "GetCurrentUser", - "consumes": [], - "produces": [ "text/plain", "application/json", "text/json" ], - "parameters": [], - "responses": { - "200": { - "description": "Returns current user.", - "schema": { "$ref": "#/definitions/UserResponse" } - }, - "401": { "description": "Authorization information is missing or invalid." } - }, - "x-ms-visibility": "internal", - "summary": "Get current user", - "description": "Returns an e-mail address of the current user" - } } }, "definitions": { - "Subscriber": { + "Form": { "type": "object", - "required": [ - "callbackUrl" - ], "properties": { - "formId": { + "id": { "format": "uuid", - "type": "string", - "x-ms-summary": "Form ID", - "description": "The ID of a form which submissions you want to track." + "type": "string" }, + "name": { + "type": "string" + } + } + }, + "Subscriber": { + "required": [ + "callbackUrl", + "formId" + ], + "type": "object", + "properties": { "callbackUrl": { "type": "string", "x-ms-visibility": "internal", - "x-ms-notification-url": "true" + "x-ms-notification-url": true + }, + "formId": { + "format": "uuid", + "type": "string", + "x-ms-summary": "Form", + "description": "The form which submissions you want to track.", + "x-ms-dynamic-values": { + "operationId": "GetPublicForms", + "value-path": "id", + "value-title": "name", + "parameters": { + "version": "2" + } + } } } }, @@ -141,29 +247,25 @@ "x-ms-dynamic-schema": { "operationId": "GetFormSchema", "value-path": "response", - "parameters": { "formId": { "parameter": "formId" } } + "parameters": { + "formId": { + "parameter": "formId" + } + } }, "x-ms-dynamic-properties": { "operationId": "GetFormSchema", - "itemValuePath": "response", "parameters": { "formId": { - "parameterReference": "subscriber/formId" + "parameterReference": "subscriber/formId" } - } - } - }, - "UserResponse": { - "type": "object", - "properties": { - "email": { - "type": "string", - "x-ms-summary": "Email", - "description": "Current user's e-mail address" - } + }, + "itemValuePath": "response" } } }, + "parameters": {}, + "responses": {}, "securityDefinitions": { "oauth2": { "flow": "accessCode", @@ -176,5 +278,6 @@ "type": "oauth2" } }, - "security": [ { "oauth2": [] } ] + "security": [ { "oauth2": [] } ], + "tags": [] } \ No newline at end of file diff --git a/certified-connectors/Plumsail Forms/apiProperties.json b/certified-connectors/Plumsail Forms/apiProperties.json index ac64e3a5c..c838c0310 100644 --- a/certified-connectors/Plumsail Forms/apiProperties.json +++ b/certified-connectors/Plumsail Forms/apiProperties.json @@ -1,45 +1,35 @@ { "properties": { - "capabilities": [ - "actions", - "triggers" - ], "connectionParameters": { "token": { + "type": "oauthSetting", "oAuthSettings": { + "identityProvider": "oauth2", "clientId": "3d8caf5f-2f67-4b4a-9a81-2ee61709220f", - "customParameters": { - "authorizationUrlTemplate": { - "value": "https://auth.plumsail.com/connect/authorize" - }, - "refreshUrlTemplate": { - "value": "https://auth.plumsail.com/connect/token" - }, - "tokenUrlTemplate": { - "value": "https://auth.plumsail.com/connect/token" - } - }, - "identityProvider": "oauth2generic", + "scopes": [ + "openid", + "offline_access" + ], + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", "properties": { "IsFirstParty": "False" }, - "redirectMode": "Direct", - "redirectUrl": "https://firstrelease-001.consent.azure-apim.net/redirect", - "scopes": [ - "openid offline_access" - ] - }, - "type": "oauthSetting", - "uiDefinition": { - "constraints": { - "required": "true" - }, - "description": "Login with your credentials", - "displayName": "Login with your credentials", - "tooltip": "Login with your credentials" + "customParameters": { + "authorizationUrl": { + "value": "https://auth.plumsail.com/connect/authorize" + }, + "tokenUrl": { + "value": "https://auth.plumsail.com/connect/token" + }, + "refreshUrl": { + "value": "https://auth.plumsail.com/connect/token" + } + } } } }, - "iconBrandColor": "#218EFF" + "iconBrandColor": "#218eff", + "capabilities": [] } } \ No newline at end of file From 17e336d261c4c4a23b0fe9a3df58353b1256e6dd Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Thu, 7 May 2020 23:48:32 -0400 Subject: [PATCH 008/347] New edit custom field actions; misc designer edits --- .../apiDefinition.swagger.json | 865 +++++++++++++++++- 1 file changed, 819 insertions(+), 46 deletions(-) diff --git a/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json b/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json index c9f0dd171..ba1215230 100644 --- a/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json +++ b/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json @@ -713,6 +713,52 @@ } } }, + "/constituent/v1/actions/customfields/{custom_field_id}": { + "patch": { + "operationId": "EditActionCustomField", + "summary": "Update an action custom field", + "description": "Updates an action custom field.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "custom_field_id", + "in": "path", + "description": "The system record ID of the custom field to update.", + "required": true, + "type": "string", + "x-ms-summary": "Custom field ID", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/ConstituentApi.ActionCustomFieldEdit" + }, + "description": "An object that represents the properties of the custom field to update." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully updates the custom field." + }, + "400": { + "description": "Returned when the specified custom field ID in the request URL or the specified request parameters are not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to update the custom field." + }, + "404": { + "description": "Returned when the specified custom field is not found." + } + } + } + }, "/constituent/v1/actions/customfields/categories/details": { "get": { "operationId": "ListActionCustomFieldCategoryDetails", @@ -999,20 +1045,6 @@ "application/json" ], "parameters": [ - { - "name": "limit", - "in": "query", - "description": "Represents the number of records to return. The default is 500.", - "type": "integer", - "x-ms-summary": "Limit" - }, - { - "name": "offset", - "in": "query", - "description": "Represents the number of records to skip. For use with pagination.", - "type": "integer", - "x-ms-summary": "Offset" - }, { "name": "list_id", "in": "query", @@ -1040,6 +1072,20 @@ } } }, + { + "name": "limit", + "in": "query", + "description": "Represents the number of records to return. The default is 500.", + "type": "integer", + "x-ms-summary": "Limit" + }, + { + "name": "offset", + "in": "query", + "description": "Represents the number of records to skip. For use with pagination.", + "type": "integer", + "x-ms-summary": "Offset" + }, { "name": "constituent_code", "in": "query", @@ -1930,6 +1976,52 @@ } } }, + "/constituent/v1/constituents/customfields/{custom_field_id}": { + "patch": { + "operationId": "EditConstituentCustomField", + "summary": "Update a constituent custom field", + "description": "Updates a constituent custom field.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "custom_field_id", + "in": "path", + "description": "The system record ID of the custom field to update.", + "required": true, + "type": "string", + "x-ms-summary": "Custom field ID", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/ConstituentApi.ConstituentCustomFieldEdit" + }, + "description": "An object that represents the properties of the custom field to update." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully updates the custom field." + }, + "400": { + "description": "Returned when the specified custom field ID in the request URL or the specified request parameters are not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to update the custom field." + }, + "404": { + "description": "Returned when the specified custom field is not found." + } + } + } + }, "/constituent/v1/constituents/customfields/categories/details": { "get": { "operationId": "ListConstituentCustomFieldCategoryDetails", @@ -3049,6 +3141,52 @@ } } }, + "/fundraising/v1/appeals/customfields/{custom_field_id}": { + "patch": { + "operationId": "EditAppealCustomField", + "summary": "Update an appeal custom field", + "description": "Updates an appeal custom field.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "custom_field_id", + "in": "path", + "description": "The system record ID of the custom field to update.", + "required": true, + "type": "string", + "x-ms-summary": "Custom field ID", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/FundraisingApi.AppealCustomFieldEdit" + }, + "description": "An object that represents the properties of the custom field to update." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully updates the custom field." + }, + "400": { + "description": "Returned when the specified custom field ID in the request URL or the specified request parameters are not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to update the custom field." + }, + "404": { + "description": "Returned when the specified custom field is not found." + } + } + } + }, "/fundraising/v1/appeals/customfields/categories": { "get": { "operationId": "ListAppealCustomFieldCategories", @@ -3377,6 +3515,52 @@ } } }, + "/fundraising/v1/campaigns/customfields/{custom_field_id}": { + "patch": { + "operationId": "EditCampaignCustomField", + "summary": "Update a campaign custom field", + "description": "Updates a campaign custom field.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "custom_field_id", + "in": "path", + "description": "The system record ID of the custom field to update.", + "required": true, + "type": "string", + "x-ms-summary": "Custom field ID", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/FundraisingApi.CampaignCustomFieldEdit" + }, + "description": "An object that represents the properties of the custom field to update." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully updates the custom field." + }, + "400": { + "description": "Returned when the specified custom field ID in the request URL or the specified request parameters are not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to update the custom field." + }, + "404": { + "description": "Returned when the specified custom field is not found." + } + } + } + }, "/fundraising/v1/campaigns/customfields/categories": { "get": { "operationId": "ListCampaignCustomFieldCategories", @@ -3705,6 +3889,52 @@ } } }, + "/fundraising/v1/funds/customfields/{custom_field_id}": { + "patch": { + "operationId": "EditFundCustomField", + "summary": "Update a fund custom field", + "description": "Updates a fund custom field.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "custom_field_id", + "in": "path", + "description": "The system record ID of the custom field to update.", + "required": true, + "type": "string", + "x-ms-summary": "Custom field ID", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/FundraisingApi.FundCustomFieldEdit" + }, + "description": "An object that represents the properties of the custom field to update." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully updates the custom field." + }, + "400": { + "description": "Returned when the specified custom field ID in the request URL or the specified request parameters are not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to update the custom field." + }, + "404": { + "description": "Returned when the specified custom field is not found." + } + } + } + }, "/fundraising/v1/funds/customfields/categories": { "get": { "operationId": "ListFundCustomFieldCategories", @@ -3939,6 +4169,13 @@ "application/json" ], "parameters": [ + { + "name": "gift_type", + "in": "query", + "description": "Represents a list of gift types. Returns gifts if their type matches any specified. For example, \"gift_type=MatchingGiftPledge&gift_type=RecurringGift\" returns gifts of type MatchingGiftPledge or RecurringGift.", + "type": "string", + "x-ms-summary": "Type" + }, { "name": "constituent_id", "in": "query", @@ -3946,6 +4183,27 @@ "type": "string", "x-ms-summary": "Constituent ID" }, + { + "name": "campaign_id", + "in": "query", + "description": "Represents a list of campaign identifiers. Returns gifts if any of the specified campaign identifiers match any of their campaigns. For example, \"campaign_id=280&campaign_id=1232\" returns gifts with either \"280\" or \"1232\" campaign identifiers.", + "type": "string", + "x-ms-summary": "Campaign ID" + }, + { + "name": "fund_id", + "in": "query", + "description": "Represents a list of fund identifiers. Returns gifts if any of the specified fund identifiers match any of their funds. For example, \"fund_id=280&fund_id=1232\" returns gifts with either \"280\" or \"1232\" fund identifiers.", + "type": "string", + "x-ms-summary": "Fund ID" + }, + { + "name": "appeal_id", + "in": "query", + "description": "Represents a list of appeal identifiers. Returns gifts if any of the specified appeal identifiers match any of their appeals. For example, \"appeal_id=280&appeal_id=1232\" returns gifts with either \"280\" or \"1232\" appeal identifiers.", + "type": "string", + "x-ms-summary": "Appeal ID" + }, { "name": "limit", "in": "query", @@ -3960,14 +4218,6 @@ "type": "integer", "x-ms-summary": "Offset" }, - { - "name": "gift_type", - "in": "query", - "description": "Represents a list of gift types. Returns gifts if their type matches any specified. For example, \"gift_type=MatchingGiftPledge&gift_type=RecurringGift\" returns gifts of type MatchingGiftPledge or RecurringGift.", - "type": "string", - "x-ms-summary": "Type", - "x-ms-visibility": "advanced" - }, { "name": "post_status", "in": "query", @@ -3992,30 +4242,6 @@ "x-ms-summary": "Acknowledgement status", "x-ms-visibility": "advanced" }, - { - "name": "campaign_id", - "in": "query", - "description": "Represents a list of campaign identifiers. Returns gifts if any of the specified campaign identifiers match any of their campaigns. For example, \"campaign_id=280&campaign_id=1232\" returns gifts with either \"280\" or \"1232\" campaign identifiers.", - "type": "string", - "x-ms-summary": "Campaign ID", - "x-ms-visibility": "advanced" - }, - { - "name": "fund_id", - "in": "query", - "description": "Represents a list of fund identifiers. Returns gifts if any of the specified fund identifiers match any of their funds. For example, \"fund_id=280&fund_id=1232\" returns gifts with either \"280\" or \"1232\" fund identifiers.", - "type": "string", - "x-ms-summary": "Fund ID", - "x-ms-visibility": "advanced" - }, - { - "name": "appeal_id", - "in": "query", - "description": "Represents a list of appeal identifiers. Returns gifts if any of the specified appeal identifiers match any of their appeals. For example, \"appeal_id=280&appeal_id=1232\" returns gifts with either \"280\" or \"1232\" appeal identifiers.", - "type": "string", - "x-ms-summary": "Appeal ID", - "x-ms-visibility": "advanced" - }, { "name": "date_added", "in": "query", @@ -4291,6 +4517,52 @@ } } }, + "/gift/v1/gifts/customfields/{custom_field_id}": { + "patch": { + "operationId": "EditGiftCustomField", + "summary": "Update a gift custom field", + "description": "Updates a gift custom field.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "custom_field_id", + "in": "path", + "description": "The system record ID of the custom field to update.", + "required": true, + "type": "string", + "x-ms-summary": "Custom field ID", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/GiftApi.GiftCustomFieldEdit" + }, + "description": "An object that represents the properties of the custom field to update." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully updates the custom field." + }, + "400": { + "description": "Returned when the specified custom field ID in the request URL or the specified request parameters are not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to update the custom field." + }, + "404": { + "description": "Returned when the specified custom field is not found." + } + } + } + }, "/gift/v1/gifts/customfields/categories": { "get": { "operationId": "ListGiftCustomFieldCategories", @@ -4747,6 +5019,52 @@ } } }, + "/opportunity/v1/opportunities/customfields/{custom_field_id}": { + "patch": { + "operationId": "EditOpportunityCustomField", + "summary": "Update an opportunity custom field", + "description": "Updates an opportunity custom field.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "custom_field_id", + "in": "path", + "description": "The system record ID of the custom field to update.", + "required": true, + "type": "string", + "x-ms-summary": "Custom field ID", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/OpportunityApi.OpportunityCustomFieldEdit" + }, + "description": "An object that represents the properties of the custom field to update." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully updates the custom field." + }, + "400": { + "description": "Returned when the specified custom field ID in the request URL or the specified request parameters are not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to update the custom field." + }, + "404": { + "description": "Returned when the specified custom field is not found." + } + } + } + }, "/opportunity/v1/opportunities/customfields/categories": { "get": { "operationId": "ListOpportunityCustomFieldCategories", @@ -5876,6 +6194,71 @@ } } }, + "ConstituentApi.ActionCustomFieldEdit": { + "type": "object", + "description": "While records provide many fields to track information, organizations often require additional details. To track this specialized information, use custom fields.", + "properties": { + "category": { + "type": "string", + "description": "The custom field category (required if updating the custom field value).", + "x-ms-summary": "Category", + "x-ms-dynamic-values": { + "operationId": "ListActionCustomFieldCategoryDetails", + "value-collection": "value", + "value-path": "name", + "value-title": "name" + }, + "x-ms-dynamic-list": { + "operationId": "ListActionCustomFieldCategoryDetails", + "itemsPath": "value", + "itemValuePath": "name", + "itemTitlePath": "name" + } + }, + "value": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": "constituent", + "custom_field_type": "actions", + "category": { + "parameter": "category" + } + }, + "value-path": "items" + }, + "x-ms-dynamic-properties": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": { + "value": "constituent" + }, + "custom_field_type": { + "value": "actions" + }, + "category": { + "parameterReference": "body/category" + } + }, + "itemValuePath": "items" + } + }, + "date": { + "type": "string", + "format": "date", + "description": "The date on the custom field (ex: '2005-09-18').", + "x-ms-summary": "Date" + }, + "comment": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The comment on the custom field. Character limit: 50.", + "x-ms-summary": "Comment" + } + } + }, "ConstituentApi.ActionCustomFieldRead": { "type": "object", "description": "Custom field", @@ -7758,6 +8141,71 @@ } } }, + "ConstituentApi.ConstituentCustomFieldEdit": { + "type": "object", + "description": "While records provide many fields to track information, organizations often require additional details. To track this specialized information, use custom fields.", + "properties": { + "category": { + "type": "string", + "description": "The custom field category (required if updating the custom field value).", + "x-ms-summary": "Category", + "x-ms-dynamic-values": { + "operationId": "ListConstituentCustomFieldCategoryDetails", + "value-collection": "value", + "value-path": "name", + "value-title": "name" + }, + "x-ms-dynamic-list": { + "operationId": "ListConstituentCustomFieldCategoryDetails", + "itemsPath": "value", + "itemValuePath": "name", + "itemTitlePath": "name" + } + }, + "value": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": "constituent", + "custom_field_type": "constituents", + "category": { + "parameter": "category" + } + }, + "value-path": "items" + }, + "x-ms-dynamic-properties": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": { + "value": "constituent" + }, + "custom_field_type": { + "value": "constituents" + }, + "category": { + "parameterReference": "body/category" + } + }, + "itemValuePath": "items" + } + }, + "date": { + "type": "string", + "format": "date", + "description": "The date on the custom field (ex: '2005-09-18').", + "x-ms-summary": "Date" + }, + "comment": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The comment on the custom field. Character limit: 50.", + "x-ms-summary": "Comment" + } + } + }, "ConstituentApi.ConstituentCustomFieldRead": { "type": "object", "description": "Custom field", @@ -11929,6 +12377,71 @@ } } }, + "FundraisingApi.AppealCustomFieldEdit": { + "type": "object", + "description": "While records provide many fields to track information, organizations often require additional details. To track this specialized information, use custom fields.", + "properties": { + "category": { + "type": "string", + "description": "The custom field category (required if updating the custom field value).", + "x-ms-summary": "Category", + "x-ms-dynamic-values": { + "operationId": "ListAppealCustomFieldCategories", + "value-collection": "value", + "value-path": "name", + "value-title": "name" + }, + "x-ms-dynamic-list": { + "operationId": "ListAppealCustomFieldCategories", + "itemsPath": "value", + "itemValuePath": "name", + "itemTitlePath": "name" + } + }, + "value": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": "fundraising", + "custom_field_type": "appeals", + "category": { + "parameter": "category" + } + }, + "value-path": "items" + }, + "x-ms-dynamic-properties": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": { + "value": "fundraising" + }, + "custom_field_type": { + "value": "appeals" + }, + "category": { + "parameterReference": "body/category" + } + }, + "itemValuePath": "items" + } + }, + "date": { + "type": "string", + "format": "date", + "description": "The date on the custom field (ex: '2005-09-18').", + "x-ms-summary": "Date" + }, + "comment": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The comment on the custom field. Character limit: 50.", + "x-ms-summary": "Comment" + } + } + }, "FundraisingApi.AppealCustomFieldRead": { "type": "object", "description": "Custom field", @@ -12298,6 +12811,71 @@ } } }, + "FundraisingApi.CampaignCustomFieldEdit": { + "type": "object", + "description": "While records provide many fields to track information, organizations often require additional details. To track this specialized information, use custom fields.", + "properties": { + "category": { + "type": "string", + "description": "The custom field category (required if updating the custom field value).", + "x-ms-summary": "Category", + "x-ms-dynamic-values": { + "operationId": "ListCampaignCustomFieldCategories", + "value-collection": "value", + "value-path": "name", + "value-title": "name" + }, + "x-ms-dynamic-list": { + "operationId": "ListCampaignCustomFieldCategories", + "itemsPath": "value", + "itemValuePath": "name", + "itemTitlePath": "name" + } + }, + "value": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": "fundraising", + "custom_field_type": "campaigns", + "category": { + "parameter": "category" + } + }, + "value-path": "items" + }, + "x-ms-dynamic-properties": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": { + "value": "fundraising" + }, + "custom_field_type": { + "value": "campaigns" + }, + "category": { + "parameterReference": "body/category" + } + }, + "itemValuePath": "items" + } + }, + "date": { + "type": "string", + "format": "date", + "description": "The date on the custom field (ex: '2005-09-18').", + "x-ms-summary": "Date" + }, + "comment": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The comment on the custom field. Character limit: 50.", + "x-ms-summary": "Comment" + } + } + }, "FundraisingApi.CampaignCustomFieldRead": { "type": "object", "description": "Custom field", @@ -12758,6 +13336,71 @@ } } }, + "FundraisingApi.FundCustomFieldEdit": { + "type": "object", + "description": "While records provide many fields to track information, organizations often require additional details. To track this specialized information, use custom fields.", + "properties": { + "category": { + "type": "string", + "description": "The custom field category (required if updating the custom field value).", + "x-ms-summary": "Category", + "x-ms-dynamic-values": { + "operationId": "ListFundCustomFieldCategories", + "value-collection": "value", + "value-path": "name", + "value-title": "name" + }, + "x-ms-dynamic-list": { + "operationId": "ListFundCustomFieldCategories", + "itemsPath": "value", + "itemValuePath": "name", + "itemTitlePath": "name" + } + }, + "value": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": "fundraising", + "custom_field_type": "funds", + "category": { + "parameter": "category" + } + }, + "value-path": "items" + }, + "x-ms-dynamic-properties": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": { + "value": "fundraising" + }, + "custom_field_type": { + "value": "funds" + }, + "category": { + "parameterReference": "body/category" + } + }, + "itemValuePath": "items" + } + }, + "date": { + "type": "string", + "format": "date", + "description": "The date on the custom field (ex: '2005-09-18').", + "x-ms-summary": "Date" + }, + "comment": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The comment on the custom field. Character limit: 50.", + "x-ms-summary": "Comment" + } + } + }, "FundraisingApi.FundCustomFieldRead": { "type": "object", "description": "Custom field", @@ -13400,6 +14043,71 @@ } } }, + "GiftApi.GiftCustomFieldEdit": { + "type": "object", + "description": "While records provide many fields to track information, organizations often require additional details. To track this specialized information, use custom fields.", + "properties": { + "category": { + "type": "string", + "description": "The custom field category (required if updating the custom field value).", + "x-ms-summary": "Category", + "x-ms-dynamic-values": { + "operationId": "ListGiftCustomFieldCategories", + "value-collection": "value", + "value-path": "name", + "value-title": "name" + }, + "x-ms-dynamic-list": { + "operationId": "ListGiftCustomFieldCategories", + "itemsPath": "value", + "itemValuePath": "name", + "itemTitlePath": "name" + } + }, + "value": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": "gift", + "custom_field_type": "gifts", + "category": { + "parameter": "category" + } + }, + "value-path": "items" + }, + "x-ms-dynamic-properties": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": { + "value": "gift" + }, + "custom_field_type": { + "value": "gifts" + }, + "category": { + "parameterReference": "body/category" + } + }, + "itemValuePath": "items" + } + }, + "date": { + "type": "string", + "format": "date", + "description": "The date on the custom field (ex: '2005-09-18').", + "x-ms-summary": "Date" + }, + "comment": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The comment on the custom field. Character limit: 50.", + "x-ms-summary": "Comment" + } + } + }, "GiftApi.GiftCustomFieldRead": { "type": "object", "description": "Custom field", @@ -14579,6 +15287,71 @@ } } }, + "OpportunityApi.OpportunityCustomFieldEdit": { + "type": "object", + "description": "While records provide many fields to track information, organizations often require additional details. To track this specialized information, use custom fields.", + "properties": { + "category": { + "type": "string", + "description": "The custom field category (required if updating the custom field value).", + "x-ms-summary": "Category", + "x-ms-dynamic-values": { + "operationId": "ListOpportunityCustomFieldCategories", + "value-collection": "value", + "value-path": "name", + "value-title": "name" + }, + "x-ms-dynamic-list": { + "operationId": "ListOpportunityCustomFieldCategories", + "itemsPath": "value", + "itemValuePath": "name", + "itemTitlePath": "name" + } + }, + "value": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": "opportunity", + "custom_field_type": "opportunities", + "category": { + "parameter": "category" + } + }, + "value-path": "items" + }, + "x-ms-dynamic-properties": { + "operationId": "GetCustomFieldDynamicProperties", + "parameters": { + "api": { + "value": "opportunity" + }, + "custom_field_type": { + "value": "opportunities" + }, + "category": { + "parameterReference": "body/category" + } + }, + "itemValuePath": "items" + } + }, + "date": { + "type": "string", + "format": "date", + "description": "The date on the custom field (ex: '2005-09-18').", + "x-ms-summary": "Date" + }, + "comment": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The comment on the custom field. Character limit: 50.", + "x-ms-summary": "Comment" + } + } + }, "OpportunityApi.OpportunityCustomFieldRead": { "type": "object", "description": "Custom field", From 03c7c25378d020de5263f33a75d965e0dc642b69 Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Wed, 12 Aug 2020 12:49:24 -0400 Subject: [PATCH 009/347] new gift list filters; edu actions; desc tweaks --- .../apiDefinition.swagger.json | 1355 ++++++++++++++++- .../apiProperties.json | 2 + 2 files changed, 1328 insertions(+), 29 deletions(-) diff --git a/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json b/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json index ba1215230..0af85fde6 100644 --- a/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json +++ b/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json @@ -3,7 +3,12 @@ "info": { "version": "1.0", "title": "Blackbaud Raisers Edge NXT", - "description": "Blackbaud Raiser\u2019s Edge NXT is a comprehensive cloud-based fundraising and donor management software solution built specifically for nonprofits and the entire social good community.", + "description": "Blackbaud Raiser's Edge NXT is a comprehensive cloud-based fundraising and donor management software solution built specifically for nonprofits and the entire social good community.", + "contact": { + "name": "Blackbaud Support", + "url": "https://www.blackbaud.com/support", + "email": "skyapi@blackbaud.com" + }, "x-ms-api-annotation": { "status": "Preview" } @@ -331,21 +336,21 @@ { "name": "computed_status", "in": "query", - "description": "Represents a filter for results based on the computed action status. Available values are 'Open', 'Completed', or 'PastDue'. Currently, only a single value can be supplied in the filter.", + "description": "Represents a filter for results based on the computed action status. Available values are Open, Completed, or PastDue.", "type": "string", "x-ms-summary": "Computed status" }, { "name": "status_code", "in": "query", - "description": "Represents a filter for results based on the action status. Returns actions if any of the specified status codes match any of their status codes. For example, \"status_code=Closed&status_code=Pending\" returns actions with a status of either \"Closed\" or \"Pending\".", + "description": "Represents an action status code to filter the results (only applicable when the system is configured to use action status codes). For example, \"Pending\" returns actions with a status of \"Pending\".", "type": "string", "x-ms-summary": "Status" }, { "name": "limit", "in": "query", - "description": "Represents the number of records to return. The default is 500.", + "description": "Represents the number of records to return. The default is 500. The maximum is 5000.", "type": "integer", "x-ms-summary": "Limit" }, @@ -1075,7 +1080,7 @@ { "name": "limit", "in": "query", - "description": "Represents the number of records to return. The default is 500.", + "description": "Represents the number of records to return. The default is 500. The maximum is 5000.", "type": "integer", "x-ms-summary": "Limit" }, @@ -1089,7 +1094,7 @@ { "name": "constituent_code", "in": "query", - "description": "Represents a list of constituent codes. Returns constituents if any of the specified constituent codes match any of their active constituent codes. For example, \"constituent_code=Board Member&constituent_code=Volunteer\" returns constituents with either \"Board Member\" or \"Volunteer\" constituent codes.", + "description": "Represents a constituent code to filter the list. For example, \"Board Member\" returns only constituents with a Board Member constituent code.", "type": "string", "x-ms-summary": "Constituent code", "x-ms-visibility": "advanced" @@ -1097,7 +1102,7 @@ { "name": "constituent_id", "in": "query", - "description": "Represents a list of constituent identifiers. Returns constituents if any of the specified constituent identifiers match any of their constituents. For example, \"constituent_id=280&constituent_id=1232\" returns constituents with either \"280\" or \"1232\" constituent identifiers.", + "description": "Represents a comma-separated list of constituent identifiers to filter the results. For example, \"280,1232\" returns only constituent 280 or constituent 1232.", "type": "string", "x-ms-summary": "Constituent ID", "x-ms-visibility": "advanced" @@ -1105,7 +1110,7 @@ { "name": "custom_field_category", "in": "query", - "description": "Represents a list of custom field categories. Returns constituents if any of the specified custom field categories match any of their active custom fields. For example, \"custom_field_category=Interests&custom_field_category=Anniversary\" returns constituents with either \"Interests\" or \"Anniversary\" custom fields.", + "description": "Represents a custom field category to filter the results. For example, \"Anniversary\" returns only constituents with an active Anniversary custom field.", "type": "string", "x-ms-summary": "Custom field category", "x-ms-visibility": "advanced" @@ -1113,7 +1118,7 @@ { "name": "fundraiser_status", "in": "query", - "description": "Represents a comma-separated list of fundraiser statuses. Returns constituents if any of the specified fundraiser statuses match the constituent's fundraiser status. For example, \"fundrasier_status=Active,None\" returns constituents whose fundraiser status that matches Active or None. Valid values for this filter are Active, Inactive, and None.", + "description": "Represents a comma-separated list of fundraiser statuses to filter the results. For example, \"Active,None\" returns only constituents whose fundraiser status is Active or None. Valid values for this filter are Active, Inactive, and None.", "type": "string", "x-ms-summary": "Fundraiser status", "x-ms-visibility": "advanced" @@ -1137,7 +1142,7 @@ { "name": "postal_code", "in": "query", - "description": "Represents a comma-separated list of postal codes. Returns constituents if any of the specified postal codes match the postal code for their preferred address. For example, \"postal_code=99577,14623\" returns constituents whose preferred address has a postal code that matches or starts with 99577 or 14623, such as 99577, 14623, or 99577-0727.", + "description": "Represents a comma-separated list of postal codes to filter the results. For example, \"29466,29492\" returns only constituents whose preferred address has a postal code that starts with 29466 or 29492, such as 29466, 29492, or 29492-0727.", "type": "string", "x-ms-summary": "Postal code", "x-ms-visibility": "advanced" @@ -1502,6 +1507,44 @@ } } }, + "/constituent/v1/constituents/{constituent_id}/educations": { + "get": { + "operationId": "ListConstituentEducations", + "summary": "List constituent educations", + "description": "Lists the education records for a constituent.", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "constituent_id", + "in": "path", + "description": "The system record ID of the constituent.", + "required": true, + "type": "string", + "x-ms-summary": "Constituent ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "Returned when the operation succeeds.", + "schema": { + "$ref": "#/definitions/ConstituentApi.ApiCollectionOfEducationRead" + } + }, + "400": { + "description": "Returned when the specified constituent ID in the request URL is not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to view the education records." + }, + "404": { + "description": "Returned when the specified constituent is not found." + } + } + } + }, "/constituent/v1/constituents/{constituent_id}/emailaddresses": { "get": { "operationId": "ListConstituentEmailAddresses", @@ -2061,7 +2104,7 @@ { "name": "fundraiser_status", "in": "query", - "description": "Represents a comma-separated list of fundraiser statuses. Returns constituents if any of the specified fundraiser statuses match the constituent's fundraiser status. For example, \"fundrasier_status=Active,None\" returns constituents whose fundraiser status that matches Active or None. Valid values for this filter are Active, Inactive, and None.", + "description": "Represents a comma-separated list of fundraiser statuses to filter the results. For example, \"Active,None\" returns only constituents whose fundraiser status is Active or None. Valid values for this filter are Active, Inactive, and None.", "type": "string", "x-ms-summary": "Fundraiser statuses", "x-ms-visibility": "advanced" @@ -2096,7 +2139,7 @@ { "name": "limit", "in": "query", - "description": "Represents the number of records to return. The default is 500.", + "description": "Represents the number of records to return. The default is 500. The maximum is 5000.", "type": "integer", "x-ms-summary": "Limit", "x-ms-visibility": "advanced" @@ -2182,6 +2225,92 @@ } } }, + "/constituent/v1/educations": { + "post": { + "operationId": "CreateConstituentEducation", + "summary": "Create a constituent education", + "description": "Creates a new constituent education.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/ConstituentApi.EducationAdd" + }, + "description": "An object that represents the education to create." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully creates an education. The response body contains the ID of the new education.", + "schema": { + "$ref": "#/definitions/ConstituentApi.CreatedConstituentEducation" + } + }, + "400": { + "description": "Returned when the request body is not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to create the education." + }, + "404": { + "description": "Returned when the specified constituent is not found." + } + } + } + }, + "/constituent/v1/educations/{education_id}": { + "patch": { + "operationId": "EditConstituentEducation", + "summary": "Update a constituent education", + "description": "Updates a constituent education.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "education_id", + "in": "path", + "description": "The system record ID of the education record to update.", + "required": true, + "type": "string", + "x-ms-summary": "Education ID", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/ConstituentApi.EducationEdit" + }, + "description": "An object that represent properties of the education record to update." + } + ], + "responses": { + "200": { + "description": "Returned when the operation successfully updates the education." + }, + "400": { + "description": "Returned when the specified education ID in the request URL or the specified request parameters are not in the appropriate format." + }, + "403": { + "description": "Returned when the user does not have permission to update the education." + }, + "404": { + "description": "Returned when the specified education is not found." + } + } + } + }, "/constituent/v1/emailaddresses": { "post": { "operationId": "CreateConstituentEmailAddress", @@ -3969,7 +4098,7 @@ { "name": "appeal_id", "in": "query", - "description": "Represents a list of appeal identifiers. Returns packages if any of the specified appeal identifiers match any of the package's associated constituents. For example, \"appeal_id=280&appeal_id=1232\" returns packages with either \"280\" or \"1232\" appeal identifiers.", + "description": "Represents a comma-separated list of appeal identifiers to filter the results. For example, \"506,918\" returns only packages for appeal 506 or appeal 918.", "type": "string", "x-ms-summary": "Appeal ID" }, @@ -4169,38 +4298,65 @@ "application/json" ], "parameters": [ + { + "name": "list_id", + "in": "query", + "description": "Defines a list identifier used to filter the set of gifts to those included in the specified list. If this value is set, other specified filters will be ignored.", + "type": "string", + "x-ms-summary": "List", + "x-ms-dynamic-values": { + "operationId": "ListLists", + "value-collection": "value", + "value-path": "id", + "value-title": "name", + "parameters": { + "list_type": "Gift" + } + }, + "x-ms-dynamic-list": { + "operationId": "ListLists", + "itemsPath": "value", + "itemValuePath": "id", + "itemTitlePath": "name", + "parameters": { + "list_type": { + "value": "Gift" + } + } + } + }, { "name": "gift_type", "in": "query", - "description": "Represents a list of gift types. Returns gifts if their type matches any specified. For example, \"gift_type=MatchingGiftPledge&gift_type=RecurringGift\" returns gifts of type MatchingGiftPledge or RecurringGift.", + "description": "Represents a comma-separated list of gift types to filter the results. For example, \"MatchingGiftPledge,RecurringGift\" returns only gifts of type MatchingGiftPledge or RecurringGift.", "type": "string", "x-ms-summary": "Type" }, { "name": "constituent_id", "in": "query", - "description": "Represents a list of constituent identifiers. Returns gifts if any of the specified constituent identifiers match any of their constituents. For example, \"constituent_id=280&constituent_id=1232\" returns gifts with either \"280\" or \"1232\" constituent identifiers.", + "description": "Represents a comma-separated list of constituent identifiers to filter the results. For example, \"280,1232\" returns only gifts from constituent 280 or constituent 1232.", "type": "string", "x-ms-summary": "Constituent ID" }, { "name": "campaign_id", "in": "query", - "description": "Represents a list of campaign identifiers. Returns gifts if any of the specified campaign identifiers match any of their campaigns. For example, \"campaign_id=280&campaign_id=1232\" returns gifts with either \"280\" or \"1232\" campaign identifiers.", + "description": "Represents a comma-separated list of campaign identifiers to filter the results. For example, \"506,918\" returns only gifts to campaign 506 or campaign 918.", "type": "string", "x-ms-summary": "Campaign ID" }, { "name": "fund_id", "in": "query", - "description": "Represents a list of fund identifiers. Returns gifts if any of the specified fund identifiers match any of their funds. For example, \"fund_id=280&fund_id=1232\" returns gifts with either \"280\" or \"1232\" fund identifiers.", + "description": "Represents a comma-separated list of fund identifiers to filter the results. For example, \"506,918\" returns only gifts to fund 506 or fund 918.", "type": "string", "x-ms-summary": "Fund ID" }, { "name": "appeal_id", "in": "query", - "description": "Represents a list of appeal identifiers. Returns gifts if any of the specified appeal identifiers match any of their appeals. For example, \"appeal_id=280&appeal_id=1232\" returns gifts with either \"280\" or \"1232\" appeal identifiers.", + "description": "Represents a comma-separated list of appeal identifiers to filter the results. For example, \"506,918\" returns only gifts to appeal 506 or appeal 918.", "type": "string", "x-ms-summary": "Appeal ID" }, @@ -4218,10 +4374,46 @@ "type": "integer", "x-ms-summary": "Offset" }, + { + "name": "start_gift_date", + "in": "query", + "description": "Represents a filter for gifts with a gift date on or after the specified date (ex: '2020-09-18T04:13:56Z').", + "type": "string", + "format": "date-time", + "x-ms-summary": "Start gift date", + "x-ms-visibility": "advanced" + }, + { + "name": "end_gift_date", + "in": "query", + "description": "Represents a filter for gifts with a gift date on or before the specified date (ex: '2020-09-18T04:13:56Z').", + "type": "string", + "format": "date-time", + "x-ms-summary": "End gift date", + "x-ms-visibility": "advanced" + }, + { + "name": "start_gift_amount", + "in": "query", + "description": "Represents a filter for gifts with an amount greater than or equal to the specified amount.", + "type": "number", + "format": "double", + "x-ms-summary": "Start gift amount", + "x-ms-visibility": "advanced" + }, + { + "name": "end_gift_amount", + "in": "query", + "description": "Represents a filter for gifts with an amount less than or equal to the specified amount.", + "type": "number", + "format": "double", + "x-ms-summary": "End gift amount", + "x-ms-visibility": "advanced" + }, { "name": "post_status", "in": "query", - "description": "Represents a list of gift post statuses. Returns gifts if their post status matches any specified. For example, \"post_status=DoNotPost&post_status=Posted\" returns gifts that are marked either DoNotPost or Posted.", + "description": "Represents a comma-separated list of gift post statuses to filter the results. For example, \"DoNotPost,Posted\" returns only gifts that are marked as DoNotPost or Posted.", "type": "string", "x-ms-summary": "Post status", "x-ms-visibility": "advanced" @@ -4229,7 +4421,7 @@ { "name": "receipt_status", "in": "query", - "description": "Represents a list of gift receipt statuses. Returns gifts if their receipt status matches any specified. For example, \"receipt_status=DoNotReceipt&receipt_status=Receipted\" returns gifts that are marked either DoNotReceipt or Receipted.", + "description": "Represents a comma-separated list of gift receipt statuses to filter the results. For example, \"DoNotReceipt,Receipted\" returns only gifts that are marked as DoNotReceipt or Receipted.", "type": "string", "x-ms-summary": "Receipt status", "x-ms-visibility": "advanced" @@ -4237,7 +4429,7 @@ { "name": "acknowledgement_status", "in": "query", - "description": "Represents a list of gift acknowledgement statuses. Returns gifts if their acknowledgement status matches any specified. For example, \"acknowledgement_status=DoNotAcknowledge&acknowledgement_status=Acknowledged\" returns gifts that are marked either DoNotAcknowledge or Acknowledged.", + "description": "Represents a comma-separated list of gift acknowledgement statuses to filter the results. For example, \"DoNotAcknowledge,Acknowledged\" returns only gifts that are marked as DoNotAcknowledge or Acknowledged.", "type": "string", "x-ms-summary": "Acknowledgement status", "x-ms-visibility": "advanced" @@ -4636,14 +4828,14 @@ { "name": "constituent_id", "in": "query", - "description": "Represents a list of constituent identifiers. Returns opportunities if any of the specified constituent identifiers match any of their constituents. For example, \"constituent_id=280&constituent_id=1232\" returns opportunities with either \"280\" or \"1232\" constituent identifiers.", + "description": "Represents a comma-separated list of constituent identifiers to filter the results. For example, \"280,1232\" returns only opportunities from constituent 280 or constituent 1232.", "type": "string", "x-ms-summary": "Constituent ID" }, { "name": "limit", "in": "query", - "description": "Represents the number of records to return. The default is 500.", + "description": "Represents the number of records to return. The default is 500. The maximum is 5000.", "type": "integer", "x-ms-summary": "Limit" }, @@ -7319,7 +7511,7 @@ "type": "array", "description": "The set of items included in the response. This may be a subset of the items in the collection.", "items": { - "$ref": "#/definitions/ConstituentApi.ConstituentCustomFieldRead" + "$ref": "#/definitions/ConstituentApi.ActionCustomFieldRead" } } } @@ -7476,6 +7668,25 @@ } } }, + "ConstituentApi.ApiCollectionOfEducationRead": { + "type": "object", + "description": "Educations", + "properties": { + "count": { + "type": "integer", + "format": "int32", + "description": "The number of items available for retrieval into the collection after applying any request parameters. The limit and offset parameters do not affect the count, but to facilitate paging, they may affect the number of items in the value result set.", + "x-ms-summary": "Count" + }, + "value": { + "type": "array", + "description": "The set of items included in the response. This may be a subset of the items in the collection.", + "items": { + "$ref": "#/definitions/ConstituentApi.EducationRead" + } + } + } + }, "ConstituentApi.ApiCollectionOfEmailAddressRead": { "type": "object", "description": "Email addresses", @@ -9152,6 +9363,17 @@ } } }, + "ConstituentApi.CreatedConstituentEducation": { + "type": "object", + "description": "Created constituent education", + "properties": { + "id": { + "type": "string", + "description": "The ID of the newly created constituent education.", + "x-ms-summary": "ID" + } + } + }, "ConstituentApi.CreatedConstituentEmailAddress": { "type": "object", "description": "Created constituent email address", @@ -9277,6 +9499,1067 @@ } } }, + "ConstituentApi.EducationAdd": { + "type": "object", + "description": "A constituent's education history provides important insight into who they are and often helps determine which causes to which the constituent will invest time and money.", + "required": [ + "constituent_id", + "school" + ], + "properties": { + "constituent_id": { + "type": "string", + "description": "The system record ID of the constituent associated with the education.", + "x-ms-summary": "Constituent ID" + }, + "school": { + "type": "string", + "description": "The school/establishment name.", + "x-ms-summary": "School", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/schools" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/schools" + } + } + } + }, + "type": { + "type": "string", + "description": "The type of education.", + "x-ms-summary": "Type", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/types" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/types" + } + } + } + }, + "class_of": { + "type": "string", + "description": "The year the constituent graduated.", + "x-ms-summary": "Class of" + }, + "status": { + "type": "string", + "description": "The status of the education.", + "x-ms-summary": "Status", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/statuses" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/statuses" + } + } + } + }, + "date_entered": { + "type": "object", + "description": "The first date of attendance.", + "x-ms-summary": "Date entered", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "date_left": { + "type": "object", + "description": "The last date of attendance.", + "x-ms-summary": "Date left", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "date_graduated": { + "type": "object", + "description": "The graduation date.", + "x-ms-summary": "Date graduated", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "degree": { + "type": "string", + "description": "The degree received.", + "x-ms-summary": "Degree", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/degrees" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/degrees" + } + } + } + }, + "gpa": { + "type": "number", + "format": "double", + "description": "The grade point average.", + "x-ms-summary": "GPA" + }, + "subject_of_study": { + "type": "string", + "description": "The subject of study.", + "x-ms-summary": "Subject of study", + "x-ms-visibility": "advanced", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/subjects" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/subjects" + } + } + } + }, + "primary": { + "type": "boolean", + "description": "Is this the constituent's primary school association?", + "x-ms-summary": "Primary?" + }, + "majors": { + "type": "array", + "description": "The major courses of study.", + "items": { + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/subjects" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/subjects" + } + } + } + }, + "x-ms-summary": "Majors" + }, + "minors": { + "type": "array", + "description": "The minor courses of study.", + "items": { + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/subjects" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/subjects" + } + } + } + }, + "x-ms-summary": "Minors" + }, + "campus": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The campus. Character limit: 50.", + "x-ms-summary": "Campus", + "x-ms-visibility": "advanced" + }, + "social_organization": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The social organization. Character limit: 50.", + "x-ms-summary": "Social organization", + "x-ms-visibility": "advanced" + }, + "known_name": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The known name. Character limit: 50.", + "x-ms-summary": "Known name", + "x-ms-visibility": "advanced" + }, + "class_of_degree": { + "type": "string", + "description": "The class of degree (only applicable for UK versions).", + "x-ms-summary": "Class of degree", + "x-ms-visibility": "advanced", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/degreeclasses" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/degreeclasses" + } + } + } + }, + "department": { + "type": "string", + "description": "The name of the education department (only applicable for UK versions).", + "x-ms-summary": "Department", + "x-ms-visibility": "advanced", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/departments" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/departments" + } + } + } + }, + "faculty": { + "type": "string", + "description": "The name of the faculty (only applicable for UK versions).", + "x-ms-summary": "Faculty", + "x-ms-visibility": "advanced", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/faculties" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/faculties" + } + } + } + }, + "registration_number": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The registration number (only applicable for UK versions). Character limit: 50.", + "x-ms-summary": "Registration number", + "x-ms-visibility": "advanced" + } + } + }, + "ConstituentApi.EducationEdit": { + "type": "object", + "description": "A constituent's education history provides important insight into who they are and often helps determine which causes to which the constituent will invest time and money.", + "properties": { + "school": { + "type": "string", + "description": "The school/establishment name.", + "x-ms-summary": "School", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/schools" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/schools" + } + } + } + }, + "type": { + "type": "string", + "description": "The type of education.", + "x-ms-summary": "Type", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/types" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/types" + } + } + } + }, + "class_of": { + "type": "string", + "description": "The year the constituent graduated.", + "x-ms-summary": "Class of" + }, + "status": { + "type": "string", + "description": "The status of the education.", + "x-ms-summary": "Status", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/statuses" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/statuses" + } + } + } + }, + "date_entered": { + "type": "object", + "description": "The first date of attendance.", + "x-ms-summary": "Date entered", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "date_left": { + "type": "object", + "description": "The last date of attendance.", + "x-ms-summary": "Date left", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "date_graduated": { + "type": "object", + "description": "The graduation date.", + "x-ms-summary": "Date graduated", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "degree": { + "type": "string", + "description": "The degree received.", + "x-ms-summary": "Degree", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/degrees" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/degrees" + } + } + } + }, + "gpa": { + "type": "number", + "format": "double", + "description": "The grade point average.", + "x-ms-summary": "GPA" + }, + "subject_of_study": { + "type": "string", + "description": "The subject of study.", + "x-ms-summary": "Subject of study", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/subjects" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/subjects" + } + } + } + }, + "primary": { + "type": "boolean", + "description": "Is this the constituent's primary school association?", + "x-ms-summary": "Primary?" + }, + "majors": { + "type": "array", + "description": "The major courses of study.", + "items": { + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/subjects" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/subjects" + } + } + } + }, + "x-ms-summary": "Majors" + }, + "minors": { + "type": "array", + "description": "The minor courses of study.", + "items": { + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/subjects" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/subjects" + } + } + } + }, + "x-ms-summary": "Minors" + }, + "campus": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The campus. Character limit: 50.", + "x-ms-summary": "Campus", + "x-ms-visibility": "advanced" + }, + "social_organization": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The social organization. Character limit: 50.", + "x-ms-summary": "Social organization", + "x-ms-visibility": "advanced" + }, + "known_name": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The known name. Character limit: 50.", + "x-ms-summary": "Known name", + "x-ms-visibility": "advanced" + }, + "class_of_degree": { + "type": "string", + "description": "The class of degree.", + "x-ms-summary": "Class of degree", + "x-ms-visibility": "advanced", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/degreeclasses" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/degreeclasses" + } + } + } + }, + "department": { + "type": "string", + "description": "The name of the education department.", + "x-ms-summary": "Department", + "x-ms-visibility": "advanced", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/departments" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/departments" + } + } + } + }, + "faculty": { + "type": "string", + "description": "The name of the faculty.", + "x-ms-summary": "Faculty", + "x-ms-visibility": "advanced", + "x-ms-dynamic-values": { + "operationId": "GetDynamicValues", + "value-collection": "value", + "value-path": "item", + "value-title": "item", + "parameters": { + "api": "constituent", + "route": "educations/faculties" + } + }, + "x-ms-dynamic-list": { + "operationId": "GetDynamicValues", + "itemsPath": "value", + "itemValuePath": "item", + "itemTitlePath": "item", + "parameters": { + "api": { + "value": "constituent" + }, + "route": { + "value": "educations/faculties" + } + } + } + }, + "registration_number": { + "type": "string", + "maxLength": 50, + "minLength": 0, + "description": "The registration number. Character limit: 50.", + "x-ms-summary": "Registration number", + "x-ms-visibility": "advanced" + } + } + }, + "ConstituentApi.EducationRead": { + "type": "object", + "description": "Education", + "properties": { + "id": { + "type": "string", + "description": "The system record ID of the education.", + "x-ms-summary": "ID" + }, + "constituent_id": { + "type": "string", + "description": "The system record ID of the constituent associated with the education.", + "x-ms-summary": "Constituent ID" + }, + "school": { + "type": "string", + "description": "The school/establishment name.", + "x-ms-summary": "School" + }, + "type": { + "type": "string", + "description": "The type of education.", + "x-ms-summary": "Type" + }, + "class_of": { + "type": "string", + "description": "The year the constituent graduated.", + "x-ms-summary": "Class of" + }, + "status": { + "type": "string", + "description": "The status of the education.", + "x-ms-summary": "Status" + }, + "date_entered": { + "type": "object", + "description": "The first date of attendance.", + "x-ms-summary": "Date entered", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "date_left": { + "type": "object", + "description": "The last date of attendance.", + "x-ms-summary": "Date left", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "date_graduated": { + "type": "object", + "description": "The graduation date.", + "x-ms-summary": "Date graduated", + "properties": { + "d": { + "type": "integer", + "format": "int32", + "description": "The day in the fuzzy date.", + "x-ms-summary": "day" + }, + "m": { + "type": "integer", + "format": "int32", + "description": "The month in the fuzzy date.", + "x-ms-summary": "month" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The year in the fuzzy date.", + "x-ms-summary": "year" + } + } + }, + "degree": { + "type": "string", + "description": "The degree received.", + "x-ms-summary": "Degree" + }, + "gpa": { + "type": "number", + "format": "double", + "description": "The grade point average.", + "x-ms-summary": "GPA" + }, + "majors": { + "type": "array", + "description": "The major courses of study.", + "items": { + "type": "string" + }, + "x-ms-summary": "Majors" + }, + "minors": { + "type": "array", + "description": "The minor courses of study.", + "items": { + "type": "string" + }, + "x-ms-summary": "Minors" + }, + "primary": { + "type": "boolean", + "description": "Is this the constituent's primary school association?", + "x-ms-summary": "Is primary education?" + }, + "campus": { + "type": "string", + "description": "The campus.", + "x-ms-summary": "Campus" + }, + "social_organization": { + "type": "string", + "description": "The social organization.", + "x-ms-summary": "Social organization" + }, + "known_name": { + "type": "string", + "description": "The known name.", + "x-ms-summary": "Known name" + }, + "class_of_degree": { + "type": "string", + "description": "The class of degree.", + "x-ms-summary": "Class of degree" + }, + "department": { + "type": "string", + "description": "The name of the education department.", + "x-ms-summary": "Department" + }, + "faculty": { + "type": "string", + "description": "The name of the faculty.", + "x-ms-summary": "Faculty" + }, + "registration_number": { + "type": "string", + "description": "The registration number.", + "x-ms-summary": "Registration number" + }, + "subject_of_study": { + "type": "string", + "description": "The subject of study.", + "x-ms-summary": "Subject of study" + }, + "date_added": { + "type": "string", + "format": "date-time", + "description": "The date when the education was created.", + "x-ms-summary": "Date added" + }, + "date_modified": { + "type": "string", + "format": "date-time", + "description": "The date when the education was last modified.", + "x-ms-summary": "Date modified" + } + } + }, "ConstituentApi.EmailAddressAdd": { "type": "object", "description": "Email addresses store information about constituent email accounts and where to send email correspondences for individuals and organizations.", @@ -14715,12 +15998,12 @@ "description": "List", "properties": { "id": { - "description": "The system record ID for the list", - "type": "string" + "type": "string", + "description": "The system record ID for the list." }, "name": { - "description": "The name of the list", - "type": "string" + "type": "string", + "description": "The name of the list." } } }, @@ -15778,5 +17061,19 @@ "skyApiOAuth": [] } ], - "tags": [] + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.blackbaud.com/products/blackbaud-raisers-edge-nxt" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.blackbaud.com/privacy-shield" + }, + { + "propertyName": "Categories", + "propertyValue": "Sales and CRM;Productivity" + } + ] } \ No newline at end of file diff --git a/certified-connectors/Blackbaud Raiser's Edge NXT/apiProperties.json b/certified-connectors/Blackbaud Raiser's Edge NXT/apiProperties.json index 7ed3c9d4a..0d8c13ce5 100644 --- a/certified-connectors/Blackbaud Raiser's Edge NXT/apiProperties.json +++ b/certified-connectors/Blackbaud Raiser's Edge NXT/apiProperties.json @@ -28,6 +28,8 @@ }, "iconBrandColor": "#71BF43", "capabilities": [], + "publisher": "Blackbaud, Inc.", + "stackOwner": "Blackbaud, Inc.", "policyTemplateInstances": [ { "templateId": "setheader", From 8fbf0bcc7c2ebd88cea1899b2135cd9c127c7b7c Mon Sep 17 00:00:00 2001 From: BoomappConnectAdmin Date: Thu, 13 Aug 2020 14:57:33 +0100 Subject: [PATCH 010/347] Initial Submission Iniitial submission of boomapp connect --- certified-connectors/BoomappConnect/Readme.md | 18 + .../BoomappConnect/apiDefinition.swagger.json | 923 ++++++++++++++++++ .../BoomappConnect/apiProperties.json | 36 + 3 files changed, 977 insertions(+) create mode 100644 certified-connectors/BoomappConnect/Readme.md create mode 100644 certified-connectors/BoomappConnect/apiDefinition.swagger.json create mode 100644 certified-connectors/BoomappConnect/apiProperties.json diff --git a/certified-connectors/BoomappConnect/Readme.md b/certified-connectors/BoomappConnect/Readme.md new file mode 100644 index 000000000..f0afba246 --- /dev/null +++ b/certified-connectors/BoomappConnect/Readme.md @@ -0,0 +1,18 @@ +# Boomapp Connect Connector + +Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomApp Connector to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website. + + +## Pre-requisites +You will need the following to proceed: +* A Miicrosoft Power Automate plan with custom connector feature +* A Boomerang Subscription +* Boomerang API authentication details. + +## Get access to boomerang +- [website](https://www.boomerangmessaging.com/products/boomApp/msconnector) - Further details on how to create boomerang accounts. + + +## Support and documentation: +You can find the documentation [here:](https://www.boomerangmessaging.com/products/boomApp/msconnector) + diff --git a/certified-connectors/BoomappConnect/apiDefinition.swagger.json b/certified-connectors/BoomappConnect/apiDefinition.swagger.json new file mode 100644 index 000000000..c8260ee2a --- /dev/null +++ b/certified-connectors/BoomappConnect/apiDefinition.swagger.json @@ -0,0 +1,923 @@ +{ + "swagger": "2.0", + "info": { + "title": "Boomapp Connect", + "description": "'Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomApp Connector to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website.", + "version": "1.0", + "contact": { + "name": "Boomerang Support", + "url": "https://www.boomerangmessaging.com/products/boomApp/msconnector", + "email": "support@boomcomms.com" + } + }, + "host": "direct-api.apps.boomcomms.com", + "basePath": "/v1", + "schemes": [ + "https" + ], + "paths": { + "/sms1": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Sms one-way", + "description": "SMS messages are delivered using an alpha-numeric originator (such as a company name) which must contain a maximum of 11 characters, and a recipient cannot respond to a message sent using an alpha numeric originator. Please also note that in destinations where delivery of messages with alpha-numeric originator is not supported (due to local restrictions), this may be replaced with a numeric originator, to ensure that the message is delivered.", + "operationId": "SMS1", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Originating Id for a 1-way message. An alpha numeric value containing a maximum of 11 characters.", + "title": "from" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/sms2": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Sms two-way", + "description": "This method allows replies to be tracked directly against each outbound transaction and is used to manage conversations between your system and the end user. Replies can be forwarded to an email address and customers with Boommail can send an email-2-SMS message back to the responder. See https://boomerangmessaging.com/docs/sending-sms-messages, for more information regarding 2-way and conversational messaging.", + "operationId": "SMS2", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "conversation_id": { + "type": "string", + "description": "Define a conversation ID to group all messages (including replies) part of the same conversation", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "validity_period": { + "type": "integer", + "format": "int32", + "description": "The period of time during which the number used to send the message will be active. Replies to the message will not be delivered after the validity period expires. For two- way messages, the minimum validity period is 1 day.", + "title": "" + }, + "open_ticket": { + "type": "boolean", + "description": "By default all messages are sent a single ticket which means that the message is closed on receipt of the first response. To match multiple responses to the same originating message, use open ticket by passing true.", + "title": "", + "enum": [ + true, + false + ] + }, + "email_responses": { + "type": "string", + "description": "An email address to which message responses are forwarded.", + "title": "" + }, + "push_responses": { + "type": "string", + "description": "A CallBack URL to which message responses are posted.", + "title": "" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/sms3": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Sms custom number", + "description": "SMS messages are delivered using the number specified in the request so that any replies are returned to that number. Customers using Boomerang's Campaign feature can use a number associated to a Campaign, which allows inbound replies to to be accessed from the Campaign reporting section within Boomerang UI. However, unlike the SMS 2-way method, replies are not tracked against the outbound message. See https://boomerangmessaging.com/docs/sending-sms-messages for more information.", + "operationId": "SMS3", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "The sending Id associated to a message this could be an Inbound campaign number currently associated to an active Campaign.", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/voice": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Voice", + "description": "A fixed number is used as the originator for a Text-To-Speech (TTS) voice call. Keystrokes \u20181\u2019 and \u20182\u2019 are used to accept or decline the message, \u20189\u2019 is used to redirect the call. See https://boomerangmessaging.com/docs/sending-delivering-voice-messages for more information", + "operationId": "VOICE", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "voice_intro": { + "type": "string", + "description": "The message played when the voice call is answered. The Message content will be played right after it.", + "title": "" + }, + "voice_thank_you": { + "type": "string", + "description": "The message played at the end of the voice call after the message content has been played.", + "title": "" + }, + "voice_redirect_message": { + "type": "string", + "description": "The message played at the end of the voice call after the message content has been played.", + "title": "" + }, + "voice_redirect_no": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "Redirect number", + "title": "" + } + }, + "description": "voice_redirect_no" + }, + "voice_retries": { + "type": "integer", + "format": "int32", + "description": "Number of attempts made if the voice call is not answered the first time.", + "title": "" + }, + "voice_delay": { + "type": "integer", + "format": "int32", + "description": "Time waited by the system between retries.", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/email": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "email_address": { + "type": "string", + "description": "email_address" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Email", + "description": "Send single or bulk email messages. Emails are sent from the domain @boomerangui.com and it is possible to customise the Subject and to override the 'From' address. It is also possible to forward responses to an email address and / or a URL", + "operationId": "EMAIL", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Pass the content to be used as the From address. If blank the default value will be taken from your account settings", + "title": "from" + }, + "email_subject": { + "type": "string", + "description": "Subject to be displayed by default when the email is received in the recipient's inbox", + "title": "email_subject" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "message_content" + }, + "email_address": { + "type": "array", + "items": { + "type": "string", + "description": "An email address. A single address or an array of up to 10,000 addresses can be passed.", + "title": "" + }, + "description": "email_address" + }, + "validity_period": { + "type": "integer", + "format": "int32", + "description": "The period of time during which the number used to send the message will be active. Replies to the message will not be delivered after the validity period expires. For two- way messages, the minimum validity period is 1 day.", + "title": "" + }, + "open_ticket": { + "type": "boolean", + "description": "By default all messages are sent a single ticket which means that the message is closed on receipt of the first response. To match multiple responses to the same originating message, use open ticket by passing true.", + "title": "", + "enum": [ + true, + false + ] + }, + "email_responses": { + "type": "string", + "description": "An email address to which message responses are forwarded.", + "title": "" + }, + "push_responses": { + "type": "string", + "description": "A CallBack URL to which message responses are posted.", + "title": "" + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/get_responses": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "has_more": { + "type": "boolean", + "description": "has_more" + }, + "replies": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "custom_parameter": { + "type": "string", + "description": "custom_parameter" + }, + "response_id": { + "type": "string", + "description": "response_id" + }, + "from": { + "type": "string", + "description": "from" + }, + "response_content": { + "type": "string", + "description": "response_content" + }, + "is_new": { + "type": "boolean", + "description": "is_new" + }, + "transaction_date": { + "type": "string", + "description": "transaction_date" + }, + "response_date": { + "type": "string", + "description": "response_date" + } + } + }, + "description": "replies" + } + } + } + }, + "400": { + "description": "Your request could not be processed" + }, + "401": { + "description": "Your request could not be authenticated" + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "On SMS response submission", + "description": "Triggered by inbound replies which are automatically mapped to the associated outbound messages when sent as an Intelligent 2-way / conversational message", + "x-ms-trigger": "batch", + "operationId": "GESTRESPONSESTRIGGER", + "parameters": [ + { + "name": "ignore_previous", + "in": "query", + "required": true, + "type": "boolean", + "default": true, + "x-ms-visibility": "internal" + }, + { + "name": "mark_as_read", + "in": "query", + "required": true, + "type": "boolean", + "default": true, + "x-ms-visibility": "internal" + } + ], + "x-ms-trigger-metadata": { + "mode": "polling", + "kind": "query" + } + } + }, + "/get_all_new_drs": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "has_more": { + "type": "boolean", + "description": "has_more" + }, + "drs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "status": { + "type": "string", + "description": "status" + }, + "status_date": { + "type": "string", + "description": "status_date" + }, + "destination": { + "type": "string", + "description": "destination" + }, + "custom_parameter": { + "type": "string", + "description": "custom_parameter" + }, + "campaign_name": { + "type": "string", + "description": "campaign_name" + }, + "unique_id": { + "type": "string", + "description": "unique_id" + } + } + }, + "description": "drs" + } + } + } + }, + "400": { + "description": "Your request could not be processed" + }, + "401": { + "description": "Your request could not be authenticated" + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "On Delivery Confirmed", + "description": "Triggered by end user delivery status update. Updates the transaction with the delivery status returned by the end user's network operator. See https://boomerangmessaging.com/docs for more information", + "x-ms-trigger": "batch", + "operationId": "GETDRSTRIGGER", + "parameters": [ + { + "name": "ignore_previous", + "description": "Pass 'true' to exclude any DRs that have been retrieved previously", + "in": "query", + "type": "boolean", + "default": true, + "required": true, + "x-ms-visibility": "internal" + }, + { + "name": "drs_after", + "description": "Pass 'true' to exclude any DRs that have been retrieved previously", + "in": "query", + "type": "string", + "default": "1990-01-01 00:00:00", + "required": true, + "x-ms-visibility": "internal" + } + ], + "x-ms-trigger-metadata": { + "mode": "polling", + "kind": "query" + } + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.boomerangmessaging.com/products/boomApp/msconnector" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://boomerangmessaging.com/privacy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Communication;Productivity" + } + ], + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "security": [ + { + "basic_auth": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/BoomappConnect/apiProperties.json b/certified-connectors/BoomappConnect/apiProperties.json new file mode 100644 index 000000000..20bc8a7f5 --- /dev/null +++ b/certified-connectors/BoomappConnect/apiProperties.json @@ -0,0 +1,36 @@ +{ + "properties": { + "connectionParameters": { + "username": { + "type": "securestring", + "uiDefinition": { + "displayName": "username", + "description": "The username for this api", + "tooltip": "Provide the username", + "constraints": { + "tabIndex": 2, + "clearText": true, + "required": "true" + } + } + }, + "password": { + "type": "securestring", + "uiDefinition": { + "displayName": "password", + "description": "The password for this api", + "tooltip": "Provide the password", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#81bb26", + "capabilities": [], + "publisher": "AlfaPeople UK Ltd", + "stackOwner": "Boomerang I-Comms Ltd" + } +} \ No newline at end of file From 57f3951eec2dc08e3587ee630d2b08b8934e7970 Mon Sep 17 00:00:00 2001 From: BoomappConnectAdmin Date: Thu, 13 Aug 2020 22:28:38 +0100 Subject: [PATCH 011/347] Updated following initial review --- certified-connectors/BoomappConnect/Readme.md | 7 +++---- .../BoomappConnect/apiDefinition.swagger.json | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/certified-connectors/BoomappConnect/Readme.md b/certified-connectors/BoomappConnect/Readme.md index f0afba246..43dd94dc6 100644 --- a/certified-connectors/BoomappConnect/Readme.md +++ b/certified-connectors/BoomappConnect/Readme.md @@ -1,7 +1,6 @@ # Boomapp Connect Connector -Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomApp Connector to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website. - +'Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomapp connect to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website. ## Pre-requisites You will need the following to proceed: @@ -9,8 +8,8 @@ You will need the following to proceed: * A Boomerang Subscription * Boomerang API authentication details. -## Get access to boomerang -- [website](https://www.boomerangmessaging.com/products/boomApp/msconnector) - Further details on how to create boomerang accounts. +## Create an account with Boomerang +- [website](https://www.boomerangmessaging.com/products/boomApp/msconnector) - Further details on how to create Boomerang accounts. ## Support and documentation: diff --git a/certified-connectors/BoomappConnect/apiDefinition.swagger.json b/certified-connectors/BoomappConnect/apiDefinition.swagger.json index c8260ee2a..3122be3d6 100644 --- a/certified-connectors/BoomappConnect/apiDefinition.swagger.json +++ b/certified-connectors/BoomappConnect/apiDefinition.swagger.json @@ -1,8 +1,8 @@ { "swagger": "2.0", "info": { - "title": "Boomapp Connect", - "description": "'Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomApp Connector to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website.", + "title": "boomapp connect", + "description": "'Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomapp connect to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website.", "version": "1.0", "contact": { "name": "Boomerang Support", From bf7becc7ff1fe805e45733cf0c94980d3e466a36 Mon Sep 17 00:00:00 2001 From: davetunnicliff Date: Fri, 14 Aug 2020 01:03:46 +0100 Subject: [PATCH 012/347] Initial Submission (#383) * Initial Submission Iniitial submission of boomapp connect * Updated following initial review Co-authored-by: BoomappConnectAdmin --- certified-connectors/BoomappConnect/Readme.md | 17 + .../BoomappConnect/apiDefinition.swagger.json | 923 ++++++++++++++++++ .../BoomappConnect/apiProperties.json | 36 + 3 files changed, 976 insertions(+) create mode 100644 certified-connectors/BoomappConnect/Readme.md create mode 100644 certified-connectors/BoomappConnect/apiDefinition.swagger.json create mode 100644 certified-connectors/BoomappConnect/apiProperties.json diff --git a/certified-connectors/BoomappConnect/Readme.md b/certified-connectors/BoomappConnect/Readme.md new file mode 100644 index 000000000..43dd94dc6 --- /dev/null +++ b/certified-connectors/BoomappConnect/Readme.md @@ -0,0 +1,17 @@ +# Boomapp Connect Connector + +'Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomapp connect to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website. + +## Pre-requisites +You will need the following to proceed: +* A Miicrosoft Power Automate plan with custom connector feature +* A Boomerang Subscription +* Boomerang API authentication details. + +## Create an account with Boomerang +- [website](https://www.boomerangmessaging.com/products/boomApp/msconnector) - Further details on how to create Boomerang accounts. + + +## Support and documentation: +You can find the documentation [here:](https://www.boomerangmessaging.com/products/boomApp/msconnector) + diff --git a/certified-connectors/BoomappConnect/apiDefinition.swagger.json b/certified-connectors/BoomappConnect/apiDefinition.swagger.json new file mode 100644 index 000000000..3122be3d6 --- /dev/null +++ b/certified-connectors/BoomappConnect/apiDefinition.swagger.json @@ -0,0 +1,923 @@ +{ + "swagger": "2.0", + "info": { + "title": "boomapp connect", + "description": "'Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomapp connect to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website.", + "version": "1.0", + "contact": { + "name": "Boomerang Support", + "url": "https://www.boomerangmessaging.com/products/boomApp/msconnector", + "email": "support@boomcomms.com" + } + }, + "host": "direct-api.apps.boomcomms.com", + "basePath": "/v1", + "schemes": [ + "https" + ], + "paths": { + "/sms1": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Sms one-way", + "description": "SMS messages are delivered using an alpha-numeric originator (such as a company name) which must contain a maximum of 11 characters, and a recipient cannot respond to a message sent using an alpha numeric originator. Please also note that in destinations where delivery of messages with alpha-numeric originator is not supported (due to local restrictions), this may be replaced with a numeric originator, to ensure that the message is delivered.", + "operationId": "SMS1", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Originating Id for a 1-way message. An alpha numeric value containing a maximum of 11 characters.", + "title": "from" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/sms2": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Sms two-way", + "description": "This method allows replies to be tracked directly against each outbound transaction and is used to manage conversations between your system and the end user. Replies can be forwarded to an email address and customers with Boommail can send an email-2-SMS message back to the responder. See https://boomerangmessaging.com/docs/sending-sms-messages, for more information regarding 2-way and conversational messaging.", + "operationId": "SMS2", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "conversation_id": { + "type": "string", + "description": "Define a conversation ID to group all messages (including replies) part of the same conversation", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "validity_period": { + "type": "integer", + "format": "int32", + "description": "The period of time during which the number used to send the message will be active. Replies to the message will not be delivered after the validity period expires. For two- way messages, the minimum validity period is 1 day.", + "title": "" + }, + "open_ticket": { + "type": "boolean", + "description": "By default all messages are sent a single ticket which means that the message is closed on receipt of the first response. To match multiple responses to the same originating message, use open ticket by passing true.", + "title": "", + "enum": [ + true, + false + ] + }, + "email_responses": { + "type": "string", + "description": "An email address to which message responses are forwarded.", + "title": "" + }, + "push_responses": { + "type": "string", + "description": "A CallBack URL to which message responses are posted.", + "title": "" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/sms3": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Sms custom number", + "description": "SMS messages are delivered using the number specified in the request so that any replies are returned to that number. Customers using Boomerang's Campaign feature can use a number associated to a Campaign, which allows inbound replies to to be accessed from the Campaign reporting section within Boomerang UI. However, unlike the SMS 2-way method, replies are not tracked against the outbound message. See https://boomerangmessaging.com/docs/sending-sms-messages for more information.", + "operationId": "SMS3", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "The sending Id associated to a message this could be an Inbound campaign number currently associated to an active Campaign.", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/voice": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Voice", + "description": "A fixed number is used as the originator for a Text-To-Speech (TTS) voice call. Keystrokes \u20181\u2019 and \u20182\u2019 are used to accept or decline the message, \u20189\u2019 is used to redirect the call. See https://boomerangmessaging.com/docs/sending-delivering-voice-messages for more information", + "operationId": "VOICE", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "voice_intro": { + "type": "string", + "description": "The message played when the voice call is answered. The Message content will be played right after it.", + "title": "" + }, + "voice_thank_you": { + "type": "string", + "description": "The message played at the end of the voice call after the message content has been played.", + "title": "" + }, + "voice_redirect_message": { + "type": "string", + "description": "The message played at the end of the voice call after the message content has been played.", + "title": "" + }, + "voice_redirect_no": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "Redirect number", + "title": "" + } + }, + "description": "voice_redirect_no" + }, + "voice_retries": { + "type": "integer", + "format": "int32", + "description": "Number of attempts made if the voice call is not answered the first time.", + "title": "" + }, + "voice_delay": { + "type": "integer", + "format": "int32", + "description": "Time waited by the system between retries.", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/email": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "email_address": { + "type": "string", + "description": "email_address" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Email", + "description": "Send single or bulk email messages. Emails are sent from the domain @boomerangui.com and it is possible to customise the Subject and to override the 'From' address. It is also possible to forward responses to an email address and / or a URL", + "operationId": "EMAIL", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Pass the content to be used as the From address. If blank the default value will be taken from your account settings", + "title": "from" + }, + "email_subject": { + "type": "string", + "description": "Subject to be displayed by default when the email is received in the recipient's inbox", + "title": "email_subject" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "message_content" + }, + "email_address": { + "type": "array", + "items": { + "type": "string", + "description": "An email address. A single address or an array of up to 10,000 addresses can be passed.", + "title": "" + }, + "description": "email_address" + }, + "validity_period": { + "type": "integer", + "format": "int32", + "description": "The period of time during which the number used to send the message will be active. Replies to the message will not be delivered after the validity period expires. For two- way messages, the minimum validity period is 1 day.", + "title": "" + }, + "open_ticket": { + "type": "boolean", + "description": "By default all messages are sent a single ticket which means that the message is closed on receipt of the first response. To match multiple responses to the same originating message, use open ticket by passing true.", + "title": "", + "enum": [ + true, + false + ] + }, + "email_responses": { + "type": "string", + "description": "An email address to which message responses are forwarded.", + "title": "" + }, + "push_responses": { + "type": "string", + "description": "A CallBack URL to which message responses are posted.", + "title": "" + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/get_responses": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "has_more": { + "type": "boolean", + "description": "has_more" + }, + "replies": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "custom_parameter": { + "type": "string", + "description": "custom_parameter" + }, + "response_id": { + "type": "string", + "description": "response_id" + }, + "from": { + "type": "string", + "description": "from" + }, + "response_content": { + "type": "string", + "description": "response_content" + }, + "is_new": { + "type": "boolean", + "description": "is_new" + }, + "transaction_date": { + "type": "string", + "description": "transaction_date" + }, + "response_date": { + "type": "string", + "description": "response_date" + } + } + }, + "description": "replies" + } + } + } + }, + "400": { + "description": "Your request could not be processed" + }, + "401": { + "description": "Your request could not be authenticated" + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "On SMS response submission", + "description": "Triggered by inbound replies which are automatically mapped to the associated outbound messages when sent as an Intelligent 2-way / conversational message", + "x-ms-trigger": "batch", + "operationId": "GESTRESPONSESTRIGGER", + "parameters": [ + { + "name": "ignore_previous", + "in": "query", + "required": true, + "type": "boolean", + "default": true, + "x-ms-visibility": "internal" + }, + { + "name": "mark_as_read", + "in": "query", + "required": true, + "type": "boolean", + "default": true, + "x-ms-visibility": "internal" + } + ], + "x-ms-trigger-metadata": { + "mode": "polling", + "kind": "query" + } + } + }, + "/get_all_new_drs": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "has_more": { + "type": "boolean", + "description": "has_more" + }, + "drs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "status": { + "type": "string", + "description": "status" + }, + "status_date": { + "type": "string", + "description": "status_date" + }, + "destination": { + "type": "string", + "description": "destination" + }, + "custom_parameter": { + "type": "string", + "description": "custom_parameter" + }, + "campaign_name": { + "type": "string", + "description": "campaign_name" + }, + "unique_id": { + "type": "string", + "description": "unique_id" + } + } + }, + "description": "drs" + } + } + } + }, + "400": { + "description": "Your request could not be processed" + }, + "401": { + "description": "Your request could not be authenticated" + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "On Delivery Confirmed", + "description": "Triggered by end user delivery status update. Updates the transaction with the delivery status returned by the end user's network operator. See https://boomerangmessaging.com/docs for more information", + "x-ms-trigger": "batch", + "operationId": "GETDRSTRIGGER", + "parameters": [ + { + "name": "ignore_previous", + "description": "Pass 'true' to exclude any DRs that have been retrieved previously", + "in": "query", + "type": "boolean", + "default": true, + "required": true, + "x-ms-visibility": "internal" + }, + { + "name": "drs_after", + "description": "Pass 'true' to exclude any DRs that have been retrieved previously", + "in": "query", + "type": "string", + "default": "1990-01-01 00:00:00", + "required": true, + "x-ms-visibility": "internal" + } + ], + "x-ms-trigger-metadata": { + "mode": "polling", + "kind": "query" + } + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.boomerangmessaging.com/products/boomApp/msconnector" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://boomerangmessaging.com/privacy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Communication;Productivity" + } + ], + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "security": [ + { + "basic_auth": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/BoomappConnect/apiProperties.json b/certified-connectors/BoomappConnect/apiProperties.json new file mode 100644 index 000000000..20bc8a7f5 --- /dev/null +++ b/certified-connectors/BoomappConnect/apiProperties.json @@ -0,0 +1,36 @@ +{ + "properties": { + "connectionParameters": { + "username": { + "type": "securestring", + "uiDefinition": { + "displayName": "username", + "description": "The username for this api", + "tooltip": "Provide the username", + "constraints": { + "tabIndex": 2, + "clearText": true, + "required": "true" + } + } + }, + "password": { + "type": "securestring", + "uiDefinition": { + "displayName": "password", + "description": "The password for this api", + "tooltip": "Provide the password", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#81bb26", + "capabilities": [], + "publisher": "AlfaPeople UK Ltd", + "stackOwner": "Boomerang I-Comms Ltd" + } +} \ No newline at end of file From 542e9bbf8771002f99f97f63889f5e83c0fb21b2 Mon Sep 17 00:00:00 2001 From: tnsholding Date: Sat, 15 Aug 2020 03:23:18 +0200 Subject: [PATCH 013/347] Adding MeetingRoomMap connector (#380) --- .../MeetingRoomMap/apiDefinition.swagger.json | 1270 +++++++++++++++++ .../MeetingRoomMap/apiProperties.json | 59 + certified-connectors/MeetingRoomMap/readme.md | 50 + 3 files changed, 1379 insertions(+) create mode 100644 certified-connectors/MeetingRoomMap/apiDefinition.swagger.json create mode 100644 certified-connectors/MeetingRoomMap/apiProperties.json create mode 100644 certified-connectors/MeetingRoomMap/readme.md diff --git a/certified-connectors/MeetingRoomMap/apiDefinition.swagger.json b/certified-connectors/MeetingRoomMap/apiDefinition.swagger.json new file mode 100644 index 000000000..587fa3773 --- /dev/null +++ b/certified-connectors/MeetingRoomMap/apiDefinition.swagger.json @@ -0,0 +1,1270 @@ +{ + "swagger": "2.0", + "info": { + "title": "MeetingRoomMap", + "version": "1.0", + "description": "Search and display images for locations.\nUse admin site https://www.meetingroommap.net to upload images/floorplans and map rooms, people and other locations to these images.\nUse this connector to search and display the mapped locations. Operations exists for each of the location types: Meeting rooms, people and custom locations.", + "contact": { + "name": "MeetingRoomMap Support", + "url": "https://www.meetingroommap.net/home/support", + "email": "tns@tnsholding.dk" + } + }, + "host": "api.meetingroommap.net", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/api/CustomLocations/GetCustomLocations": { + "post": { + "tags": [ + "CustomLocation" + ], + "operationId": "GetCustomLocations", + "consumes": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/GetCustomLocationsByCategoriesQuery" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + } + }, + "summary": "Get all custom locations", + "description": "Get all custom locations", + "x-ms-visibility": "important" + } + }, + "/api/CustomLocations/GetCustomLocationsByImageName": { + "post": { + "tags": [ + "CustomLocation" + ], + "operationId": "GetCustomLocationsByImageName", + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/GetCustomLocationListByImageNameQuery" + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "customLocationCollection": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name" + }, + "category": { + "type": "string", + "description": "category" + }, + "type": { + "type": "string", + "description": "type" + }, + "location": { + "type": "object", + "properties": { + "image": { + "type": "object", + "properties": { + "imageName": { + "type": "string", + "description": "imageName" + }, + "title": { + "type": "string", + "description": "title" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + } + }, + "description": "image" + }, + "relativeLocation": { + "type": "object", + "properties": { + "x": { + "type": "integer", + "format": "int32", + "description": "x" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "y" + } + }, + "description": "relativeLocation" + } + }, + "description": "location" + }, + "id": { + "type": "string", + "description": "id" + }, + "tenantId": { + "type": "string", + "description": "tenantId" + } + } + }, + "description": "customLocationCollection" + }, + "mapImage": { + "type": "object", + "properties": { + "imageName": { + "type": "string", + "description": "imageName" + }, + "title": { + "type": "string", + "description": "title" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + } + }, + "description": "mapImage" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + } + }, + "summary": "Get locations by image", + "description": "Get all custom locations for a given image", + "x-ms-visibility": "important" + } + }, + "/api/CustomLocations/categories": { + "get": { + "tags": [ + "CustomLocation" + ], + "operationId": "GetCategories", + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "type": "string", + "title": "CategoryNames", + "x-ms-visibility": "important" + } + } + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + } + }, + "summary": "GetCategories", + "description": "Get custom categories", + "x-ms-visibility": "important" + } + }, + "/api/CustomLocations/{LocationId}": { + "get": { + "tags": [ + "CustomLocation" + ], + "operationId": "LocationDetails", + "parameters": [ + { + "in": "path", + "name": "LocationId", + "required": true, + "type": "string", + "description": "Location identifier", + "x-ms-url-encoding": "single", + "x-ms-summary": "The unique string identifying the location" + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "403": { + "description": "Forbidden" + } + }, + "summary": "Get location by id", + "description": "Get location details including image url by the location id" + } + }, + "/api/CustomLocations/findbyname/{LocationName}": { + "get": { + "tags": [ + "CustomLocation" + ], + "operationId": "SearchLocations", + "parameters": [ + { + "in": "path", + "name": "LocationName", + "required": true, + "type": "string", + "description": "Search string for location", + "x-ms-url-encoding": "single", + "x-ms-summary": "Provide part of name for location(s) to search for" + }, + { + "in": "query", + "name": "Category", + "type": "string", + "description": "Optional category filter", + "x-ms-summary": "Provide a category name to only return locations filtered by this category" + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name" + }, + "category": { + "type": "string", + "description": "category" + }, + "type": { + "type": "string", + "description": "type" + }, + "location": { + "type": "object", + "properties": { + "image": { + "type": "object", + "properties": { + "imageName": { + "type": "string", + "description": "imageName" + }, + "title": { + "type": "string", + "description": "title" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + } + }, + "description": "image" + }, + "relativeLocation": { + "type": "object", + "properties": { + "x": { + "type": "integer", + "format": "int32", + "description": "x" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "y" + } + }, + "description": "relativeLocation" + } + }, + "description": "location" + }, + "id": { + "type": "string", + "description": "id" + }, + "tenantId": { + "type": "string", + "description": "tenantId" + } + } + } + } + } + }, + "summary": "Search location by name", + "description": "Search custom locations by name" + } + }, + "/api/CustomLocations/createimage/{LocationId}": { + "get": { + "tags": [ + "CustomLocation" + ], + "operationId": "GetCustomLocationImage", + "parameters": [ + { + "in": "path", + "name": "LocationId", + "required": true, + "type": "string", + "description": "Unique identifier for location", + "x-ms-url-encoding": "single", + "x-ms-summary": "The unique string identifier for a location" + }, + { + "in": "query", + "name": "Large", + "type": "boolean", + "description": "Large image returned", + "x-ms-summary": "If set to true a large version of the image (width 900px) will be returned" + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "string", + "format": "binary", + "x-ms-media-kind": "image" + }, + "headers": { + "content-type:": { + "description": "content-type:", + "type": "string" + } + } + } + }, + "summary": "Get image for location", + "description": "Get image for specific custom location", + "x-ms-visibility": "important" + } + }, + "/api/MapImage/thumbnails": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "title": { + "type": "string", + "description": "title" + }, + "tenantId": { + "type": "string", + "description": "tenantId" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + } + } + } + }, + "headers": { + "Content-type": { + "description": "Content-type", + "type": "string" + } + } + } + }, + "summary": "Get all images", + "description": "Get list of all floorplans/images", + "operationId": "Images", + "x-ms-visibility": "important" + } + }, + "/api/MapImage/create/{RoomName}": { + "get": { + "tags": [ + "MapImage" + ], + "operationId": "GetMeetingRoomImage", + "parameters": [ + { + "in": "path", + "name": "RoomName", + "required": true, + "type": "string", + "description": "The name of the room to get image for", + "x-ms-url-encoding": "single", + "x-ms-summary": "The exact name of the room to return the image for" + }, + { + "in": "query", + "name": "Large", + "type": "boolean", + "x-ms-summary": "If set to true a large version of the image (width 900px) will be returned", + "description": "Large image." + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "string", + "format": "binary", + "x-ms-media-kind": "image" + }, + "headers": { + "content-type:": { + "description": "content-type:", + "type": "string" + } + } + } + }, + "summary": "Get image for meeting room", + "description": "Get image for a specific meeting room", + "x-ms-visibility": "important" + } + }, + "/api/MapImage/meetings/{MeetingCount}/roomdetails": { + "get": { + "tags": [ + "MapImage" + ], + "operationId": "NextMeetings", + "parameters": [ + { + "in": "path", + "name": "MeetingCount", + "required": true, + "type": "integer", + "format": "int32", + "default": 3, + "description": "Count of meetings", + "x-ms-url-encoding": "single", + "x-ms-summary": "The number of future meetings to return" + } + ], + "responses": { + "200": { + "description": "Success" + } + }, + "summary": "Get next meetings", + "description": "Get the next meetings for the current user" + } + }, + "/api/MapImage/roomdetails_v2/{RoomName}": { + "get": { + "tags": [ + "MapImage" + ], + "operationId": "GetMeetingRoomDetails", + "parameters": [ + { + "in": "path", + "name": "RoomName", + "required": true, + "type": "string", + "x-ms-url-encoding": "single", + "x-ms-summary": "The exact name of the room to return details information about", + "description": "The room name to get details for" + } + ], + "responses": { + "200": { + "description": "Success" + } + }, + "summary": "Get meetingroom details", + "description": "Get meetingroom details" + } + }, + "/api/officelocations": { + "get": { + "tags": [ + "OfficeLocation" + ], + "operationId": "GetOfficeLocations", + "responses": { + "200": { + "description": "Success" + } + }, + "summary": "Get all office locations", + "description": "Get all office locations" + } + }, + "/api/officelocations/searchCoworkers/{PersonSearch}": { + "get": { + "tags": [ + "OfficeLocation" + ], + "operationId": "SearchCoworkers", + "parameters": [ + { + "in": "path", + "name": "PersonSearch", + "required": true, + "type": "string", + "description": "Search string", + "x-ms-url-encoding": "single", + "x-ms-summary": "The string to use for searching users. Searches in user's email and name" + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name" + }, + "email": { + "type": "string", + "description": "email" + }, + "officeLocation": { + "type": "string", + "description": "officeLocation" + }, + "businessPhones": { + "type": "string", + "description": "businessPhones" + }, + "mobilePhone": { + "type": "string", + "description": "mobilePhone" + } + } + } + } + } + }, + "summary": "Search coworker", + "description": "Search coworker by name/email" + } + }, + "/api/officelocations/bymapimage/{ImageName}": { + "get": { + "tags": [ + "OfficeLocation" + ], + "operationId": "GetOfficeLocationsByImage", + "parameters": [ + { + "in": "path", + "name": "ImageName", + "required": true, + "type": "string", + "description": "The image identifier", + "x-ms-url-encoding": "single", + "x-ms-summary": "The unique image identifier to use for getting mapped office locations" + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "image": { + "type": "object", + "properties": { + "imageName": { + "type": "string", + "description": "imageName" + }, + "title": { + "type": "string", + "description": "title" + }, + "tenantId": { + "type": "string", + "description": "tenantId" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + } + }, + "description": "image" + }, + "attachedOfficeLocations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "personsInOfficeLocation": { + "type": "string", + "description": "personsInOfficeLocation" + }, + "type": { + "type": "string", + "description": "type" + }, + "name": { + "type": "string", + "description": "name" + }, + "location": { + "type": "object", + "properties": { + "image": { + "type": "object", + "properties": { + "imageName": { + "type": "string", + "description": "imageName" + }, + "title": { + "type": "string", + "description": "title" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + } + }, + "description": "image" + }, + "relativeLocation": { + "type": "object", + "properties": { + "x": { + "type": "integer", + "format": "int32", + "description": "x" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "y" + } + }, + "description": "relativeLocation" + } + }, + "description": "location" + }, + "id": { + "type": "string", + "description": "id" + }, + "tenantId": { + "type": "string", + "description": "tenantId" + } + } + }, + "description": "attachedOfficeLocations" + } + } + } + } + }, + "summary": "Get office locations on image", + "description": "Get all office locations mapped to a specific image", + "x-ms-visibility": "important" + } + }, + "/api/officelocations/mapimagewithpersoninfo/{OfficeLocationName}": { + "get": { + "tags": [ + "OfficeLocation" + ], + "operationId": "GetRoomWithPersonsDetails", + "parameters": [ + { + "in": "path", + "name": "OfficeLocationName", + "required": true, + "type": "string", + "description": "The office location name", + "x-ms-url-encoding": "single", + "x-ms-summary": "The unique office location name to look up image and people by" + }, + { + "in": "query", + "name": "InludeUserInfo", + "type": "boolean", + "default": true, + "description": "Flag to indicate if user info should be included", + "x-ms-summary": "If true, then list of users with this office location will be returned as well" + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "officeLocationMap": { + "type": "object", + "properties": { + "n": { + "type": "string", + "description": "n" + }, + "in": { + "type": "string", + "description": "in" + }, + "iu": { + "type": "string", + "description": "iu" + }, + "tu": { + "type": "string", + "description": "tu" + }, + "it": { + "type": "string", + "description": "it" + }, + "p": { + "type": "array", + "items": { + "type": "object", + "properties": { + "d": { + "type": "string", + "description": "d" + }, + "m": { + "type": "string", + "description": "m" + }, + "businessPhone": { + "type": "string", + "description": "businessPhone" + }, + "mobilePhone": { + "type": "string", + "description": "mobilePhone" + } + } + }, + "description": "p" + }, + "l": { + "type": "object", + "properties": { + "x": { + "type": "integer", + "format": "int32", + "description": "x" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "y" + } + }, + "description": "l" + } + }, + "description": "officeLocationMap" + }, + "mapImage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "title": { + "type": "string", + "description": "title" + }, + "ownerId": { + "type": "string", + "description": "ownerId" + }, + "tenantId": { + "type": "string", + "description": "tenantId" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + } + }, + "description": "mapImage" + } + } + } + } + }, + "summary": "Get office location details", + "description": "Get office location details including list of people for that office location" + } + }, + "/api/officelocationimage/create/{OfficeLocationName}": { + "get": { + "tags": [ + "OfficeLocationImage" + ], + "operationId": "GetOfficeLocationImage", + "parameters": [ + { + "in": "path", + "name": "OfficeLocationName", + "required": true, + "type": "string", + "description": "Office location identifier", + "x-ms-url-encoding": "single", + "x-ms-summary": "The unique name of the office location to get image for" + }, + { + "in": "query", + "name": "Large", + "type": "boolean", + "x-ms-summary": "If set to true a large version of the image (width 900px) will be returned", + "description": "Image size." + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "string", + "format": "binary", + "x-ms-media-kind": "image" + }, + "headers": { + "content-type:": { + "description": "content-type:", + "type": "string" + } + } + } + }, + "summary": "Get image of office location", + "description": "Get image of specific office location", + "x-ms-visibility": "important" + } + }, + "/api/rooms": { + "get": { + "tags": [ + "Rooms" + ], + "operationId": "GetRooms", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/AADMeetingRoomCollection" + } + } + }, + "summary": "Get all rooms", + "description": "Get all rooms (defined in Azure AD as meeting rooms)" + } + }, + "/api/rooms/findbyname/{name}": { + "get": { + "tags": [ + "Rooms" + ], + "operationId": "SearchMeetingRooms", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "name", + "required": true, + "type": "string", + "description": "Search string.", + "x-ms-url-encoding": "single", + "x-ms-summary": "The search string to use to look up meeting rooms by name" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/AADMeetingRoomCollection" + } + } + }, + "description": "Get rooms by name search (from Azure AD meeting rooms)", + "summary": "Search for meeting room", + "x-ms-visibility": "important" + } + }, + "/api/rooms/lists": { + "get": { + "tags": [ + "Rooms" + ], + "operationId": "RoomLists", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/AADMeetingRoomCollection" + } + } + }, + "summary": "Get meeting rooms lists", + "description": "Get meeting rooms lists as defined in Azure AD" + } + }, + "/api/rooms/{meetingRoomListAddress}": { + "get": { + "tags": [ + "Rooms" + ], + "operationId": "RoomsByListAddress", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "path", + "name": "meetingRoomListAddress", + "required": true, + "type": "string", + "description": "Name of list", + "x-ms-url-encoding": "single", + "x-ms-summary": "Name of room list as defined in Azure AD room lists" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/AADMeetingRoomCollection" + } + } + }, + "summary": "Get meeting rooms by list", + "description": "Get all meeting rooms from specific list name" + } + }, + "/api/rooms/GetRoomsByImageName/{ImageName}": { + "get": { + "tags": [ + "Rooms" + ], + "operationId": "GetRoomsByImageName", + "parameters": [ + { + "in": "path", + "name": "ImageName", + "required": true, + "type": "string", + "description": "The unique image name", + "x-ms-url-encoding": "single", + "x-ms-summary": "The unique image name to get mapped meeting rooms by" + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "meetingRoomCollection": { + "type": "object", + "properties": { + "rooms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "address" + }, + "type": { + "type": "string", + "description": "type" + }, + "name": { + "type": "string", + "description": "name" + }, + "location": { + "type": "object", + "properties": { + "image": { + "type": "object", + "properties": { + "imageName": { + "type": "string", + "description": "imageName" + }, + "title": { + "type": "string", + "description": "title" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + } + }, + "description": "image" + }, + "relativeLocation": { + "type": "object", + "properties": { + "x": { + "type": "integer", + "format": "int32", + "description": "x" + }, + "y": { + "type": "integer", + "format": "int32", + "description": "y" + } + }, + "description": "relativeLocation" + } + }, + "description": "location" + }, + "id": { + "type": "string", + "description": "id" + }, + "tenantId": { + "type": "string", + "description": "tenantId" + } + } + }, + "description": "rooms" + } + }, + "description": "meetingRoomCollection" + }, + "mapImage": { + "type": "object", + "properties": { + "imageName": { + "type": "string", + "description": "imageName" + }, + "title": { + "type": "string", + "description": "title" + }, + "thumbnailUrl": { + "type": "string", + "description": "thumbnailUrl" + }, + "originalUrl": { + "type": "string", + "description": "originalUrl" + } + }, + "description": "mapImage" + } + } + } + } + }, + "summary": "Get all meeting rooms by image", + "description": "Get all meeting rooms mapped to a specific image", + "x-ms-visibility": "important" + } + } + }, + "definitions": { + "GetCustomLocationsByCategoriesQuery": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetCustomLocationListByImageNameQuery": { + "type": "object", + "properties": { + "imageName": { + "type": "string", + "description": "The unique image name", + "title": "Image name", + "default": "The unique image name to return mapped locations by" + }, + "categories": { + "type": "array", + "items": { + "type": "string", + "description": "Optional list of categories", + "title": "Categorories", + "default": "Optional list of categories to filter locations by" + } + } + }, + "required": [ + "imageName" + ] + }, + "AADMeetingRoom": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "address": { + "type": "string" + } + } + }, + "AADMeetingRoomCollection": { + "type": "object", + "properties": { + "rooms": { + "type": "array", + "items": { + "$ref": "#/definitions/AADMeetingRoom" + } + } + } + }, + "UserDetailsDTO": { + "type": "object", + "properties": { + "tenantId": { + "type": "string" + }, + "email": { + "type": "string" + } + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "oauth2_auth": { + "type": "oauth2", + "flow": "accessCode", + "authorizationUrl": "https://login.windows.net/common/oauth2/authorize", + "tokenUrl": "https://login.windows.net/common/oauth2/authorize", + "scopes": {} + } + }, + "security": [ + { + "oauth2_auth": [] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.meetingroommap.net" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.meetingroommap.net/home/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Collaboration;Human Resources" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/MeetingRoomMap/apiProperties.json b/certified-connectors/MeetingRoomMap/apiProperties.json new file mode 100644 index 000000000..8734d217b --- /dev/null +++ b/certified-connectors/MeetingRoomMap/apiProperties.json @@ -0,0 +1,59 @@ +{ + "properties": { + "connectionParameters": { + "token": { + "type": "oauthSetting", + "oAuthSettings": { + "identityProvider": "aad", + "clientId": "{{replace_with_client_id}}", + "scopes": [], + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "properties": { + "IsFirstParty": "False", + "AzureActiveDirectoryResourceId": "{{replace_with_AzureActiveDirectoryResourceId}}" + }, + "customParameters": { + "loginUri": { + "value": "https://login.windows.net" + }, + "tenantId": { + "value": "common" + }, + "resourceUri": { + "value": "{{replace_with_resourceUri}}" + } + } + } + }, + "token:TenantId": { + "type": "string", + "metadata": { + "sourceType": "AzureActiveDirectoryTenant" + }, + "uiDefinition": { + "constraints": { + "required": "false", + "hidden": "true" + } + } + } + }, + "iconBrandColor": "#D0D6B5", + "capabilities": [], + "policyTemplateInstances": [ + { + "templateId": "setheader", + "title": "MRMAppHeader", + "parameters": { + "x-ms-apimTemplateParameter.name": "X-MRM-Client", + "x-ms-apimTemplateParameter.value": "PowerApp", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplate-policySection": "Request" + } + } + ], + "publisher": "TNS Holding ApS", + "stackOwner": "TNS Holding ApS" + } +} \ No newline at end of file diff --git a/certified-connectors/MeetingRoomMap/readme.md b/certified-connectors/MeetingRoomMap/readme.md new file mode 100644 index 000000000..639aaf411 --- /dev/null +++ b/certified-connectors/MeetingRoomMap/readme.md @@ -0,0 +1,50 @@ +# MeetingRoomMap + +Search and display images for locations. +Use admin site https://www.meetingroommap.net to upload your own images/floorplans. Then map your meeting rooms and people from Azure AD as well as other custom locations to these floorplans. +Use this connector to search and display the mapped locations. Operations exists for each of the location types: Meeting rooms, people and custom locations. + +## Pre-requisites + +You will need the following to proceed: + +- A Microsoft Power Apps or Power Automate plan with custom connector feature +- A subscription to MeetingRoomMap. Go to https://www.meetingroommap.net to read more and sign up. Free trials are available. + +## Supported Operations + +Operations for meeting rooms: + +- `GetMeetingRoomDetails`: Get details for a specific meetingroom. +- `GetMeetingRoomImage`: Get image for a specific meeting room. +- `GetRooms`: Get all rooms (defined in Azure AD as meeting rooms). +- `GetRoomsByImageName`: Get all meeting rooms mapped to a specific image. +- `RoomLists`: Get meeting rooms lists as defined in Azure AD. +- `RoomsByListAddress`: Get all meeting rooms from specific list name. +- `NextMeetings`: Get the next meetings from Outlook for the current user including meeting room image details. +- `SearchMeetingRooms`: Get rooms by name search (from Azure AD meeting rooms). + +Operations for people (office locations): + +- `GetOfficeLocationImage`: Get image of specific office location. +- `GetOfficeLocations`: Get all office locations including people located at each office location. +- `GetOfficeLocationsByImage`: Get all office locations mapped to a specific image. +- `GetRoomWithPersonsDetails`: Get office location details including list of people for that office location. +- `SearchCoworkers`: Search coworker by name/email and return location info. + +Operations for custom locations: + +- `GetCategories`: Get all custom location categories defined. +- `GetCustomLocationImage`: Get image for specific custom location. +- `GetCustomLocations`: Get a list of all custom locations defined. +- `GetCustomLocationsByImageName`: Get all custom locations for a given image. +- `LocationDetails`: Get location details including image url by the location id. +- `SearchLocations`: Search custom locations by name. + +Operations for images/floorplans: + +- `Images`: Get list of all floorplans/images uploaded. + +## How to get credentials + +The connector needs authentication with an Azure AD account. Please log in with an existing user or system account. From cbe4462bc2160b04bb32b65b47ef43b62fecfe73 Mon Sep 17 00:00:00 2001 From: Notiivy <69551349+Notiivy@users.noreply.github.com> Date: Sat, 15 Aug 2020 09:24:38 +0800 Subject: [PATCH 014/347] Added Nottivy connector files (#377) --- certified-connectors/Notiivy/README.md | 30 ++ .../Notiivy/apiDefinition.swagger.json | 507 ++++++++++++++++++ .../Notiivy/apiProperties.json | 23 + 3 files changed, 560 insertions(+) create mode 100644 certified-connectors/Notiivy/README.md create mode 100644 certified-connectors/Notiivy/apiDefinition.swagger.json create mode 100644 certified-connectors/Notiivy/apiProperties.json diff --git a/certified-connectors/Notiivy/README.md b/certified-connectors/Notiivy/README.md new file mode 100644 index 000000000..edf7475a6 --- /dev/null +++ b/certified-connectors/Notiivy/README.md @@ -0,0 +1,30 @@ +##Notiivy Connector + +Many organisations currently suffer from email fatigue whereby their email channel is being exhausted for mundane everyday notifications and alerts within a department or the business. +By using browser notifications, this is an effective way to avoid email fatigue and spam when using applications like Dynamics 365 and PowerApps. +Notiivy is completely integrated with the Microsoft Power Platform allowing users, both internal and external to the organisation, to receive rich persistent notifications based on triggers and data within the common data service and its data connectors. + +## Prerequisites + +To use the Notiivy data connector an account at www.notiivy.com is required to optain an API Key. Users can sign up for a free account at https://www.notiivy.com to get started. + +## How to get credentials + +1. Sign in to your Notiivy account dashboard at https://www.notiivy.com/account. +2. On the Dashboard page you will see your API Key which is used to authenticate the Notiivy data connector and your account. +3. To configure the API Key, log into Microsoft Power Automate or PowerApps. +4. On the left side panel click the Data menu item and then Connections. +5. At the top of the page click New Connection and select the Notiivy Browser Notification connection. +6. When prompted for the API Key, use the API key visible in your Notiivy dashboard and click Create. +7. The connection will now be created and can be used within Power Automate. + +## Supported Operations +The connector supports the following operations: +* `Send notification to recipient`: Sends a defined browser notification to an individual recipient. +* `Add a recipient as a subscriber`: Adds a recipient as a subscriber and returns their unique subscription url. +* `Send a notification to many recipients`: Send a notification to all recipients in a specific category. +* `Remove a recipient as a subscriber`: Removes a recipient as a subscriber. + +## Known issues and limitations + +None \ No newline at end of file diff --git a/certified-connectors/Notiivy/apiDefinition.swagger.json b/certified-connectors/Notiivy/apiDefinition.swagger.json new file mode 100644 index 000000000..c34cee5cb --- /dev/null +++ b/certified-connectors/Notiivy/apiDefinition.swagger.json @@ -0,0 +1,507 @@ +{ + "swagger": "2.0", + "info": { + "title": "Notiivy Browser Notifications", + "description": "Notiivy is a browser notification service allowing you to engage and communicate with users and customers without exhausting your email channel.", + "contact": { + "name": "Notiivy Support", + "url": "https://www.notiivy.com/support", + "email": "support@notiivy.com" + }, + "version": "1.0" + }, + "host": "notiivyapi.azurewebsites.net", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/api/SendToIndividual": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "400": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "404": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + } + }, + "summary": "Send notification to recipient", + "operationId": "SendToIndividual", + "description": "Send a defined browser notification to an individual recipient", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "Message Detail", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "recipientuid": { + "type": "string", + "description": "The unique ID of the recipient you are sending the notification to", + "title": "Recipient UID" + }, + "notification": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "The title of the notification", + "title": "Title" + }, + "body": { + "type": "string", + "description": "The body of the notification", + "title": "Message Body" + }, + "image": { + "type": "string", + "description": "The url of an image to display at the top of the notification", + "title": "Image Url" + }, + "icon": { + "type": "string", + "description": "The url of an icon to display on the notification", + "title": "Icon Url" + }, + "requireInteraction": { + "type": "boolean", + "description": "Requires the recipient to close the notification before hiding", + "title": "Require Interaction" + }, + "actions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "action": { + "type": "string", + "description": "Button action url" + }, + "title": { + "type": "string", + "description": "Button text", + "title": "" + } + } + }, + "description": "Notification buttons (2 max)" + } + }, + "description": "notification", + "required": [ + "body", + "title" + ] + } + }, + "required": [ + "notification", + "recipientuid" + ] + } + } + ] + } + }, + "/api/AddSubscriber": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "400": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "404": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + } + }, + "summary": "Add a recipient as a subscriber", + "description": "Adds a recipient as a subscriber and returns their unique subscription url", + "operationId": "AddSubscriber", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "Subscriber", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "recipientUniqueID": { + "type": "string", + "description": "Uniquely identifiers the recipient when sending notifications to them. This can be a guid in the source system or unique attribute on their record.", + "title": "Recipient Unique ID" + }, + "RecipientName": { + "type": "string", + "description": "A name to identify the recipient by.", + "title": "Recipient Name" + }, + "Category": { + "type": "string", + "description": "Categorise your recipients for bulk messages.", + "title": "Recipient Category" + } + }, + "required": [ + "recipientUniqueID", + "Category" + ] + } + } + ] + } + }, + "/api/RemoveSubscriber": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "400": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "404": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + } + }, + "summary": "Remove a recipient as a subscriber", + "description": "Removes a recipient as a subscriber.", + "operationId": "RemoveSubscriber", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "Subscriber", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "recipientUID": { + "type": "string", + "description": "The recipient unique identifiers", + "title": "Recipient UID" + } + } + } + } + ] + } + }, + "/api/SendToAll": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "400": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "404": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "statusCode": { + "type": "integer", + "description": "statusCode" + }, + "message": { + "type": "string", + "description": "message" + } + } + } + } + }, + "summary": "Send a notification to many recipients", + "description": "Send a notification to all recipients in a specific category", + "operationId": "SendToAll", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "Message Detail", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "The category of the recipient eg staff customer", + "title": "Category" + }, + "notification": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "The title of the notification", + "title": "Title" + }, + "body": { + "type": "string", + "description": "The body of the notification", + "title": "Message Body" + }, + "image": { + "type": "string", + "description": "The url of an image to display at the top of the notification", + "title": "Image Url" + }, + "icon": { + "type": "string", + "description": "The url of an icon to display on the notification", + "title": "Icon Url" + }, + "requireInteraction": { + "type": "boolean", + "description": "Requires the recipient to close the notification before hiding", + "title": "Require Interaction" + }, + "actions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "action": { + "type": "string", + "description": "Button action url" + }, + "title": { + "type": "string", + "description": "Button text" + } + } + }, + "description": "Notification buttons (2 max)" + } + }, + "description": "notification", + "required": [ + "body", + "title" + ] + } + }, + "required": [ + "category", + "notification" + ] + } + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.notiivy.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.notiivy.com/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity;Communication" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "x-api-key" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/Notiivy/apiProperties.json b/certified-connectors/Notiivy/apiProperties.json new file mode 100644 index 000000000..bfd3ef4fd --- /dev/null +++ b/certified-connectors/Notiivy/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#E52851", + "capabilities": [], + "publisher": "Notiivy", + "stackOwner": "Notiivy" + } +} \ No newline at end of file From 4f6b2b2b0e086a77f18fc91948a2b1bf71b704d4 Mon Sep 17 00:00:00 2001 From: amancdk <35783172+amancdk@users.noreply.github.com> Date: Tue, 18 Aug 2020 05:40:09 +0530 Subject: [PATCH 015/347] Initial commit for the CDK Drive Service Vehicle connector (#386) * Initial commit for the CDK Drive Service Vehicle connector * Adding allowed categories * Adding allowed categories * Fixing support URL * Removing the support url * Removing the support url * Removing privacy policy * Adding back privacy policy * fixing review comments * updating icon background color --- .../CDK Drive Service Vehicles/Readme.md | 31 + .../apiDefinition.swagger.json | 928 ++++++++++++++++++ .../apiProperties.json | 9 + 3 files changed, 968 insertions(+) create mode 100644 certified-connectors/CDK Drive Service Vehicles/Readme.md create mode 100644 certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json create mode 100644 certified-connectors/CDK Drive Service Vehicles/apiProperties.json diff --git a/certified-connectors/CDK Drive Service Vehicles/Readme.md b/certified-connectors/CDK Drive Service Vehicles/Readme.md new file mode 100644 index 000000000..ae55797df --- /dev/null +++ b/certified-connectors/CDK Drive Service Vehicles/Readme.md @@ -0,0 +1,31 @@ +# CDKDrive Service Vehicles + +CDK Drive - Service - Vehicles +Associates identification, type, status, and customer information about a vehicle. + +What does this API do? +The API will allow you to create, update, query, and retrieve service domain vehicle information in CDK Drive. + +Intended Audience +Vehicle is a dependency for Service Appointment and Service Repair Order workflows. + +## Pre-requisites + +You will need the following to proceed + +• To use the connector, you need to be a Fortellis user. + +• You need to create an solution in Fortellis to generate client id and secret to be used while calling the APIs + +### Potential Use Cases + +Use the CDKDrive Service Vehicles API to create solutions to handle situations such as: + +1. Create or update service vehicle information +2. Link a customer to a service vehicle +3. Search for existing service vehicles by ID or filter criteria + +#### Detailed Documentation can be found at + + +https://apidocs.fortellis.io/specs/54b70ee1-ac17-4be2-9314-45c947692c5d \ No newline at end of file diff --git a/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json b/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json new file mode 100644 index 000000000..34a9d93a8 --- /dev/null +++ b/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json @@ -0,0 +1,928 @@ +{ + "swagger": "2.0", + "info": { + "title": "CDK Drive Service Vehicles", + "version": "1.0", + "description": "# CDK Drive - Service - Vehicles\nAssociates identification, type, status, and customer information about a vehicle.\n\n# What does this API do?\nThe API will allow you to create, update, query, and retrieve service domain vehicle information in CDK Drive. \n\n# Intended Audience\nVehicle is a dependency for Service Appointment and Service Repair Order workflows. \n", + "contact": { + "name": "CDK Global", + "url": "https://serviceconnect.support.cdk.com", + "email": "mbd_support@cdk.com" + } + }, + "host": "cdkapi.azure-api.net", + "basePath": "/vehicles", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/": { + "get": { + "description": "Query vehicles", + "operationId": "queryVehicles", + "summary": "Query vehicles", + "tags": [ + "query" + ], + "parameters": [ + { + "name": "vin", + "in": "query", + "description": "Filters vehicles by VIN", + "type": "string", + "x-ms-summary": "Vin" + }, + { + "name": "licensePlateNum", + "in": "query", + "description": "Filters vehicles by license plate number", + "type": "string", + "x-ms-summary": "License Plate Number" + }, + { + "name": "customerId", + "in": "query", + "description": "Filters vehicles by customerId", + "type": "string", + "x-ms-summary": "Customer Id" + }, + { + "name": "subscription_id", + "in": "query", + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "required": true, + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "required": true, + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "required": true, + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/VehicleCollection" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "post": { + "description": "Create a vehicle", + "operationId": "createVehicle", + "summary": "Create a vehicle", + "tags": [ + "create" + ], + "parameters": [ + { + "name": "client_id", + "in": "query", + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "required": true, + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "required": true, + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "subscription_id", + "in": "query", + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "required": true, + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "required": true, + "type": "string", + "x-ms-summary": "Request Id" + }, + { + "name": "createVehicle", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateVehicle" + }, + "description": "The vehicle definition" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "201": { + "description": "Created", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Vehicle" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/{vehicleId}/": { + "get": { + "description": "Query a vehicle by identifier", + "operationId": "queryVehicleById", + "summary": "Query a vehicle by identifier", + "tags": [ + "query" + ], + "parameters": [ + { + "name": "vehicleId", + "in": "path", + "description": "The vehicle identifier", + "required": true, + "type": "string", + "x-ms-summary": "Vehicle Id" + }, + { + "name": "subscription_id", + "in": "query", + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "required": true, + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "required": true, + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "required": true, + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Vehicle" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "404 - Not Found", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "post": { + "description": "Update a vehicle", + "operationId": "updateVehicle", + "summary": "Update a vehicle", + "tags": [ + "update" + ], + "parameters": [ + { + "name": "vehicleId", + "in": "path", + "description": "The vehicle identifier", + "required": true, + "type": "string", + "x-ms-summary": "Vehicle Id" + }, + { + "name": "subscription_id", + "in": "query", + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "required": true, + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "required": true, + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "required": true, + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + }, + { + "name": "If-Match", + "in": "header", + "description": "Makes the resource update request conditional. The checksum value \npresented with If-Match must match the current ETag value of the \nresource.\n", + "required": true, + "type": "string", + "x-ms-summary": "eTag Value" + }, + { + "name": "createVehicle", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateVehicle" + }, + "description": "The vehicle definition" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Vehicle" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "404 - Not Found", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://apidocs.fortellis.io/specs/54b70ee1-ac17-4be2-9314-45c947692c5d" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://fortellis.io/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Data" + } + ], + "definitions": { + "Vehicle": { + "type": "object", + "properties": { + "vehicleId": { + "type": "string", + "description": "The idenifier of the vehicle record" + }, + "identification": { + "$ref": "#/definitions/VehicleIdentification", + "description": "Unique vehicle identifiers" + }, + "specification": { + "$ref": "#/definitions/VehicleSpecification", + "description": "The make/model/year specification" + }, + "exteriorColor": { + "type": "string", + "description": "The vehicle exterior color" + }, + "mileage": { + "$ref": "#/definitions/Measurement", + "description": "The vehicle mileage" + }, + "status": { + "type": "string", + "enum": [ + "NEW", + "USED", + "CERTIFIED" + ], + "description": "Is the status of the vehicle new, used, or certified?" + }, + "dates": { + "$ref": "#/definitions/Dates" + }, + "ownerHref": { + "type": "string", + "description": "The hyperlink to the owner customer resource" + }, + "primaryDriverHref": { + "type": "string", + "description": "The hyperlink to the primary driver customer resource" + }, + "links": { + "$ref": "#/definitions/VehicleLinks", + "description": "The hypermedia links of the customer resource" + } + }, + "required": [ + "vehicleId", + "identification", + "specification", + "status", + "dates", + "links" + ], + "example": { + "vehicleId": "1234ABCD", + "identification": { + "vin": "5TFAW5F19EX759955", + "licensePlateNum": "1ABC123" + }, + "specification": { + "makeCode": "TOY", + "make": "Toyota", + "modelCode": "TUNDRA", + "model": "Tundra", + "modelYear": 2014 + }, + "exteriorColor": "BLACK", + "mileage": { + "value": 56700, + "units": "MI" + }, + "status": "USED", + "dates": { + "delivered": "2019-01-01", + "inService": "2014-01-01", + "warrantyExpiration": "" + }, + "ownerHref": "https://api.fortellis.io/cdkdrive/crm/v1/customers/RGHH6755", + "primaryDriverHref": "https://api.fortellis.io/cdkdrive/crm/v1/customers/AUHYG78835", + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/service/vehicles/1234ABCD" + } + } + } + }, + "VehicleIdentification": { + "description": "Vehicle identification. At least one of the identification properties must be defined for the entity to be valid.", + "type": "object", + "properties": { + "vin": { + "type": "string", + "description": "The Vehicle Idenitification Number" + }, + "licensePlateNum": { + "type": "string", + "description": "The vehicle license plate number" + } + }, + "example": { + "vin": "5TFAW5F19EX759955", + "licensePlateNum": "1ABC123" + } + }, + "VehicleLinks": { + "type": "object", + "properties": { + "self": { + "$ref": "#/definitions/LinkDescriptionObject" + } + }, + "required": [ + "self" + ], + "example": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/service/vehicles/1234ABCD" + } + } + }, + "VehicleCollection": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/Vehicle" + } + } + }, + "required": [ + "items" + ], + "example": { + "items": [ + { + "vehicleId": "1234ABCD", + "identification": { + "vin": "5TFAW5F19EX759955", + "licensePlateNum": "1ABC123" + }, + "specification": { + "makeCode": "TOY", + "make": "Toyota", + "modelCode": "TUNDRA", + "model": "Tundra", + "modelYear": 2014 + }, + "exteriorColor": "BLACK", + "mileage": { + "value": 56700, + "units": "MI" + }, + "status": "USED", + "dates": { + "delivered": "2019-01-01", + "inService": "2014-01-01", + "warrantyExpiration": "" + }, + "ownerHref": "https://api.fortellis.io/cdkdrive/crm/v1/customers/RGHH6755", + "primaryDriverHref": "https://api.fortellis.io/cdkdrive/crm/v1/customers/AUHYG78835", + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/service/vehicles/1234ABCD" + } + } + }, + { + "vehicleId": "6789WXYZ", + "identification": { + "vin": "JF1GR7E64DG203230", + "licensePlateNum": "9XYZ789" + }, + "specification": { + "makeCode": "SUB", + "make": "Subaru", + "modelCode": "IMPREZ", + "model": "Impreza", + "modelYear": 2013 + }, + "exteriorColor": "BLUE", + "mileage": { + "value": 77890, + "units": "MI" + }, + "status": "CERTIFIED", + "certified": false, + "dates": { + "delivered": "2013-05-01", + "inService": "2013-05-01", + "warrantyExpiration": "2020-05-01" + }, + "ownerHref": "https://api.fortellis.io/cdkdrive/crm/v1/customers/GHJJ67788", + "primaryDriverHref": "https://api.fortellis.io/cdkdrive/crm/v1/customers/FHKJ4612", + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/service/vehicles/6789WXYZ" + } + } + } + ] + } + }, + "CreateVehicle": { + "type": "object", + "properties": { + "identification": { + "$ref": "#/definitions/VehicleIdentification", + "description": "Unique vehicle identifiers" + }, + "specification": { + "$ref": "#/definitions/VehicleSpecification", + "description": "The make/model/year specification" + }, + "exteriorColor": { + "type": "string", + "description": "The vehicle exterior color" + }, + "mileage": { + "$ref": "#/definitions/Measurement", + "description": "The vehicle mileage" + }, + "status": { + "type": "string", + "enum": [ + "NEW", + "USED", + "CERTIFIED" + ], + "description": "Is the status of the vehicle new, used, or certified?" + }, + "dates": { + "$ref": "#/definitions/Dates" + }, + "ownerHref": { + "type": "string", + "description": "The hyperlink to the owner customer resource" + }, + "primaryDriverHref": { + "type": "string", + "description": "The hyperlink to the primary driver customer resource" + } + }, + "required": [ + "identification", + "specification", + "status", + "dates" + ], + "example": { + "identification": { + "vin": "5TFAW5F19EX759955", + "licensePlateNum": "1ABC123" + }, + "specification": { + "makeCode": "TOY", + "modelCode": "TUNDRA", + "modelYear": 2014 + }, + "exteriorColor": "BLACK", + "mileage": { + "value": 56700, + "units": "MI" + }, + "status": "USED", + "dates": { + "delivered": "2019-01-01", + "inService": "2014-01-01", + "warrantyExpiration": "" + }, + "ownerHref": "https://api.fortellis.io/cdkdrive/crm/v1/customers/RGHH6755", + "primaryDriverHref": "https://api.fortellis.io/cdkdrive/crm/v1/customers/AUHYG78835" + } + }, + "VehicleSpecification": { + "type": "object", + "properties": { + "makeCode": { + "type": "string", + "description": "The vehicle make code" + }, + "make": { + "type": "string", + "description": "The vehicle make name" + }, + "modelCode": { + "type": "string", + "description": "The vehicle model code" + }, + "model": { + "type": "string", + "description": "The vehicle model name" + }, + "modelYear": { + "type": "number", + "description": "The vehicle model year" + } + }, + "required": [ + "makeCode", + "modelCode", + "modelYear" + ], + "example": { + "makeCode": "TOY", + "make": "Toyota", + "modelCode": "CAM", + "model": "Camry", + "modelYear": 2017 + } + }, + "Measurement": { + "type": "object", + "properties": { + "value": { + "type": "number", + "description": "The measurement value" + }, + "units": { + "type": "string", + "enum": [ + "MI", + "KM" + ], + "description": "The units of measurement" + } + }, + "required": [ + "value", + "units" + ], + "example": { + "value": 1024, + "units": "KM" + } + }, + "Dates": { + "properties": { + "delivered": { + "type": "string", + "format": "date", + "description": "Delivery date of the vehicle to its current owner as defined by RFC 3339, section 5.6, for example, 2017-07-21" + }, + "inService": { + "type": "string", + "format": "date", + "description": "Retail sale date to the original owner as defined by RFC 3339, section 5.6, for example, 2017-07-21" + }, + "warrantyExpiration": { + "type": "string", + "format": "date", + "description": "Warranty Expiration date of the vehicle as defined by RFC 3339, section 5.6, for example, 2017-07-21" + } + }, + "required": [ + "delivered", + "inService" + ], + "example": { + "delivered": "2019-01-01T00:00:00Z", + "inService": "2014-01-01T00:00:00Z", + "warrantyExpiration": "2020-01-01T00:00:00Z" + } + }, + "LinkDescriptionObject": { + "title": "Details of a link to a resource", + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "The target URI" + }, + "method": { + "type": "string", + "description": "The HTTP verb that MUST be used to make a request to the target of the link" + }, + "title": { + "type": "string", + "description": "The title property provides a title for the link and is a helpful documentation tool to facilitate understanding by the end clients" + } + }, + "required": [ + "href" + ], + "example": { + "href": "https://api.fortellis.io/cdkdrive/service/v1/vehicles/1234ABCD", + "method": "GET" + } + }, + "ErrorResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "example": { + "code": 400, + "message": "Bad Request - Missing \"vehicleId\" path parameter." + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [ + { + "apiKeyHeader": [] + }, + { + "apiKeyQuery": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/CDK Drive Service Vehicles/apiProperties.json b/certified-connectors/CDK Drive Service Vehicles/apiProperties.json new file mode 100644 index 000000000..53794553c --- /dev/null +++ b/certified-connectors/CDK Drive Service Vehicles/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#f8f8f8", + "capabilities": [], + "publisher": "CDK Global", + "stackOwner": "CDK Global" + } +} \ No newline at end of file From 7fe8502e67a632d00e84d1e3859ffc914155f714 Mon Sep 17 00:00:00 2001 From: Crispin Koech Date: Tue, 18 Aug 2020 03:16:01 +0300 Subject: [PATCH 016/347] Add Africa's Talking SMS connector (#389) Co-authored-by: Crispin Kipruto --- .../Africa's Talking SMS/README.md | 25 ++ .../apiDefinition.swagger.json | 239 ++++++++++++++++++ .../Africa's Talking SMS/apiProperties.json | 23 ++ 3 files changed, 287 insertions(+) create mode 100644 certified-connectors/Africa's Talking SMS/README.md create mode 100644 certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json create mode 100644 certified-connectors/Africa's Talking SMS/apiProperties.json diff --git a/certified-connectors/Africa's Talking SMS/README.md b/certified-connectors/Africa's Talking SMS/README.md new file mode 100644 index 000000000..c13d7fd18 --- /dev/null +++ b/certified-connectors/Africa's Talking SMS/README.md @@ -0,0 +1,25 @@ +## Africa's Talking SMS + +Africa's Talking SMS provides a powerful API that allows you to effectively send text communication to your customers when they need it. This connectors exposes a couple of operations that allow you to send SMS and retrieve messages in your inbox from our APIs. + +## Pre-requisites + +In order to use this connector, you will need the following: + +* An account with Africa's Talking; you can sign up [here](https://account.africastalking.com/auth/register?next=%2Fauth%2Fsignup). +* A live production application; you can create one after registering. + +Once you've signed up and you've created a live application, generate a new API Key for that application; you will use this key to authenticate your requests from our SMS connector. + +## Authentication. + +This connector uses `API Key` authentication (see steps above on how to obtain one). When creating a new connector (in Power Apps/Logic Apps), you'll be required to provide an API Key. + +## Supported Operations + +This connector supports the following operations: + +* `Send SMS`: Send a text message to multiple mobile recipients. +* `Fetch Inbox`: Fetch messages from your application's inbox. + +For more information on parameters accepted/required by the connector's operations, please refer to our [documentation](https://build.at-labs.io/docs/sms%2Foverview). diff --git a/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json b/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json new file mode 100644 index 000000000..951ba7077 --- /dev/null +++ b/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json @@ -0,0 +1,239 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Africa's Talking SMS", + "description": "Send and receive SMS from more than 300 million mobile subscribers across Africa.", + "contact": { + "name": "Advice and answers from the Africa's Talking Team", + "url": "https://help.africastalking.com/en/", + "email": "smsussd@africastalking.com" + } + }, + "host": "api.africastalking.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/version1/messaging/bulk": { + "post": { + "summary": "Send SMS", + "description": "Send an sms to multiple numbers.", + "operationId": "SendSms", + "parameters": [ + { + "name": "Accept", + "in": "header", + "required": true, + "type": "string", + "default": " application/json", + "description": "Accept", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application's username, on Africa's Talking.", + "title": "Username", + "x-ms-visibility": "important" + }, + "message": { + "type": "string", + "description": "The message you'd like to send.", + "title": "Message", + "x-ms-visibility": "important" + }, + "phoneNumbers": { + "type": "array", + "items": { + "type": "string", + "description": "Phone number (in international format) you'd like to send the message to.", + "title": "Phone Number", + "x-ms-visibility": "important" + }, + "description": "phoneNumbers" + }, + "enqueue": { + "type": "boolean", + "description": "Send as many messages as possible before waiting for acknowledgement from telcos.", + "title": "Enqueue", + "enum": [ + true, + false + ], + "x-ms-visibility": "advanced" + } + }, + "default": {}, + "x-ms-visibility": "important", + "required": [ + "message", + "phoneNumbers", + "username" + ] + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "SMSMessageData": { + "type": "object", + "properties": { + "Message": { + "type": "string", + "description": "Message" + }, + "Recipients": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cost": { + "type": "string", + "description": "cost" + }, + "messageId": { + "type": "string", + "description": "messageId" + }, + "messageParts": { + "type": "integer", + "format": "int32", + "description": "messageParts" + }, + "number": { + "type": "string", + "description": "number" + }, + "status": { + "type": "string", + "description": "status" + }, + "statusCode": { + "type": "integer", + "format": "int32", + "description": "statusCode" + } + } + }, + "description": "Recipients" + } + }, + "description": "SMSMessageData" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/version1/messaging": { + "get": { + "summary": "Fetch inbox", + "description": "Fetch messages in your inbox.", + "operationId": "FetchInbox", + "parameters": [ + { + "name": "username", + "in": "query", + "type": "string", + "required": true, + "description": "Your application's username, on Africa's Talking.", + "x-ms-visibility": "important", + "x-ms-summary": "Username" + }, + { + "name": "lastReceivedId", + "in": "query", + "type": "integer", + "required": false, + "description": "An id of the last message you retrieved.", + "x-ms-visibility": "advanced", + "format": "int64", + "x-ms-summary": "Last received Id" + }, + { + "name": "Accept", + "in": "header", + "required": true, + "type": "string", + "default": " application/json", + "description": "Accept", + "x-ms-visibility": "internal" + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "type": "object", + "properties": { + "SMSMessageData": { + "type": "object", + "properties": { + "Messages": { + "type": "array", + "items": {}, + "description": "Messages" + } + }, + "description": "SMSMessageData" + } + } + } + } + }, + "x-ms-visibility": "important" + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://africastalking.com/sms" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://africastalking.com/privacy_policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Communication" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "apiKey" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/Africa's Talking SMS/apiProperties.json b/certified-connectors/Africa's Talking SMS/apiProperties.json new file mode 100644 index 000000000..517343a83 --- /dev/null +++ b/certified-connectors/Africa's Talking SMS/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#fc9206", + "capabilities": [], + "publisher": "Africa's Talking", + "stackOwner": "Africa's Talking" + } +} \ No newline at end of file From 784342f5dba6a9da0b0d12ff20d47076ec11a064 Mon Sep 17 00:00:00 2001 From: pliovic-infobip <69838660+pliovic-infobip@users.noreply.github.com> Date: Wed, 19 Aug 2020 02:19:21 +0200 Subject: [PATCH 017/347] Add Infobip connector (#390) --- custom-connectors/Infobip/README.md | 21 + .../Infobip/apiDefinition.swagger.json | 626 ++++++++++++++++++ custom-connectors/Infobip/apiProperties.json | 70 ++ 3 files changed, 717 insertions(+) create mode 100644 custom-connectors/Infobip/README.md create mode 100644 custom-connectors/Infobip/apiDefinition.swagger.json create mode 100644 custom-connectors/Infobip/apiProperties.json diff --git a/custom-connectors/Infobip/README.md b/custom-connectors/Infobip/README.md new file mode 100644 index 000000000..1c8883db8 --- /dev/null +++ b/custom-connectors/Infobip/README.md @@ -0,0 +1,21 @@ +## Prerequisites +1. Create Infobip account + * [Sign Up][1] +2. Buy SMS or Voice capable phone number from Infobip + * [Buy Numbers][2] +3. In case you need assistance contact Infobip support + * [Support][3] + +## Supported trigger: +When you receive an incoming text message: +- When the registered number receives an inbound SMS with the specified keyword +- It is possible to trigger specified SMS or Voice message towards end user + +## Supported actions: +- send text message (SMS) - send text messages towards end users +- make a voice call - send a TTS(text to speech) message to end users +- check current balance - check the account balance + +[1]: https://www.infobip.com/signup +[2]: https://portal.infobip.com/login/?callback=https%3A%2F%2Fportal.infobip.com%2Fapps%2Fnumbers%2FbuyNumbers +[3]: https://www.infobip.com/contact \ No newline at end of file diff --git a/custom-connectors/Infobip/apiDefinition.swagger.json b/custom-connectors/Infobip/apiDefinition.swagger.json new file mode 100644 index 000000000..e962eb0f1 --- /dev/null +++ b/custom-connectors/Infobip/apiDefinition.swagger.json @@ -0,0 +1,626 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.1", + "title": "Infobip", + "description": "Provide SMS and VOICE communication channels for enterprises over Infobip platform to better their customer engagement.", + "x-ms-api-annotation": { + "status": "Preview" + }, + "contact": { + "email": "Partnership_PresalesHQ@infobip.com", + "name": "Infobip", + "url": "https://www.infobip.com/" + } + }, + "host": "api.infobip.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/sms/1/webhooks": { + "x-ms-notification-content": { + "description": "Details for incoming text message (SMS).", + "schema": { + "$ref": "#/definitions/WebhookBody" + } + }, + "post": { + "description": "This operation triggers when you receive an incoming text message (SMS) on the number you bought from Infobip.", + "summary": "When you receive an incoming text message", + "operationId": "CreateInfobipSMSWebhook", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "Request body of webhook", + "in": "body", + "description": "This is the request body of the Webhook.", + "required": true, + "schema": { + "type": "object", + "required": [ + "phoneNumber", + "keyword", + "webhookUrl" + ], + "properties": { + "phoneNumber": { + "type": "string", + "title": "Phone number", + "description": "Phone number that you have purchased through Infobip platform.", + "x-ms-visibility": "important" + }, + "keyword": { + "type": "string", + "title": "Keyword", + "description": "Unique keyword used for this Flow.", + "x-ms-visibility": "important" + }, + "webhookUrl": { + "type": "string", + "title": "Webhook url", + "description": "Url that SMS messages will be pushed to.", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + } + } + } + ], + "responses": { + "201": { + "description": "Response to successfully created webhook.", + "schema": { + "$ref": "#/definitions/WebhookCreationResponse" + } + }, + "default": { + "description": "Response to failed request.", + "x-ms-summary": "Failure response", + "schema": { + "$ref": "#/definitions/FailureResponseBody" + } + } + } + } + }, + "/sms/1/webhooks/{webhook_key}": { + "delete": { + "description": "This action will stop the trigger for incoming text messages that you previously registered.", + "summary": "Stop incoming text message trigger", + "operationId": "RemoveInfobipSMSWebhook", + "x-ms-visibility": "internal", + "parameters": [ + { + "name": "webhook_key", + "in": "path", + "description": "Key of the webhook to remove.", + "required": true, + "x-ms-visibility": "important", + "type": "string", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "204": { + "description": "Response to successfully deleting a webhook." + }, + "default": { + "description": "Response to failed request.", + "x-ms-summary": "Failure response", + "schema": { + "$ref": "#/definitions/FailureResponseBody" + } + } + } + } + }, + "/sms/1/text/single": { + "post": { + "description": "This action will send an outbound text message (SMS).", + "summary": "Send a text message (SMS)", + "operationId": "SendInfobipSMS", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "Request body", + "in": "body", + "description": "Request body.", + "schema": { + "$ref": "#/definitions/SendSMSRequestBody" + } + } + ], + "responses": { + "200": { + "description": "Response to successful sending of outbound text message (SMS).", + "x-ms-summary": "Success response", + "schema": { + "$ref": "#/definitions/SendSMSSuccessResponseBody" + } + }, + "default": { + "description": "Response to failed sending of outbound text message (SMS).", + "x-ms-summary": "Failure response", + "schema": { + "$ref": "#/definitions/FailureResponseBody" + } + } + } + } + }, + "/tts/3/single": { + "post": { + "description": "This action will make an outbound voice call and read your message using text to speech synthesis.", + "summary": "Make a voice call", + "operationId": "MakeInfobipVoiceCall", + "x-ms-visibility": "advanced", + "parameters": [ + { + "name": "Request body", + "in": "body", + "description": "Request body.", + "schema": { + "$ref": "#/definitions/VoiceCallRequestBody" + } + } + ], + "responses": { + "200": { + "description": "Response to successful voice call.", + "x-ms-summary": "Success response", + "schema": { + "$ref": "#/definitions/VoiceCallSuccessResponseBody" + } + }, + "default": { + "description": "Response to failed voice call.", + "x-ms-summary": "Failure response", + "schema": { + "$ref": "#/definitions/FailureResponseBody" + } + } + } + } + }, + "/account/1/balance": { + "get": { + "description": "This action will return you the current balance of your account.", + "summary": "Check current balance", + "operationId": "CheckCurrentBalance", + "x-ms-visibility": "advanced", + "parameters": [], + "responses": { + "200": { + "description": "Response to successful check balance request.", + "x-ms-summary": "Success response", + "schema": { + "$ref": "#/definitions/BalanceSuccessResponseBody" + } + }, + "default": { + "description": "Response to failed check balance request.", + "x-ms-summary": "Failure response", + "schema": { + "$ref": "#/definitions/FailureResponseBody" + } + } + } + } + } + }, + "definitions": { + "InboundSmsMessage": { + "type": "object", + "properties": { + "from": { + "type": "string", + "title": "Sender", + "x-ms-summary": "Sender", + "description": "SMS message sender's phone number.", + "x-ms-visibility": "important" + }, + "to": { + "type": "string", + "title": "Destination", + "x-ms-summary": "Destination", + "description": "SMS message's destination phone number.", + "x-ms-visibility": "advanced" + }, + "text": { + "type": "string", + "title": "Full text", + "x-ms-summary": "Full text", + "description": "Entire content of the SMS message, contains keyword.", + "x-ms-visibility": "advanced" + }, + "cleanText": { + "type": "string", + "title": "Clean text", + "x-ms-summary": "Clean text", + "description": "Text of the SMS message, without keyword.", + "x-ms-visibility": "important" + }, + "keyword": { + "type": "string", + "title": "Keyword", + "x-ms-summary": "Keyword", + "description": "Keyword used in the SMS message.", + "x-ms-visibility": "advanced" + }, + "receivedAt": { + "type": "string", + "title": "Received at", + "x-ms-summary": "Received at", + "description": "Date and time when SMS message was received.", + "x-ms-visibility": "advanced" + }, + "messageId": { + "type": "string", + "title": "Unique message id", + "x-ms-summary": "Unique message id", + "description": "Id that uniquely identifies received SMS message.", + "x-ms-visibility": "internal" + } + } + }, + "WebhookBody": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/InboundSmsMessage" + } + } + } + }, + "WebhookCreationResponse": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "active": { + "type": "boolean" + }, + "events": { + "type": "array", + "items": { + "type": "string" + } + }, + "config": { + "type": "object", + "properties": { + "content_type": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "updated_at": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "url": { + "type": "string" + }, + "test_url": { + "type": "string" + }, + "ping_url": { + "type": "string" + }, + "last_response": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "status": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + }, + "SendSMSRequestBody": { + "type": "object", + "required": [ + "to", + "text" + ], + "properties": { + "from": { + "type": "string", + "title": "Sender's phone number", + "x-ms-summary": "Sender's phone number", + "description": "Phone number that will be used as a sender of the outbound text message.", + "x-ms-visibility": "advanced" + }, + "to": { + "type": "string", + "title": "Recipient's phone number", + "x-ms-summary": "Recipient's phone number", + "description": "Phone number that the text message will be sent to.", + "x-ms-visibility": "important" + }, + "text": { + "type": "string", + "title": "Message", + "x-ms-summary": "Message", + "description": "Text of the message that will be sent.", + "x-ms-visibility": "important" + } + } + }, + "SendSMSSuccessResponseBody": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "items": { + "type": "object", + "properties": { + "to": { + "type": "string", + "title": "Destination phone number", + "x-ms-summary": "Destination phone number", + "description": "Cleaned up and standardized phone number that the text message was sent to.", + "x-ms-visibility": "advanced" + }, + "messageId": { + "type": "string", + "title": "Unique message id", + "x-ms-summary": "Unique message id", + "description": "Id that uniquely identifies sent text message, can later be used to fetch message log.", + "x-ms-visibility": "internal" + }, + "status": { + "type": "object", + "properties": { + "id": { + "type": "number", + "title": "Message sending status id", + "x-ms-summary": "Message sending status id", + "description": "Id of the status of message sending.", + "x-ms-visibility": "advanced" + }, + "name": { + "type": "string", + "title": "Message sending status", + "x-ms-summary": "Message sending status", + "description": "Name of the status of message sending.", + "x-ms-visibility": "advanced" + }, + "description": { + "type": "string", + "title": "Description of message sending status", + "x-ms-summary": "Description of message sending status", + "description": "Human readable description of the status of message sending.", + "x-ms-visibility": "advanced" + } + } + } + } + } + } + } + }, + "BalanceSuccessResponseBody": { + "type": "object", + "properties": { + "balance": { + "type": "number", + "title": "Balance", + "x-ms-summary": "Current account balance", + "description": "Current account balance, expressed in the specified currency.", + "x-ms-visibility": "advanced" + }, + "currency": { + "type": "string", + "title": "Currency", + "x-ms-summary": "Currency used to express the balance in", + "description": "Currency used to express the balance in.", + "x-ms-visibility": "advanced" + } + } + }, + "FailureResponseBody": { + "type": "object", + "properties": { + "requestError": { + "type": "object", + "properties": { + "serviceException": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "title": "Error id", + "x-ms-summary": "Error id", + "description": "Id of the error that occurred while sending message.", + "x-ms-visibility": "advanced" + }, + "text": { + "type": "string", + "title": "Error message", + "x-ms-summary": "Error message", + "description": "Human readable error message that occurred while sending message.", + "x-ms-visibility": "advanced" + } + } + } + } + } + } + }, + "VoiceCallRequestBody": { + "type": "object", + "required": [ + "to", + "text", + "language" + ], + "properties": { + "from": { + "type": "string", + "title": "Caller's phone number", + "x-ms-summary": "Caller's phone number", + "description": "Phone number that will be used as a caller of the outbound voice call.", + "x-ms-visibility": "advanced" + }, + "to": { + "type": "string", + "title": "Recipient's phone number", + "x-ms-summary": "Recipient's phone number", + "description": "Phone number that voice call will be made to.", + "x-ms-visibility": "important" + }, + "text": { + "type": "string", + "title": "Message", + "x-ms-summary": "Message", + "description": "Text of the message that will be read out loud in the call.", + "x-ms-visibility": "important" + }, + "language": { + "type": "string", + "title": "Language", + "x-ms-summary": "Language", + "description": "Language of the call's message.", + "x-ms-visibility": "advanced", + "default": "en", + "enum": [ + "en", + "es", + "ca", + "zh-cn", + "zh-tw", + "da", + "nl", + "fr", + "de", + "it", + "ja", + "ko", + "no", + "pl", + "pt-pt", + "pt-br", + "ru", + "sv", + "fi", + "tr" + ] + } + } + }, + "VoiceCallSuccessResponseBody": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "items": { + "type": "object", + "properties": { + "to": { + "type": "string", + "title": "Destination phone number", + "x-ms-summary": "Destination phone number", + "description": "Cleaned up and standardized phone number that the voice call was made to.", + "x-ms-visibility": "advanced" + }, + "messageId": { + "type": "string", + "title": "Unique message id", + "x-ms-summary": "Unique message id", + "description": "Id that uniquely identifies made voice call, can later be used to fetch message log.", + "x-ms-visibility": "internal" + }, + "status": { + "type": "object", + "properties": { + "id": { + "type": "number", + "title": "Message sending status id", + "x-ms-summary": "Message sending status id", + "description": "Id of the status of the call.", + "x-ms-visibility": "advanced" + }, + "name": { + "type": "string", + "title": "Message sending status", + "x-ms-summary": "Message sending status", + "description": "Name of the status of the call.", + "x-ms-visibility": "advanced" + }, + "description": { + "type": "string", + "title": "Description of message sending status", + "x-ms-summary": "Description of message sending status", + "description": "Human readable description of the status of the call.", + "x-ms-visibility": "advanced" + } + } + } + } + } + } + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "security": [ + { + "basic_auth": [] + } + ], + "tags": [], + "x-ms-capabilities": { + "testConnection": { + "operationId": "CheckCurrentBalance" + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.infobip.com/partnership/integrations/microsoft-flow" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.infobip.com/policies/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Communication;Productivity" + } + ] +} \ No newline at end of file diff --git a/custom-connectors/Infobip/apiProperties.json b/custom-connectors/Infobip/apiProperties.json new file mode 100644 index 000000000..9a48fc184 --- /dev/null +++ b/custom-connectors/Infobip/apiProperties.json @@ -0,0 +1,70 @@ +{ + "properties": { + "connectionParameters": { + "username": { + "type": "securestring", + "uiDefinition": { + "description": "The username for this api", + "displayName": "Username", + "tooltip": "Provide your username", + "constraints": { + "tabIndex": 2, + "clearText": true, + "required": "true" + } + } + }, + "password": { + "type": "securestring", + "uiDefinition": { + "description": "The password for this api", + "displayName": "Password", + "tooltip": "Provide your password", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#373A3C", + "capabilities": [], + "policyTemplateInstances": [ + { + "templateId": "setqueryparameter", + "title": "integrator", + "parameters": { + "x-ms-apimTemplateParameter.name": "piIntegrator", + "x-ms-apimTemplateParameter.value": "89", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplate-operationName": [ + "RemoveInfobipSMSWebhook", + "SendInfobipSMS", + "MakeInfobipVoiceCall", + "CheckCurrentBalance", + "CreateInfobipSMSWebhook" + ] + } + }, + { + "templateId": "setqueryparameter", + "title": "platform", + "parameters": { + "x-ms-apimTemplateParameter.name": "piPlatform", + "x-ms-apimTemplateParameter.value": "5vqd", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplate-operationName": [ + "RemoveInfobipSMSWebhook", + "SendInfobipSMS", + "MakeInfobipVoiceCall", + "CheckCurrentBalance", + "CreateInfobipSMSWebhook" + ] + } + } + ], + "publisher": "Infobip", + "stackOwner": "Infobip" + } +} \ No newline at end of file From b675251c0ca305025bdcda603e5bc21d744ce685 Mon Sep 17 00:00:00 2001 From: Kasper Birch Olsen Date: Wed, 19 Aug 2020 02:20:21 +0200 Subject: [PATCH 018/347] LINK Mobility connector (#388) --- .../LINKMobility/apiDefinition.swagger.json | 255 ++++++++++++++++++ .../LINKMobility/apiProperties.json | 36 +++ certified-connectors/LINKMobility/icon.png | Bin 0 -> 5927 bytes certified-connectors/LINKMobility/intro.md | 21 ++ .../LINKMobility/settings.json | 9 + 5 files changed, 321 insertions(+) create mode 100644 certified-connectors/LINKMobility/apiDefinition.swagger.json create mode 100644 certified-connectors/LINKMobility/apiProperties.json create mode 100644 certified-connectors/LINKMobility/icon.png create mode 100644 certified-connectors/LINKMobility/intro.md create mode 100644 certified-connectors/LINKMobility/settings.json diff --git a/certified-connectors/LINKMobility/apiDefinition.swagger.json b/certified-connectors/LINKMobility/apiDefinition.swagger.json new file mode 100644 index 000000000..76fb7c2cd --- /dev/null +++ b/certified-connectors/LINKMobility/apiDefinition.swagger.json @@ -0,0 +1,255 @@ +{ + "swagger": "2.0", + "info": { + "title": "LINK Mobility", + "description": "LINK Mobility provides a SMS text message gateway that can be used to send SMS messages as part of business flows. To use the connector, you must contact LINK Mobility support to purchase a service subscription and obtain login information.", + "version": "1.0", + "contact": { + "name": "LINK Mobility Support", + "url": "https://linkmobility.dk/support/", + "email": "support@linkmobility.dk" + } + }, + "host": "wsx.sp247.net", + "basePath": "/sms/send", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "messageId" + }, + "resultCode": { + "type": "integer", + "format": "int32", + "description": "resultCode" + }, + "description": { + "type": "string", + "description": "description" + } + } + }, + "headers": { + "Content-Type": { + "description": "Content-Type", + "type": "string" + } + } + }, + "204": { + "description": "No Content", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "description": { + "type": "string", + "description": "description" + }, + "translatedDescription": { + "type": "string", + "description": "translatedDescription" + } + } + }, + "headers": { + "Content-Type": { + "description": "Content-Type", + "type": "string" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "description": { + "type": "string", + "description": "description" + }, + "translatedDescription": { + "type": "string", + "description": "translatedDescription" + } + } + }, + "headers": { + "Content-Type": { + "description": "Content-Type", + "type": "string" + } + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "description": { + "type": "string", + "description": "description" + }, + "translatedDescription": { + "type": "string", + "description": "translatedDescription" + } + } + }, + "headers": { + "Content-Type": { + "description": "Content-Type", + "type": "string" + } + } + }, + "403": { + "description": "Forbidden", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "description": { + "type": "string", + "description": "description" + }, + "translatedDescription": { + "type": "string", + "description": "translatedDescription" + } + } + }, + "headers": { + "Content-Type": { + "description": "Content-Type", + "type": "string" + } + } + } + }, + "summary": "Send SMS", + "description": "Send an SMS Message", + "operationId": "Sendsms", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Source (telephone number or name)", + "title": "Source", + "x-ms-visibility": "important" + }, + "destination": { + "type": "string", + "description": "The telephone number of the recipient. Please include country code (i.e. +45)", + "title": "Destination", + "x-ms-visibility": "important" + }, + "userData": { + "type": "string", + "description": "SMS message text", + "title": "Text", + "x-ms-visibility": "important" + }, + "platformId": { + "type": "string", + "description": "Platform ID (provided by LINK Mobility Support)", + "title": "Platform ID", + "x-ms-visibility": "important" + }, + "platformPartnerId": { + "type": "string", + "description": "Platform Partner ID (provided by LINK Mobility Support)", + "title": "Platform Partner ID", + "x-ms-visibility": "important" + }, + "useDeliveryReport": { + "type": "boolean", + "description": "useDeliveryReport", + "title": "Use Delivery Report", + "enum": [ + true, + false + ], + "default": false, + "x-ms-visibility": "internal" + } + }, + "required": [ + "destination", + "platformId", + "platformPartnerId", + "userData", + "source", + "useDeliveryReport" + ] + } + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://linkmobility.dk" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://linkmobility.dk/privacy/" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Website" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "security": [ + { + "basic_auth": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/LINKMobility/apiProperties.json b/certified-connectors/LINKMobility/apiProperties.json new file mode 100644 index 000000000..811580d33 --- /dev/null +++ b/certified-connectors/LINKMobility/apiProperties.json @@ -0,0 +1,36 @@ +{ + "properties": { + "connectionParameters": { + "username": { + "type": "securestring", + "uiDefinition": { + "displayName": "username", + "description": "The username for this api", + "tooltip": "Provide the username", + "constraints": { + "tabIndex": 2, + "clearText": true, + "required": "true" + } + } + }, + "password": { + "type": "securestring", + "uiDefinition": { + "displayName": "password", + "description": "The password for this api", + "tooltip": "Provide the password", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#007B9B", + "capabilities": [], + "publisher": "LINK Mobility", + "stackOwner": "LINK Mobility" + } +} \ No newline at end of file diff --git a/certified-connectors/LINKMobility/icon.png b/certified-connectors/LINKMobility/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..de162373b29319a2e0214bc3b497575fece7b22a GIT binary patch literal 5927 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 literal 0 HcmV?d00001 diff --git a/certified-connectors/LINKMobility/intro.md b/certified-connectors/LINKMobility/intro.md new file mode 100644 index 000000000..abc9006e0 --- /dev/null +++ b/certified-connectors/LINKMobility/intro.md @@ -0,0 +1,21 @@ + +## LINK Mobility Connector +LINK Mobility provides a SMS text message gateway that can be used to send SMS messages as part of business flows. To use the connector, you must contact LINK Mobility support to purchase a service subscription and obtain login information. + +## Prerequisites +Users must obtain a subscription to the LINQ Mobility SMS service. Please go to https://linkmobility.dk/support/ or contact support@linkmobility.dk for further information. + +## How to get credentials + +Please go to https://linkmobility.dk/support/ or contact support@linkmobility.dk for further information. + +## Known issues and limitations + +Version 1.0 only supports sending of SMS messages. + +## Supported Operations +The connector supports the following operations: +* `Send SMS`: Send a SMS message + + + diff --git a/certified-connectors/LINKMobility/settings.json b/certified-connectors/LINKMobility/settings.json new file mode 100644 index 000000000..dbefb35d7 --- /dev/null +++ b/certified-connectors/LINKMobility/settings.json @@ -0,0 +1,9 @@ +{ + "connectorId": "shared_link-20mobility-5f190e9222f2887669-5f39d539149a98086a", + "environment": "9d5fb8bf-d308-4f5a-a728-0a2038e4615a", + "apiProperties": "apiProperties.json", + "apiDefinition": "apiDefinition.swagger.json", + "icon": "icon.png", + "powerAppsUrl": "https://api.powerapps.com", + "powerAppsApiVersion": "2016-11-01" +} \ No newline at end of file From b49645903578e498eb435c1fab3d4709147b2f5b Mon Sep 17 00:00:00 2001 From: Requiem Date: Tue, 18 Aug 2020 20:28:18 -0400 Subject: [PATCH 019/347] pull request for connector certification (#385) * documents commit * commit readme * commit all conectors * custom conectors latinshare * fixes for certification * update apiDefinition to v1.1 * quick fixes for certification * quicky fix for certification Co-authored-by: Nicolas Valenzuela --- .../apiDefinition.swagger.json | 456 +++++++ .../LatinShare Documents/apiProperties.json | 23 + .../LatinShare Documents/readme.md | 20 + .../apiDefinition.swagger.json | 1060 +++++++++++++++++ .../apiProperties.json | 23 + .../LatinShare SHP Management/readme.md | 19 + .../apiDefinition.swagger.json | 434 +++++++ .../apiProperties.json | 23 + .../LatinShare SHP Permissions/readme.md | 19 + 9 files changed, 2077 insertions(+) create mode 100644 custom-connectors/LatinShare Documents/apiDefinition.swagger.json create mode 100644 custom-connectors/LatinShare Documents/apiProperties.json create mode 100644 custom-connectors/LatinShare Documents/readme.md create mode 100644 custom-connectors/LatinShare SHP Management/apiDefinition.swagger.json create mode 100644 custom-connectors/LatinShare SHP Management/apiProperties.json create mode 100644 custom-connectors/LatinShare SHP Management/readme.md create mode 100644 custom-connectors/LatinShare SHP Permissions/apiDefinition.swagger.json create mode 100644 custom-connectors/LatinShare SHP Permissions/apiProperties.json create mode 100644 custom-connectors/LatinShare SHP Permissions/readme.md diff --git a/custom-connectors/LatinShare Documents/apiDefinition.swagger.json b/custom-connectors/LatinShare Documents/apiDefinition.swagger.json new file mode 100644 index 000000000..365cb1ac3 --- /dev/null +++ b/custom-connectors/LatinShare Documents/apiDefinition.swagger.json @@ -0,0 +1,456 @@ +{ + "swagger": "2.0", + "info": { + "title": "LatinShare Documents", + "version": "1.0.0", + "description": "This connector provides a set of actions related to Docx, HTML and PDF documents. You can create documents from templates (DOCX or HTML files) and convert them to PDF. Visit the official site for more information http://flow.latinshare.com/sitio2020/documentacion-documents/", + "contact": { + "name": "LatinShare Support", + "url": "http://flow.latinshare.com/contacto-soporte", + "email": "support@latinshare.com" + } + }, + "host": "documentsmanagement.azurewebsites.net", + "basePath": "/", + "schemes": [ + "https", + "http" + ], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "http://flow.latinshare.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "http://flow.latinshare.com/privatePolicy" + }, + { + "propertyName": "Categories", + "propertyValue": "Content and Files" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/api/HtmlToPDF": { + "post": { + "tags": [ + "DocumentsAPI" + ], + "summary": "Convert HTML to PDF", + "description": "Convert HTML to PDF", + "operationId": "HTMLtoPDF", + "parameters": [ + { + "in": "body", + "name": "request", + "schema": { + "$ref": "#/definitions/HTMLPDFRequest" + } + } + ], + "responses": { + "200": { + "description": "File Content", + "schema": { + "$ref": "#/definitions/FileResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/HtmlFromTemplate": { + "post": { + "tags": [ + "DocumentsAPI" + ], + "summary": "Create HTML from template", + "description": "Create HTML from template", + "operationId": "HtmlFromTemplate", + "parameters": [ + { + "in": "body", + "name": "request", + "schema": { + "$ref": "#/definitions/HTMLTemplateRequest" + } + } + ], + "responses": { + "200": { + "description": "HTML Content", + "schema": { + "$ref": "#/definitions/HTMLTemplateResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/PDF_fromTemplateHTML": { + "post": { + "tags": [ + "DocumentsAPI" + ], + "summary": "Create PDF from template HTML", + "description": "Create PDF from template HTML", + "operationId": "PDF_fromTemplateHTML", + "parameters": [ + { + "in": "body", + "name": "request", + "schema": { + "$ref": "#/definitions/HTMLTemplateRequest" + } + } + ], + "responses": { + "200": { + "description": "HTML Content", + "schema": { + "$ref": "#/definitions/HTMLTemplateResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/DocxToPDF": { + "post": { + "tags": [ + "DocumentsAPI" + ], + "operationId": "WordToPDF", + "description": "Convert DOCX to PDF", + "summary": "Convert DOCX to PDF", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "request", + "schema": { + "$ref": "#/definitions/DocxPDFRequest" + } + } + ], + "responses": { + "200": { + "description": "File Content", + "schema": { + "$ref": "#/definitions/FileResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/DocxFromTemplate": { + "post": { + "tags": [ + "DocumentsAPI" + ], + "description": "Create document from DOCX template", + "operationId": "DocxFromTemplate", + "summary": "Create document from DOCX template", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "request", + "schema": { + "$ref": "#/definitions/DocxTemplateRequest" + } + } + ], + "responses": { + "200": { + "description": "File Content", + "schema": { + "$ref": "#/definitions/FileResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/PDF_fromTemplateDocx": { + "post": { + "tags": [ + "DocumentsAPI" + ], + "summary": "Create PDF from template Docx", + "description": "Create PDF from template Docx", + "operationId": "PDF_fromTemplateDocx", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "request", + "schema": { + "$ref": "#/definitions/DocxTemplateRequest" + } + } + ], + "responses": { + "200": { + "description": "File Content", + "schema": { + "$ref": "#/definitions/FileResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + } + }, + "definitions": { + "HTMLPDFRequest": { + "type": "object", + "properties": { + "html": { + "type": "string", + "description": "HTML to convert to PDF", + "x-ms-summary": "Source HTML", + "title": "Source HTML", + "format": "byte", + "x-ms-visibility": "important" + }, + "size": { + "type": "string", + "description": "Can be A4, Letter, etc...", + "x-ms-summary": "Paper Size", + "title": "Papper Size", + "x-ms-visibility": "advanced", + "enum": [ + "A4", + "Letter", + "Tabloid", + "Ledger", + "Legal", + "Statement", + "Executive", + "A2", + "A3", + "A5", + "B4", + "B5" + ] + }, + "orientation": { + "type": "string", + "description": "Portrait or Landscape", + "x-ms-summary": "Orientation", + "title": "Orientation", + "x-ms-visibility": "advanced", + "enum": [ + "Portrait", + "Landscape" + ] + } + }, + "required": [ + "html" + ] + }, + "HTMLTemplateRequest": { + "type": "object", + "properties": { + "templateHTML": { + "type": "string", + "x-ms-summary": "Source HTML", + "x-ms-visibility": "important", + "description": "Text HTML template" + }, + "templateData": { + "type": "object", + "x-ms-summary": "Template data", + "x-ms-visibility": "important", + "description": "JSON data that should be applied to the template" + } + }, + "required": [ + "templateHTML", + "templateData" + ] + }, + "DocxPDFRequest": { + "type": "object", + "properties": { + "documentContent": { + "format": "byte", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Content file", + "description": "Content of document", + "title": "Document content" + } + }, + "required": [ + "documentContent" + ] + }, + "DocxTemplateRequest": { + "type": "object", + "properties": { + "templateDocx": { + "format": "byte", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Template file", + "description": "Content of the template", + "title": "Document content" + }, + "templateData": { + "type": "object", + "x-ms-summary": "Template data", + "x-ms-visibility": "important", + "description": "JSON data that should be applied to the template", + "title": "Template data" + } + }, + "required": [ + "templateDocx", + "templateData" + ] + }, + "HTMLTemplateResponse": { + "title": "HTML Content", + "type": "string", + "x-ms-summary": "Result HTML", + "x-ms-visibility": "important", + "description": "Raw HTML result" + }, + "FileResponse": { + "title": "File Content", + "type": "string", + "x-ms-summary": "Result File,", + "x-ms-visibility": "important", + "description": "Result File" + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "Authorization" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [ + { + "name": "DocumentsAPI", + "description": "Documents API calls" + } + ] +} \ No newline at end of file diff --git a/custom-connectors/LatinShare Documents/apiProperties.json b/custom-connectors/LatinShare Documents/apiProperties.json new file mode 100644 index 000000000..4cc8f5248 --- /dev/null +++ b/custom-connectors/LatinShare Documents/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#e6e6e6", + "capabilities": [], + "publisher": "LatinShare", + "stackOwner": "LatinShare" + } +} \ No newline at end of file diff --git a/custom-connectors/LatinShare Documents/readme.md b/custom-connectors/LatinShare Documents/readme.md new file mode 100644 index 000000000..a725da802 --- /dev/null +++ b/custom-connectors/LatinShare Documents/readme.md @@ -0,0 +1,20 @@ +## LatinShare Documents Connector +Using LatinShare Documents API, you can generate documents in Microsoft Power Automate, Azure Logic Apps or Power Apps. +This connector provides a set of actions related to Docx, HTML and PDF documents. You can create documents from templates (DOCX or HTML files) and convert them to PDF. + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Apps or Power Automate plan with custom connector feature +* A valid account. generated when purchasing a product at http://flow.latinshare.com/ +* Generate an API key in the account provided at the time of purchase +* The Power platform CLI tools + +### Deploying the sample +Run the following commands and follow the prompts: + +```paconn +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json --icon [Path to icon.png] +`` + +## Supported Operations +Checkout full API Documentation on [LatinShare Documentation](http://flow.latinshare.com/sitio2020/documentacion-documents/) \ No newline at end of file diff --git a/custom-connectors/LatinShare SHP Management/apiDefinition.swagger.json b/custom-connectors/LatinShare SHP Management/apiDefinition.swagger.json new file mode 100644 index 000000000..13a9d311b --- /dev/null +++ b/custom-connectors/LatinShare SHP Management/apiDefinition.swagger.json @@ -0,0 +1,1060 @@ +{ + "swagger": "2.0", + "info": { + "title": "LatinShare SHP Management", + "version": "1.1", + "description": "This connector provides a set of SharePoint-related actions. For example, document, folder, list and site management. You can copy, move and delete documents and folders, delete subsites, and enable version control on lists via URL. Visit the official site for more information http://flow.latinshare.com/sitio2020/documentacion-sp-managments/", + "contact": { + "name": "LatinShare Support", + "url": "http://flow.latinshare.com/contacto-soporte", + "email": "support@latinshare.com" + } + }, + "tags": [ + { + "name": "SHP Documents API", + "description": "SharePoint documents management API calls" + }, + { + "name": "SHP Folder API", + "description": "SharePoint folder management API calls" + }, + { + "name": "SHP List API", + "description": "SharePoint folder management API calls" + }, + { + "name": "SHP Site API", + "description": "SharePoint folder management API calls" + } + ], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "http://flow.latinshare.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "http://flow.latinshare.com/privatePolicy" + }, + { + "propertyName": "Categories", + "propertyValue": "Collaboration" + } + ], + "host": "csommanagment.azurewebsites.net", + "basePath": "/", + "schemes": [ + "https", + "http" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/api/CheckInDocument": { + "post": { + "tags": [ + "SHP Documents API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Check In SharePoint Document", + "description": "Check-in a SharePoint document at the specified URL", + "operationId": "CheckInDocument", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CheckInDocumentRequest" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DocumentResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/CheckOutDocument": { + "post": { + "tags": [ + "SHP Documents API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Check Out SharePoint Document", + "description": "Check-out a SharePoint document at the specified URL", + "operationId": "CheckOutDocument", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CheckOutDocumentRequest" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DocumentResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/CopyDocumentByUrl": { + "post": { + "tags": [ + "SHP Documents API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Copy SharePoint Document by URL", + "description": "Copy a document from the document URL to a specific library URL", + "operationId": "CopyDocumentByUrl", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CopyDocumentByUrlRequest" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DocumentResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/MoveDocumentByUrl": { + "post": { + "tags": [ + "SHP Documents API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Move SharePoint Document by URL", + "description": "Move a document from the document URL to a specific library URL", + "operationId": "MoveDocumentByUrl", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/MoveDocumentByUrlRequest" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DocumentResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/RemoveDocumentByUrl": { + "post": { + "tags": [ + "SHP Documents API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Remove SharePoint Document by URL", + "description": "Copy a document from the document URL.", + "operationId": "RemoveDocumentByUrl", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/RemoveDocumentByUrlRequest" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/CreateFolder": { + "post": { + "tags": [ + "SHP Folder API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Create SharePoint Folder in List", + "description": "Creates a new SharePoint folder in the document library using the specified path.", + "operationId": "CreateFolder", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CreateFolderRequest" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/FolderResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/CreateFolderByURL": { + "post": { + "tags": [ + "SHP Folder API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "operationId": "CreateFolderByURL", + "summary": "Create SharePoint Folder by URL", + "description": "Creates a new SharePoint folder in the document library by the specified URL.", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CreateFolderByURLRequest" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/FolderResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/CopyFolder_fromLibrary": { + "post": { + "tags": [ + "SHP Folder API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Copy SharePoint Folder By URL", + "description": "Copy a SharePoint folder from the document library to the specified URL", + "operationId": "CopyFolder_fromLibrary", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CopyFolder_fromLibraryRequest" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/FolderResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/MoveFolder_fromLibrary": { + "post": { + "tags": [ + "SHP Folder API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Move SharePoint Folder URL", + "description": "Move a SharePoint folder from the document library to the specified URL", + "operationId": "MoveFolder_fromLibrary", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/MoveFolder_fromLibraryRequest" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/FolderResponse" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/RemoveFolderByURL": { + "post": { + "tags": [ + "SHP Folder API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Remove Sharepoint Folder by URL", + "description": "Remove folder from Sharepoint library by URL", + "operationId": "RemoveFolderbyURL", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/RemoveFolderByURLRequest" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/RemoveSiteByURL": { + "post": { + "tags": [ + "SHP Site API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Remove Sharepoint Site By URL", + "description": "Remove Site Sharepoint by URL", + "operationId": "RemoveSiteByURL", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/RemoveSiteByURLRequest" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/EnableVersionControl": { + "post": { + "tags": [ + "SHP List API" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "summary": "Enable List Version Control", + "description": "Enable version control for list or library", + "operationId": "EnableVersionControl", + "parameters": [ + { + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/EnableVersionControlRequest" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + } + }, + "definitions": { + "CheckInDocumentRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "comment": { + "type": "string", + "description": "The comment to accompany document check in", + "x-ms-summary": "Comment", + "x-ms-visibility": "important", + "title": "Comment" + }, + "fileURL": { + "type": "string", + "description": "The URL of the document to check in", + "x-ms-summary": "File URL", + "x-ms-visibility": "important", + "title": "File URL" + }, + "checkinType": { + "type": "string", + "description": "Specify Checkin Type", + "x-ms-summary": "Checkin Type", + "title": "Checkin Type", + "x-ms-visibility": "important", + "enum": [ + "MajorCheckIn", + "MinorCheckIn", + "OverwriteCheckIn" + ] + } + }, + "required": [ + "siteUrl", + "fileURL", + "checkinType" + ] + }, + "CheckOutDocumentRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "fileURL": { + "type": "string", + "description": "The URL of the document to check out.", + "x-ms-summary": "File URL", + "title": "File URL", + "x-ms-visibility": "important" + } + }, + "required": [ + "siteUrl", + "fileURL" + ] + }, + "CopyDocumentByUrlRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "sourceURL": { + "type": "string", + "description": "The URL of the document to be copied. Use full URL", + "x-ms-summary": "Source URL", + "title": "Source URL", + "x-ms-visibility": "important" + }, + "destinationURL": { + "type": "string", + "description": "The URL where the source document will be copied. Use full URL", + "x-ms-summary": "Destination URL", + "x-ms-visibility": "important", + "title": "Destination URL" + }, + "nameDocument": { + "type": "string", + "description": "This is an optional field that you can leave blank. By default, the name is from the copied file", + "x-ms-summary": "Name of the document", + "x-ms-visibility": "important", + "title": "Name of the document" + } + }, + "required": [ + "destinationURL", + "siteUrl", + "sourceURL" + ] + }, + "MoveDocumentByUrlRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "sourceURL": { + "type": "string", + "description": "The URL of the document to be move. Use full URL", + "x-ms-summary": "Source URL", + "x-ms-visibility": "important", + "title": "Source URL" + }, + "destinationURL": { + "type": "string", + "description": "The URL where the source document will be move. Use full URL", + "x-ms-summary": "Destination URL", + "x-ms-visibility": "important", + "title": "Destination URL" + } + }, + "required": [ + "siteUrl", + "sourceURL", + "destinationURL" + ] + }, + "RemoveDocumentByUrlRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "fileURL": { + "type": "string", + "description": "The URL of the document to be removed. Use full URL", + "x-ms-summary": "File URL", + "x-ms-visibility": "important", + "title": "File URL" + } + }, + "required": [ + "siteUrl", + "fileURL" + ] + }, + "DocumentResponse": { + "type": "object", + "properties": { + "fileId": { + "title": "File ID", + "type": "string", + "description": "ID of the document to check out", + "x-ms-summary": "ID file", + "x-ms-visibility": "important" + }, + "fileUrl": { + "title": "File URL", + "type": "string", + "description": "The URL of the document to check out", + "x-ms-summary": "File URL", + "x-ms-visibility": "important" + } + }, + "required": [ + "fileId", + "fileUrl" + ] + }, + "CreateFolderRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "listName": { + "type": "string", + "description": "The name of the library or the list where the folder will be created.", + "x-ms-summary": "List Name", + "x-ms-visibility": "important", + "title": "List Name" + }, + "folderPath": { + "type": "string", + "description": "The path where the folder will be created. The action will create all folders included into the path.", + "x-ms-summary": "Folder Path", + "title": "Folder Path", + "x-ms-visibility": "important" + } + }, + "required": [ + "siteUrl", + "listName", + "folderPath" + ] + }, + "CreateFolderByURLRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "folderURL": { + "type": "string", + "description": "The URL of the folder. Use the full URL path. You can create multiple folders", + "x-ms-summary": "Folder URL", + "x-ms-visibility": "important", + "title": "Folder URL" + } + }, + "required": [ + "siteUrl", + "folderURL" + ] + }, + "CopyFolder_fromLibraryRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "sourceURL": { + "type": "string", + "description": "The URL of the folder to be copied. Use full URL", + "x-ms-summary": "Source URL", + "x-ms-visibility": "important", + "title": "Source URL" + }, + "destinationURL": { + "type": "string", + "description": "The URL where the source folder will be copied. Use full URL", + "x-ms-summary": "Destination URL", + "x-ms-visibility": "important", + "title": "Destination URL" + } + }, + "required": [ + "siteUrl", + "sourceURL", + "destinationURL" + ] + }, + "MoveFolder_fromLibraryRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "sourceURL": { + "type": "string", + "description": "The URL of the folder to be move. Use full URL", + "x-ms-summary": "Source URL", + "x-ms-visibility": "important", + "title": "Source URL" + }, + "destinationURL": { + "type": "string", + "description": "The URL where the source folder will be move. Use full URL", + "x-ms-summary": "Destination URL", + "x-ms-visibility": "important", + "title": "Destination URL" + } + }, + "required": [ + "siteUrl", + "sourceURL", + "destinationURL" + ] + }, + "RemoveFolderByURLRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "folderURL": { + "type": "string", + "description": "The URL of the folder to be removed. Use full URL", + "x-ms-summary": "Folder URL", + "x-ms-visibility": "important", + "title": "Folder URL" + } + }, + "required": [ + "siteUrl", + "folderURL" + ] + }, + "FolderResponse": { + "type": "object", + "properties": { + "folderId": { + "title": "Folder ID", + "type": "string", + "description": "ID of the folder", + "x-ms-summary": "Folder ID", + "x-ms-visibility": "important" + }, + "folderUrl": { + "title": "Folder URL", + "type": "string", + "description": "The URL of the folder", + "x-ms-summary": "Folder URL", + "x-ms-visibility": "important" + } + }, + "required": [ + "folderId", + "folderUrl" + ] + }, + "RemoveSiteByURLRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + } + }, + "required": [ + "siteUrl" + ] + }, + "EnableVersionControlRequest": { + "type": "object", + "properties": { + "siteUrl": { + "type": "string", + "description": "Specify a sharepoint site", + "x-ms-summary": "Site URL", + "x-ms-visibility": "important", + "title": "Site URL" + }, + "listName": { + "type": "string", + "description": "Specify the list to be used", + "x-ms-summary": "List Name", + "x-ms-visibility": "important", + "title": "List Name" + }, + "MajorVersionLimit": { + "type": "integer", + "description": "Set maximum limits for major versions", + "x-ms-summary": "Major Version Limit", + "x-ms-visibility": "advanced", + "title": "Major Version Limit", + "default": "0" + }, + "EnableMinorVersions": { + "type": "boolean", + "description": "Enable minor versions for documents in the sharepoint library", + "x-ms-summary": "Enable Minor Versions", + "title": "Enable Minor Versions", + "x-ms-visibility": "advanced", + "default": false, + "enum": [ + true, + false + ] + }, + "MajorWithMinorVersionsLimit": { + "type": "integer", + "description": "Set maximum limits for minor versions", + "x-ms-summary": "Major With Minor Versions Limit", + "x-ms-visibility": "advanced", + "title": "Major With Minor Versions Limit", + "default": "0" + } + }, + "required": [ + "siteUrl", + "listName" + ] + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "Authorization" + } + }, + "security": [ + { + "API Key": [] + } + ] +} \ No newline at end of file diff --git a/custom-connectors/LatinShare SHP Management/apiProperties.json b/custom-connectors/LatinShare SHP Management/apiProperties.json new file mode 100644 index 000000000..4cc8f5248 --- /dev/null +++ b/custom-connectors/LatinShare SHP Management/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#e6e6e6", + "capabilities": [], + "publisher": "LatinShare", + "stackOwner": "LatinShare" + } +} \ No newline at end of file diff --git a/custom-connectors/LatinShare SHP Management/readme.md b/custom-connectors/LatinShare SHP Management/readme.md new file mode 100644 index 000000000..830db4974 --- /dev/null +++ b/custom-connectors/LatinShare SHP Management/readme.md @@ -0,0 +1,19 @@ +## LatinShare SHP Management Connector +This connector provides a set of SharePoint-related actions. Using LatinShare SHP Management API, you can for example, document, folder, list and site management. You can copy, move and delete documents and folders, delete subsites, and enable version control on lists via URL. + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Apps or Power Automate plan with custom connector feature +* A valid account. generated when purchasing a product at http://flow.latinshare.com/ +* Generate an API key in the account provided at the time of purchase +* The Power platform CLI tools + +### Deploying the sample +Run the following commands and follow the prompts: + +```paconn +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json --icon [Path to icon.png] +`` + +## Supported Operations +Checkout full API Documentation on [LatinShare Documentation](http://flow.latinshare.com/sitio2020/documentacion-sp-managments/) \ No newline at end of file diff --git a/custom-connectors/LatinShare SHP Permissions/apiDefinition.swagger.json b/custom-connectors/LatinShare SHP Permissions/apiDefinition.swagger.json new file mode 100644 index 000000000..db8f35e81 --- /dev/null +++ b/custom-connectors/LatinShare SHP Permissions/apiDefinition.swagger.json @@ -0,0 +1,434 @@ +{ + "swagger": "2.0", + "info": { + "title": "LatinShare SHP Permissions", + "version": "1.0.1", + "description": "This connector provides a set of actions related to SharePoint Online. For example, manage permissions for items, lists, and sites. You can grant permissions to specific users or groups, remove permissions to specific users or groups, remove all permissions, and restore permission inheritance for SharePoint resources. Visit the official site for more information http: //flow.latinshare.com/sitio2020/documentacion-sp-managments/", + "contact": { + "name": "LatinShare Support", + "url": "http://flow.latinshare.com/contacto-soporte", + "email": "support@latinshare.com" + } + }, + "tags": [ + { + "name": "SHP permissions API", + "description": "Manage SHP permissions API calls" + }, + { + "name": "Dynamic schema API", + "description": "Return dynamic schema" + } + ], + "host": "csompermissions.azurewebsites.net", + "basePath": "/", + "schemes": [ + "https", + "http" + ], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "http://flow.latinshare.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "http://flow.latinshare.com/privatePolicy" + }, + { + "propertyName": "Categories", + "propertyValue": "Collaboration" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/api/ItemPermissions": { + "post": { + "tags": [ + "SHP permissions API" + ], + "summary": "Manage SharePoint Item Permissions", + "description": "Manage SharePoint Item Permissions: Grant, remove, delete all, and restore inheritance permissions to SharePoint items", + "operationId": "ItemPermissions", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "ActionType", + "required": true, + "type": "string", + "x-ms-summary": "Action Type: Grant, Remove, Delete All, Restore Inheritance", + "x-ms-visibility": "important", + "description": "Action Type: Grant, Remove, Delete All, Restore Inheritance", + "enum": [ + "Grant", + "Remove", + "Remove All", + "Restore Inheritance" + ] + }, + { + "in": "body", + "name": "dynamicTaskListSchema", + "required": true, + "schema": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "x-ms-dynamic-schema": { + "operationId": "ActionTypeSchema_Item", + "value-path": "items", + "parameters": { + "ActionType": { + "parameter": "ActionType" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/ListPermissions": { + "post": { + "tags": [ + "SHP permissions API" + ], + "summary": "Manage SharePoint List Permissions", + "description": "Manage SharePoint List Permissions : Grant, remove, delete all, and restore inheritance permissions to SharePoint lists", + "operationId": "ListPermissions", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "ActionType", + "required": true, + "type": "string", + "x-ms-summary": "Action Type: Grant, Remove, Delete All, Restore Inheritance", + "x-ms-visibility": "important", + "description": "Action Type: Grant, Remove, Delete All, Restore Inheritance", + "enum": [ + "Grant", + "Remove", + "Remove All", + "Restore Inheritance" + ] + }, + { + "in": "body", + "name": "dynamicTaskListSchema", + "required": true, + "schema": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "x-ms-dynamic-schema": { + "operationId": "ActionTypeSchema_List", + "value-path": "items", + "parameters": { + "ActionType": { + "parameter": "ActionType" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/SitePermissions": { + "post": { + "tags": [ + "SHP permissions API" + ], + "summary": "Manage SharePoint Site Permissions", + "description": "Manage SharePoint Site Permissions : Grant, remove, delete all, and restore inheritance permissions to SharePoint sites", + "operationId": "SitePermissions", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "ActionType", + "required": true, + "type": "string", + "x-ms-summary": "Action Type: Grant, Remove, Delete All, Restore Inheritance", + "x-ms-visibility": "important", + "description": "Action Type: Grant, Remove, Delete All, Restore Inheritance", + "enum": [ + "Grant", + "Remove", + "Remove All", + "Restore Inheritance" + ] + }, + { + "in": "body", + "name": "dynamicTaskListSchema", + "description": "Dynamic Schema of items in selected list", + "required": true, + "schema": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "x-ms-dynamic-schema": { + "operationId": "ActionTypeSchema_Site", + "value-path": "items", + "parameters": { + "ActionType": { + "parameter": "ActionType" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/ActionTypeSchema_Item": { + "get": { + "tags": [ + "Dynamic schema API" + ], + "summary": "This function returns a schema for item permissions", + "description": "This function returns a schema for item permissions", + "operationId": "ActionTypeSchema_Item", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "name": "ActionType", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "Action Type: return schema based on the type of action", + "description": "return schema based on the type of action" + } + ], + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/ActionTypeSchema_List": { + "get": { + "tags": [ + "Dynamic schema API" + ], + "summary": "This function returns a schema for list permissions", + "description": "This function returns a schema for list permissions", + "operationId": "ActionTypeSchema_List", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "name": "ActionType", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "Action Type: return schema based on the type of action", + "description": "return schema based on the type of action" + } + ], + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + }, + "/api/ActionTypeSchema_Site": { + "get": { + "tags": [ + "Dynamic schema API" + ], + "summary": "This function returns a schema for site permissions", + "description": "This function returns a schema for site permissions", + "operationId": "ActionTypeSchema_Site", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "parameters": [ + { + "name": "ActionType", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "Action Type: return schema based on the type of action", + "description": "return schema based on the type of action" + } + ], + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object" + } + }, + "401": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@latinshare.com" + }, + "500": { + "description": "Internal server error, please write an email to support@latinshare.com" + }, + "400": { + "description": "Bad request error, write an email to support@latinshare.com for more information", + "schema": { + "type": "string" + } + } + } + } + } + }, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "Authorization" + } + }, + "definitions": {}, + "security": [ + { + "API Key": [] + } + ] +} \ No newline at end of file diff --git a/custom-connectors/LatinShare SHP Permissions/apiProperties.json b/custom-connectors/LatinShare SHP Permissions/apiProperties.json new file mode 100644 index 000000000..4cc8f5248 --- /dev/null +++ b/custom-connectors/LatinShare SHP Permissions/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#e6e6e6", + "capabilities": [], + "publisher": "LatinShare", + "stackOwner": "LatinShare" + } +} \ No newline at end of file diff --git a/custom-connectors/LatinShare SHP Permissions/readme.md b/custom-connectors/LatinShare SHP Permissions/readme.md new file mode 100644 index 000000000..5161e9a64 --- /dev/null +++ b/custom-connectors/LatinShare SHP Permissions/readme.md @@ -0,0 +1,19 @@ +## LatinShare SHP Permissions Connector +This connector provides a set of actions related to SharePoint Online. For example, manage permissions for items, lists, and sites. You can grant permissions to specific users or groups, remove permissions to specific users or groups, remove all permissions, and restore permission inheritance for SharePoint resources. + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Apps or Power Automate plan with custom connector feature +* A valid account. generated when purchasing a product at http://flow.latinshare.com/ +* Generate an API key in the account provided at the time of purchase +* The Power platform CLI tools + +### Deploying the sample +Run the following commands and follow the prompts: + +```paconn +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json --icon [Path to icon.png] +`` + +## Supported Operations +Checkout full API Documentation on [LatinShare Documentation](http://flow.latinshare.com/sitio2020/documentacion-sp-managments/) \ No newline at end of file From fc7cf98fee103446d67fb8cc32286dccbfa41e48 Mon Sep 17 00:00:00 2001 From: Crispin Koech Date: Thu, 20 Aug 2020 20:44:39 +0300 Subject: [PATCH 020/347] Add payments connector (#394) Co-authored-by: Crispin Kipruto --- .../Africa's Talking Payments/README.md | 38 + .../apiDefinition.swagger.json | 1953 +++++++++++++++++ .../apiProperties.json | 23 + 3 files changed, 2014 insertions(+) create mode 100644 certified-connectors/Africa's Talking Payments/README.md create mode 100644 certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json create mode 100644 certified-connectors/Africa's Talking Payments/apiProperties.json diff --git a/certified-connectors/Africa's Talking Payments/README.md b/certified-connectors/Africa's Talking Payments/README.md new file mode 100644 index 000000000..578617a63 --- /dev/null +++ b/certified-connectors/Africa's Talking Payments/README.md @@ -0,0 +1,38 @@ +## Africa's Talking Payments + +Africa's Talking Payments provides a powerful API that allows you to charge and send payments to more than 300 million mobile, bank and card account holders across Africa. This connectors exposes a couple of operations that allow you to seamlessly receive payments from payment providers, as well as initiate payments going out to your customers. + +## Pre-requisites + +In order to use this connector, you will need the following: + +* An account with Africa's Talking; you can sign up [here](https://account.africastalking.com/auth/register?next=%2Fauth%2Fsignup). +* A live prod application; you can create one after registering. +* A payments product; you can request for one after you've registered. + +Once you've signed up and you've created a live application, generate a new API Key for that application; you will use this key to authenticate your requests from our Payments connector. + +## Authentication. + +This connector uses `API Key` authentication (see steps above on how to obtain one). When creating a new connector (in Power Apps/Logic Apps), you'll be required to provide an API Key. + +## Supported Operations + +This connector supports the following operations: + +* `Mobile Checkout`: Initiate a Customer to Business (C2B) payments on a mobile subscriber’s device. +* `Mobile B2C (Business to Consumer)`: Send payments to mobile subscribers from your Payment Wallet. +* `Mobile B2B (Business to Business)`: Send payments to businesses e.g banks from your Payment Wallet. +* `Fetch Wallet Balance`: Fetch your wallet balance. +* `Wallet Transfer`: Transfer money from one Payment Product to another Payment Product hosted on Africa’s Talking. +* `Card Checkout`: Collect money into your Payment Wallet by initiating transactions that deduct money from a customers Debit or Credit Card. +* `Card Checkout Validate`: Validate card checkout charge requests. +* `Bank Checkout`: Collect money into your payment wallet by initiating transactions that deduct money from a customers bank account. +* `Bank Checkout Validate`: Validate bank checkout charge requests. +* `Fetch Wallet Transactions`: Fetch your wallet transactions. +* `Bank Transfer`: Move money from your Payment Wallet to bank accounts. +* `Top Up Stash`: Move money from a Payment Product to an Africa’s Talking application stash. +* `Fetch Product Transactions`: Fetch transactions of a particular payment product. +* `Find Transaction`: Find a particular payment transaction. + +For more information on parameters accepted/required by the connector's operations, please refer to our [documentation](https://build.at-labs.io/docs/payments%2Foverview). diff --git a/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json b/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json new file mode 100644 index 000000000..dd86c7039 --- /dev/null +++ b/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json @@ -0,0 +1,1953 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Africa's Talking Payments", + "description": "Charge and send payments to more than 300 million mobile, bank and card account holders across Africa.", + "contact": { + "name": "Advice and answers from the Africa's Talking Team", + "url": "https://help.africastalking.com/en/", + "email": "payments@africastalking.com" + } + }, + "host": "payments.africastalking.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/mobile/b2b/request": { + "post": { + "summary": "Mobile B2B (Business to Business)", + "description": "Send payments to businesses e.g banks from your Payment Wallet.", + "operationId": "MobileB2B", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "productName": { + "type": "string", + "description": "Your Africa\u2019s Talking Payment Product to initiate this transaction.", + "title": "Product Name", + "x-ms-visibility": "important" + }, + "provider": { + "type": "string", + "description": "Provider that will be used to process the B2B request.", + "title": "Provider", + "x-ms-visibility": "important", + "enum": [ + "Mpesa", + "TigoTanzania" + ] + }, + "transferType": { + "type": "string", + "description": "Transfer type of the payment.", + "title": "Transfer type", + "x-ms-visibility": "important", + "enum": [ + "BusinessBuyGoods", + "BusinessPayBill", + "DisburseFundsToBusiness", + "BusinessToBusinessTransfer" + ] + }, + "currencyCode": { + "type": "string", + "description": "Currency code for the value of this transaction", + "title": "Currency Code", + "x-ms-visibility": "important", + "enum": [ + "KES", + "UGX", + "NGN", + "USD", + "TZS" + ] + }, + "amount": { + "type": "number", + "format": "float", + "description": "Amount - in the provided currency - that the client is expected to confirm.", + "title": "Amount", + "x-ms-visibility": "important" + }, + "destinationChannel": { + "type": "string", + "description": "The name/number of the channel that will receive payment.", + "title": "Destination Channel", + "x-ms-visibility": "important" + }, + "destinationAccount": { + "type": "string", + "description": "The account name used by the business to receive money.", + "title": "Destination Account", + "x-ms-visibility": "important" + }, + "metadata": { + "type": "object", + "properties": {}, + "description": "metadata" + } + }, + "default": { + "username": "sandbox", + "productName": "TestProduct", + "provider": "Athena", + "transferType": "BusinessPayBill", + "currencyCode": "KES", + "amount": 100, + "destinationChannel": "partnerBussinessChannel", + "destinationAccount": "parterAccountName", + "metadata": {} + }, + "x-ms-visibility": "important", + "required": [ + "username", + "productName", + "provider", + "transferType", + "currencyCode", + "amount", + "destinationAccount", + "destinationChannel" + ] + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "providerChannel": { + "type": "string", + "description": "providerChannel" + }, + "status": { + "type": "string", + "description": "status" + }, + "transactionFee": { + "type": "string", + "description": "transactionFee" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/query/wallet/balance": { + "get": { + "summary": "Fetch Wallet Balance", + "description": "Fetch your wallet balance.", + "operationId": "FetchWalletBalance", + "parameters": [ + { + "name": "username", + "in": "query", + "type": "string", + "required": true, + "x-ms-visibility": "important", + "description": "Your application username.", + "x-ms-summary": "Username" + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "type": "object", + "properties": { + "balance": { + "type": "string", + "description": "balance" + }, + "status": { + "type": "string", + "description": "status" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/transfer/wallet": { + "post": { + "summary": "Wallet transfer", + "description": "Transfer money from one Payment Product to another Payment Product hosted on Africa\u2019s Talking.", + "operationId": "WalletTransfer", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application's username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "productName": { + "type": "string", + "description": "Your Africa\u2019s Talking Payment product to initiate this transaction.", + "title": "Product Name", + "x-ms-visibility": "important" + }, + "targetProductCode": { + "type": "integer", + "format": "int32", + "description": "Unique product code of the Africa\u2019s Talking Payment Product to transfer the funds to.", + "title": "Target Product Code", + "x-ms-visibility": "important" + }, + "currencyCode": { + "type": "string", + "description": "Currency code for the value of this transaction.", + "title": "Currency Code", + "x-ms-visibility": "important", + "enum": [ + "KES", + "UGX", + "USD", + "TZS" + ] + }, + "amount": { + "type": "number", + "format": "float", + "description": "Amount - in the provided currency - that the application will be topped up with.", + "title": "Amount", + "x-ms-visibility": "important" + }, + "metadata": { + "type": "object", + "properties": {}, + "description": "metadata" + } + }, + "default": { + "username": "sandbox", + "productName": "TestProduct", + "targetProductCode": 6531, + "currencyCode": "KES", + "amount": 1000, + "metadata": {} + }, + "x-ms-visibility": "important", + "required": [ + "username", + "productName", + "targetProductCode", + "currencyCode", + "amount" + ] + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "description" + }, + "status": { + "type": "string", + "description": "status" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/card/checkout/charge": { + "post": { + "summary": "Card Checkout", + "description": "Collect money into your Payment Wallet by initiating transactions that deduct money from a customers Debit or Credit Card.", + "operationId": "CardCheckout", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application's username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "productName": { + "type": "string", + "description": "Your Africa\u2019s Talking Payment Product to initiate this transaction.", + "title": "Product Name", + "x-ms-visibility": "important" + }, + "paymentCard": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The payment card number.", + "title": "Card Number", + "x-ms-visibility": "important" + }, + "cvvNumber": { + "type": "integer", + "format": "int32", + "description": "3 or 4 digit payment card verification value.", + "title": "CVV Number", + "x-ms-visibility": "important" + }, + "expiryMonth": { + "type": "integer", + "format": "int32", + "description": "Expiration month on the payment card.", + "title": "Expiry Month", + "x-ms-visibility": "important" + }, + "expiryYear": { + "type": "integer", + "format": "int32", + "description": "Expiration year on the payment card.", + "title": "Expiry Year", + "x-ms-visibility": "important" + }, + "countryCode": { + "type": "string", + "description": "Country where the payment card was issued.", + "title": "Country Code", + "x-ms-visibility": "important", + "enum": [ + "NG" + ] + }, + "authToken": { + "type": "string", + "description": "The payment card's ATM PIN", + "title": "Auth Token", + "x-ms-visibility": "important" + } + }, + "description": "paymentCard", + "required": [ + "number", + "cvvNumber", + "expiryMonth", + "expiryYear", + "countryCode", + "authToken" + ] + }, + "currencyCode": { + "type": "string", + "description": "Currency code for the value of this transaction.", + "title": "Currency Code", + "x-ms-visibility": "important" + }, + "amount": { + "type": "number", + "format": "float", + "description": "Amount - in the provided currency - that the client is expected to confirm.", + "title": "Amount", + "x-ms-visibility": "important" + }, + "narration": { + "type": "string", + "description": "Short description of the transaction that can be displayed on the clients statement.", + "title": "Narration.", + "x-ms-visibility": "important" + }, + "metadata": { + "type": "object", + "properties": {}, + "description": "metadata" + } + }, + "default": { + "username": "sandbox", + "productName": "TestProduct", + "paymentCard": { + "number": "1234123412341234", + "cvvNumber": 123, + "expiryMonth": 12, + "expiryYear": 2020, + "countryCode": "NG", + "authToken": "1234" + }, + "currencyCode": "KES", + "amount": 100, + "narration": "Sent this amount to you.", + "metadata": {} + }, + "x-ms-visibility": "important", + "required": [ + "username", + "productName", + "paymentCard", + "amount", + "currencyCode", + "narration" + ] + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "description": { + "type": "string", + "description": "description" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/card/checkout/validate": { + "post": { + "summary": "Card Checkout Validate", + "description": "Validate card checkout charge requests.", + "operationId": "CardCheckoutValidate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "transactionId": { + "type": "string", + "description": "The id of the transaction your application wants to validate.", + "title": "Transaction Id", + "x-ms-visibility": "important" + }, + "otp": { + "type": "string", + "description": "A one-time password that was sent to the client that owns the payment card being charged.", + "title": "OTP", + "x-ms-visibility": "important" + } + }, + "default": { + "username": "sandbox", + "transactionId": "transactionId", + "otp": "1234" + }, + "x-ms-visibility": "important", + "required": [ + "otp", + "transactionId", + "username" + ] + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "description": { + "type": "string", + "description": "description" + }, + "checkoutToken": { + "type": "string", + "description": "checkoutToken" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/bank/checkout/validate": { + "post": { + "summary": "Bank Checkout Validate", + "description": "Validate bank checkout charge requests.", + "operationId": "BankCheckoutValidate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "transactionId": { + "type": "string", + "description": "The id of the transaction your application wants to validate.", + "title": "Transaction Id", + "x-ms-visibility": "important" + }, + "otp": { + "type": "string", + "description": "A One Time Password that was sent to the client that owns the bank account being charged.", + "title": "OTP", + "x-ms-visibility": "important" + } + }, + "default": { + "username": "sandbox", + "transactionId": "ATPid_f55d7d8a0853de893cde800d6ac1a826", + "otp": "12345" + }, + "x-ms-visibility": "important", + "required": [ + "otp", + "transactionId", + "username" + ] + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "description" + }, + "status": { + "type": "string", + "description": "status" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/bank/checkout/charge": { + "post": { + "summary": "Bank Checkout", + "description": "Collect money into your payment wallet by initiating transactions that deduct money from a customers bank account.", + "operationId": "BankCheckout", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "productName": { + "type": "string", + "description": "Africa\u2019s Talking Payment Product to initiate this transaction.", + "title": "Product Name", + "x-ms-visibility": "important" + }, + "bankAccount": { + "type": "object", + "properties": { + "accountName": { + "type": "string", + "description": "Bank account name.", + "title": "Account Name", + "x-ms-visibility": "important" + }, + "accountNumber": { + "type": "string", + "description": "Bank account number.", + "title": "Account Number", + "x-ms-visibility": "important" + }, + "bankCode": { + "type": "integer", + "format": "int32", + "description": "6-Digit Integer code for the bank that we allocate.", + "title": "Bank Code", + "x-ms-visibility": "important" + }, + "dateOfBirth": { + "type": "string", + "description": "Date of birth of the account owner (Required for Zenith Nigeria).", + "title": "Date of Birth", + "format": "date-time", + "x-ms-visibility": "advanced" + } + }, + "description": "bankAccount", + "required": [ + "accountName", + "accountNumber", + "bankCode" + ] + }, + "currencyCode": { + "type": "string", + "description": "Currency code for the value of this transaction.", + "title": "Currency Code", + "x-ms-visibility": "important", + "enum": [ + "KES", + "UGX", + "TZS", + "USD" + ] + }, + "amount": { + "type": "number", + "format": "float", + "description": "Amount - in the provided currency - that the client is expected to confirm.", + "title": "Amount", + "x-ms-visibility": "important" + }, + "narration": { + "type": "string", + "description": "Short description of the transaction that can be displayed on the clients statement.", + "title": "Narration", + "x-ms-visibility": "important" + }, + "metadata": { + "type": "object", + "properties": {}, + "description": "metadata" + } + }, + "default": { + "username": "sandbox", + "productName": "TestProduct", + "bankAccount": { + "accountName": "Test Account", + "accountNumber": "1234567890", + "bankCode": 234001, + "dateOfBirth": "1990-12-24" + }, + "currencyCode": "KES", + "amount": 1000, + "narration": "Paid for something", + "metadata": {} + }, + "required": [ + "username", + "productName", + "bankAccount", + "currencyCode", + "amount", + "narration" + ], + "x-ms-visibility": "important" + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "description" + }, + "status": { + "type": "string", + "description": "status" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/query/wallet/fetch": { + "get": { + "summary": "Fetch Wallet Transactions", + "description": "Fetch your wallet transactions.", + "operationId": "FetchWalletTransactions", + "parameters": [ + { + "name": "username", + "in": "query", + "type": "string", + "required": true, + "x-ms-visibility": "important", + "description": "Your application username", + "x-ms-summary": "Username" + }, + { + "name": "pageNumber", + "default": 1, + "in": "query", + "type": "integer", + "required": true, + "format": "int32", + "x-ms-visibility": "advanced", + "description": "The number of the page you\u2019d like to read results from", + "x-ms-summary": "Page Number" + }, + { + "name": "count", + "default": 100, + "in": "query", + "type": "integer", + "required": true, + "format": "int32", + "x-ms-visibility": "advanced", + "description": "The number of transaction results you would like for this query.", + "x-ms-summary": "Count" + }, + { + "name": "startDate", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "format": "", + "description": "Transaction start date you would like to consider in the format YYYY-MM-DD.", + "x-ms-summary": "Start Date" + }, + { + "name": "endDate", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "description": "Transaction end date you would like to consider in the format YYYY-MM-DD", + "x-ms-summary": "End Date" + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "responses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "description" + }, + "balance": { + "type": "string", + "description": "balance" + }, + "date": { + "type": "string", + "description": "date" + }, + "category": { + "type": "string", + "description": "category" + }, + "transactionData": { + "type": "object", + "properties": { + "requestMetadata": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "reason" + } + }, + "description": "requestMetadata" + }, + "sourceType": { + "type": "string", + "description": "sourceType" + }, + "source": { + "type": "string", + "description": "source" + }, + "provider": { + "type": "string", + "description": "provider" + }, + "destinationType": { + "type": "string", + "description": "destinationType" + }, + "description": { + "type": "string", + "description": "description" + }, + "providerChannel": { + "type": "string", + "description": "providerChannel" + }, + "transactionFee": { + "type": "string", + "description": "transactionFee" + }, + "providerRefId": { + "type": "string", + "description": "providerRefId" + }, + "providerMetadata": { + "type": "object", + "properties": { + "recipientIsRegistered": { + "type": "string", + "description": "recipientIsRegistered" + }, + "recipientName": { + "type": "string", + "description": "recipientName" + } + }, + "description": "providerMetadata" + }, + "status": { + "type": "string", + "description": "status" + }, + "productName": { + "type": "string", + "description": "productName" + }, + "category": { + "type": "string", + "description": "category" + }, + "transactionDate": { + "type": "string", + "description": "transactionDate" + }, + "destination": { + "type": "string", + "description": "destination" + }, + "value": { + "type": "string", + "description": "value" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + }, + "creationTime": { + "type": "string", + "description": "creationTime" + } + }, + "description": "transactionData" + }, + "value": { + "type": "string", + "description": "value" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + } + } + }, + "description": "responses" + } + } + } + } + } + } + }, + "/bank/transfer": { + "post": { + "summary": "Bank Transfer", + "description": "Move money from your Payment Wallet to bank accounts.", + "operationId": "BankTransfer", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "productName": { + "type": "string", + "description": "Africa\u2019s Talking Payment product to initiate this transaction.", + "title": "Product Name", + "x-ms-visibility": "important" + }, + "recipients": { + "type": "array", + "items": { + "type": "object", + "properties": { + "bankAccount": { + "type": "object", + "properties": { + "accountName": { + "type": "string", + "description": "Bank account name.", + "title": "Account Name", + "x-ms-visibility": "important" + }, + "accountNumber": { + "type": "string", + "description": "Bank Account Number.", + "title": "Account Number", + "x-ms-visibility": "important" + }, + "bankCode": { + "type": "integer", + "format": "int32", + "description": "6-Digit Integer code for the bank that we allocate.", + "title": "Bank Code", + "x-ms-visibility": "important" + } + }, + "description": "bankAccount", + "required": [ + "accountName", + "accountNumber", + "bankCode" + ] + }, + "dateOfBirth": { + "type": "string", + "description": "Date of birth of the account owner (Required for Zenith Nigeria).", + "title": "Date of Birth", + "x-ms-visibility": "advanced" + }, + "currencyCode": { + "type": "string", + "description": "Currency code for the value of this transaction.", + "title": "Currency Code", + "x-ms-visibility": "important", + "enum": [ + "KES", + "UGX", + "USD", + "TZS" + ] + }, + "amount": { + "type": "number", + "format": "float", + "description": "Amount - in the provided currency - that the client is expected to receive.", + "title": "Amount", + "x-ms-visibility": "important" + }, + "narration": { + "type": "string", + "description": "Short description of the transaction that can be displayed on the clients statement.", + "title": "Narration", + "x-ms-visibility": "important" + }, + "metadata": { + "type": "object", + "properties": {}, + "description": "metadata" + } + }, + "required": [ + "bankAccount", + "currencyCode", + "amount", + "narration" + ] + }, + "description": "recipients" + } + }, + "default": { + "username": "sandbox", + "productName": "TestProduct", + "recipients": [ + { + "bankAccount": { + "accountName": "Test Account Name", + "accountNumber": "1234567890", + "bankCode": 234008 + }, + "dateOfBirth": "1990-21-24", + "currencyCode": "KES", + "amount": 1000, + "narration": "Transfered this amount to an account", + "metadata": {} + } + ] + }, + "x-ms-visibility": "important", + "required": [ + "username", + "productName", + "recipients" + ] + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "entries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountNumber": { + "type": "string", + "description": "accountNumber" + }, + "status": { + "type": "string", + "description": "status" + }, + "transactionFee": { + "type": "string", + "description": "transactionFee" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + } + } + }, + "description": "entries" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/topup/stash": { + "post": { + "summary": "Top Up Stash", + "description": "Move money from a Payment Product to an Africa\u2019s Talking application stash.", + "operationId": "TopUpStash", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "productName": { + "type": "string", + "description": "Africa\u2019s Talking Payment product to initiate this transaction.", + "title": "Product Name", + "x-ms-visibility": "important" + }, + "currencyCode": { + "type": "string", + "description": "Currency code for the value of this transaction", + "title": "Currency Code", + "x-ms-visibility": "important", + "enum": [ + "KES", + "UGX", + "USD", + "TZS" + ] + }, + "amount": { + "type": "number", + "format": "float", + "description": "Amount - in the provided currency - that the application will be topped up with.", + "title": "Amount", + "x-ms-visibility": "important" + }, + "metadata": { + "type": "object", + "properties": {}, + "description": "metadata" + } + }, + "default": { + "username": "sandbox", + "productName": "TestProduct", + "currencyCode": "KES", + "amount": 1000, + "metadata": {} + }, + "required": [ + "username", + "productName", + "currencyCode", + "amount" + ], + "x-ms-visibility": "important" + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "description" + }, + "status": { + "type": "string", + "description": "status" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/query/transaction/fetch": { + "get": { + "summary": "Fetch Product Transactions", + "description": "Fetch transactions of a particular payment product.", + "operationId": "FetchProductTransactions", + "parameters": [ + { + "name": "username", + "in": "query", + "type": "string", + "required": true, + "x-ms-visibility": "important", + "description": "Your application username.", + "x-ms-summary": "Username" + }, + { + "name": "productName", + "in": "query", + "type": "string", + "required": true, + "x-ms-visibility": "important", + "description": "The name of the payment product whose transactions you\u2019d like to fetch.", + "x-ms-summary": "Product Name" + }, + { + "name": "pageNumber", + "default": 1, + "in": "query", + "type": "integer", + "required": true, + "x-ms-visibility": "advanced", + "description": "The number of the page you\u2019d like to read results from.", + "x-ms-summary": "Page Number", + "format": "int32" + }, + { + "name": "count", + "default": 100, + "in": "query", + "type": "integer", + "required": true, + "x-ms-visibility": "advanced", + "x-ms-summary": "Count", + "description": "The number of transaction results you would like for this query.", + "format": "int32" + }, + { + "name": "startDate", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "description": "Transaction start date you would like to consider in the format YYYY-MM-DD", + "x-ms-summary": "Start Date" + }, + { + "name": "endDate", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "description": "Transaction end date you would like to consider in the format YYYY-MM-DD.", + "x-ms-summary": "End Date" + }, + { + "name": "category", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "enum": [ + "BankCheckout", + "CardCheckout", + "MobileCheckout", + "MobileC2B", + "MobileB2C", + "MobileB2B", + "BankTransfer", + "WalletTransfer", + "UserStashTopup" + ], + "description": "Transaction category you would like to consider.", + "x-ms-summary": "Category" + }, + { + "name": "provider", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "enum": [ + "Mpesa", + "Segovia", + "Flutterwave", + "Admin" + ], + "description": "Transaction provider you would like to consider.", + "x-ms-summary": "Provider" + }, + { + "name": "status", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "enum": [ + "Success", + "Failed" + ], + "description": "Transaction status you would like to consider.", + "x-ms-summary": "Status" + }, + { + "name": "source", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "enum": [ + "phoneNumber", + "BankAccount", + "Card", + "Wallet" + ], + "description": "Transaction source you would like to consider.", + "x-ms-summary": "Source" + }, + { + "name": "destination", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "enum": [ + "phoneNumber", + "BankAccount", + "Card", + "Wallet" + ], + "description": "Transaction destination you would like to consider.", + "x-ms-summary": "Destination" + }, + { + "name": "providerChannel", + "in": "query", + "type": "string", + "required": false, + "x-ms-visibility": "advanced", + "description": "Transaction provider channel you would like to consider.", + "x-ms-summary": "Provider Channel" + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "description" + }, + "status": { + "type": "string", + "description": "status" + }, + "responses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "requestMetadata": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "reason" + } + }, + "description": "requestMetadata" + }, + "sourceType": { + "type": "string", + "description": "sourceType" + }, + "source": { + "type": "string", + "description": "source" + }, + "provider": { + "type": "string", + "description": "provider" + }, + "destinationType": { + "type": "string", + "description": "destinationType" + }, + "description": { + "type": "string", + "description": "description" + }, + "providerChannel": { + "type": "string", + "description": "providerChannel" + }, + "transactionFee": { + "type": "string", + "description": "transactionFee" + }, + "providerRefId": { + "type": "string", + "description": "providerRefId" + }, + "providerMetadata": { + "type": "object", + "properties": { + "recipientIsRegistered": { + "type": "string", + "description": "recipientIsRegistered" + }, + "recipientName": { + "type": "string", + "description": "recipientName" + } + }, + "description": "providerMetadata" + }, + "status": { + "type": "string", + "description": "status" + }, + "productName": { + "type": "string", + "description": "productName" + }, + "category": { + "type": "string", + "description": "category" + }, + "transactionDate": { + "type": "string", + "description": "transactionDate" + }, + "destination": { + "type": "string", + "description": "destination" + }, + "value": { + "type": "string", + "description": "value" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + }, + "creationTime": { + "type": "string", + "description": "creationTime" + } + } + }, + "description": "responses" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/query/transaction/find": { + "get": { + "summary": "Find Transaction", + "description": "Find a particular payment transaction.", + "operationId": "FindTransaction", + "parameters": [ + { + "name": "username", + "in": "query", + "type": "string", + "required": true, + "x-ms-visibility": "important", + "description": "Your application username.", + "x-ms-summary": "Username" + }, + { + "name": "transactionId", + "in": "query", + "type": "string", + "required": true, + "x-ms-visibility": "important", + "description": "ID of the transaction you would like to find.", + "x-ms-summary": "Transaction Id" + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "data": { + "type": "object", + "properties": { + "requestMetadata": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "reason" + } + }, + "description": "requestMetadata" + }, + "sourceType": { + "type": "string", + "description": "sourceType" + }, + "source": { + "type": "string", + "description": "source" + }, + "provider": { + "type": "string", + "description": "provider" + }, + "destinationType": { + "type": "string", + "description": "destinationType" + }, + "description": { + "type": "string", + "description": "description" + }, + "providerChannel": { + "type": "string", + "description": "providerChannel" + }, + "transactionFee": { + "type": "string", + "description": "transactionFee" + }, + "providerRefId": { + "type": "string", + "description": "providerRefId" + }, + "providerMetadata": { + "type": "object", + "properties": { + "recipientIsRegistered": { + "type": "string", + "description": "recipientIsRegistered" + }, + "recipientName": { + "type": "string", + "description": "recipientName" + } + }, + "description": "providerMetadata" + }, + "status": { + "type": "string", + "description": "status" + }, + "productName": { + "type": "string", + "description": "productName" + }, + "category": { + "type": "string", + "description": "category" + }, + "transactionDate": { + "type": "string", + "description": "transactionDate" + }, + "destination": { + "type": "string", + "description": "destination" + }, + "value": { + "type": "string", + "description": "value" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + }, + "creationTime": { + "type": "string", + "description": "creationTime" + } + }, + "description": "data" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/mobile/checkout/request": { + "post": { + "summary": "Mobile Checkout", + "description": "Initiate a Customer to Business (C2B) payments on a mobile subscriber\u2019s device.", + "operationId": "MobileCheckout", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "productName": { + "type": "string", + "description": "Your Africa\u2019s Talking Payment product to initiate this transaction.", + "title": "Product Name", + "x-ms-visibility": "important" + }, + "providerChannel": { + "type": "string", + "description": "The provider channel the payment will be initiated from e.g a paybill number.", + "title": "Provider Channel", + "x-ms-visibility": "advanced" + }, + "phoneNumber": { + "type": "string", + "description": "Phone number - in international format - of the client that will complete this transaction.", + "title": "Phone Number", + "x-ms-visibility": "important" + }, + "currencyCode": { + "type": "string", + "description": "Currency code for the value of this transaction.", + "title": "Currency Code", + "x-ms-visibility": "important", + "enum": [ + "KES", + "UGX", + "TZS", + "USD" + ] + }, + "amount": { + "type": "number", + "format": "float", + "description": "Amount - in the provided currency - that the client is expected to confirm.", + "title": "Amount", + "x-ms-visibility": "important" + }, + "metadata": { + "type": "object", + "properties": {}, + "description": "metadata" + } + }, + "default": { + "username": "sandbox", + "productName": "TestProduct", + "providerChannel": "1212", + "phoneNumber": "+254738523316", + "currencyCode": "KES", + "amount": 1000, + "metadata": {} + }, + "required": [ + "username", + "productName", + "phoneNumber", + "currencyCode", + "amount" + ], + "x-ms-visibility": "important" + }, + "required": true, + "x-ms-visibility": "important" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "description" + }, + "providerChannel": { + "type": "string", + "description": "providerChannel" + }, + "status": { + "type": "string", + "description": "status" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/mobile/b2c/request": { + "post": { + "summary": "Mobile B2C (Business to Consumer)", + "description": "Send payments to mobile subscribers from your Payment Wallet.", + "operationId": "MobileB2C", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Your application username.", + "title": "Username", + "x-ms-visibility": "important" + }, + "productName": { + "type": "string", + "description": "Africa\u2019s Talking Payment Product to initiate this transaction.", + "title": "Product Name", + "x-ms-visibility": "important" + }, + "recipients": { + "type": "array", + "items": { + "type": "object", + "properties": { + "phoneNumber": { + "type": "string", + "description": "Phone number of the B2C transaction recipient.", + "title": "Phone Number", + "x-ms-visibility": "important" + }, + "currencyCode": { + "type": "string", + "description": "Currency code for the value of this transaction.", + "title": "Currency Code", + "x-ms-visibility": "important", + "enum": [ + "KES", + "UGX", + "TZS", + "USD" + ] + }, + "amount": { + "type": "number", + "format": "float", + "description": "Amount - in the provided currency - that the client is expected to confirm.", + "title": "Amount", + "x-ms-visibility": "important" + }, + "providerChannel": { + "type": "string", + "description": "The channel the payment will be made from e.g a paybill number.", + "title": "Provider channel" + }, + "reason": { + "type": "string", + "description": "Purpose of the payment.", + "title": "Reason", + "enum": [ + "SalaryPayment", + "SalaryPaymentWithWithdrawalChargePaid", + "BusinessPayment", + "BusinessPaymentWithWithdrawalChargePaid", + "PromotionPayment" + ], + "x-ms-visibility": "advanced" + }, + "name": { + "type": "string", + "description": "Name of the B2C transaction recipient.", + "title": "Name", + "x-ms-visibility": "advanced" + }, + "metadata": { + "type": "object", + "properties": {}, + "description": "metadata" + } + }, + "required": [ + "amount", + "currencyCode", + "phoneNumber" + ] + }, + "description": "recipients" + } + }, + "default": { + "username": "sandbox", + "productName": "TestProduct", + "recipients": [ + { + "phoneNumber": "+254795790363", + "currencyCode": "KES", + "amount": 130, + "providerChannel": "1212", + "reason": "BusinessPayment", + "name": "Recipient_name", + "metadata": {} + }, + { + "phoneNumber": "+254795790363", + "currencyCode": "KES", + "amount": 130, + "providerChannel": "1212", + "reason": "BusinessPayment", + "name": "Recipient_name", + "metadata": {} + } + ] + }, + "required": [ + "username", + "productName", + "recipients" + ] + }, + "required": true + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "type": "object", + "properties": { + "entries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "phoneNumber": { + "type": "string", + "description": "phoneNumber" + }, + "provider": { + "type": "string", + "description": "provider" + }, + "providerChannel": { + "type": "string", + "description": "providerChannel" + }, + "status": { + "type": "string", + "description": "status" + }, + "transactionId": { + "type": "string", + "description": "transactionId" + }, + "value": { + "type": "string", + "description": "value" + }, + "transactionFee": { + "type": "string", + "description": "transactionFee" + } + } + }, + "description": "entries" + }, + "numQueued": { + "type": "integer", + "format": "int32", + "description": "numQueued" + }, + "totalTransactionFee": { + "type": "string", + "description": "totalTransactionFee" + }, + "totalValue": { + "type": "string", + "description": "totalValue" + } + } + } + } + }, + "x-ms-visibility": "important" + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://africastalking.com/payments" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://africastalking.com/privacy_policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Finance" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "apiKey" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/Africa's Talking Payments/apiProperties.json b/certified-connectors/Africa's Talking Payments/apiProperties.json new file mode 100644 index 000000000..517343a83 --- /dev/null +++ b/certified-connectors/Africa's Talking Payments/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#fc9206", + "capabilities": [], + "publisher": "Africa's Talking", + "stackOwner": "Africa's Talking" + } +} \ No newline at end of file From 74991dd2b7fc83fb07119280964a22f0e8b5ad3c Mon Sep 17 00:00:00 2001 From: River <22485304+actual-size@users.noreply.github.com> Date: Fri, 21 Aug 2020 13:03:39 +1000 Subject: [PATCH 021/347] Add Panviva connector --- certified-connectors/Panviva/README.md | 55 + .../Panviva/apiDefinition.swagger.json | 3856 +++++++++++++++++ .../Panviva/apiProperties.json | 23 + 3 files changed, 3934 insertions(+) create mode 100644 certified-connectors/Panviva/README.md create mode 100644 certified-connectors/Panviva/apiDefinition.swagger.json create mode 100644 certified-connectors/Panviva/apiProperties.json diff --git a/certified-connectors/Panviva/README.md b/certified-connectors/Panviva/README.md new file mode 100644 index 000000000..d4cff2b21 --- /dev/null +++ b/certified-connectors/Panviva/README.md @@ -0,0 +1,55 @@ +## Panviva Connector + +Panviva provides a powerful and very extensive REST API. Using this API, you can access and manage knowledge stores in your Panviva instances. This connector allows you to leverage the same knowledge within your application, or in your process automation. + +## Prerequisites + +You will need the following to proceed: + +- A Microsoft Power Apps or Power Automate plan with custom connector feature +- A Panviva subscription +- The Power Platform CLI tools + +## Building the connector + +Since the Panviva APIs are secured, you will need + +1. Access to a Panviva instance (also known as a tenant) +2. A developer account on the Panviva developer portal [https://dev.panviva.com](https://dev.panviva.com) +3. An active Panviva API subscription (also known as an API plan) and valid Panviva API credentials + After that is completed, you can create and test the connector. + +### Deploying the sample + +Run the following commands and follow the prompts: + +```paconn +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json +``` + +## Supported Actions + +The connector supports the following actions: + +- **Search Operations** + - `Search`: Search documents, folders, and files (external documents) for a term and return paginated results + - `Search Artefacts`: Return search results for a given query +- **Live Operations** + - `Live CSH`: Perform a CSH keyword search and present the results on an active user's Panviva client + - `Live Document`: Present a document on an active user's Panviva client + - `Live Search`: Search and present the results on an active user's Panviva client +- **Document Operations** + - `Document`: Return a document using the document ID provided + - `Document Containers`: Return a list of containers using the document ID provided + - `Document Container Relationships`: List parent-child relationships between the containers of a Panviva document + - `Container`: Return a container using the container ID provided + - `Document Translations`: List all translations (per language and locale) of a Panviva document +- **Resource Operations** + - `Artefact`: Return an artefact using the ID provided + - `Artefact Categories`: List all available artefact categories + - `File`: Retrieve a file (external document) from Panviva + - `Folder`: Return information about a Panviva folder and references to each of its direct children + - `Folder Children`: Get all the immediate children of a Panviva folder, not including grandchildren. Children can be folders, documents, or files (external documents) + - `Folder Translations`: Get all the translations of a Panviva folder, along with each translated folders respective children + - `Folder Root`: Get the root/home folder in all of Panviva, which can be drilled into using the Get Folder Children endpoint. Note this endpoint was formerly referred to as the 'Folder Search' endpoint + - `Image`: Retrieve an image from Panviva. Image data is represented as a base64 string diff --git a/certified-connectors/Panviva/apiDefinition.swagger.json b/certified-connectors/Panviva/apiDefinition.swagger.json new file mode 100644 index 000000000..86927fd28 --- /dev/null +++ b/certified-connectors/Panviva/apiDefinition.swagger.json @@ -0,0 +1,3856 @@ +{ + "swagger": "2.0", + "info": { + "title": "Panviva", + "version": "1.0", + "description": "Wouldn't it be great if you could share information seamlessly? This connector allows you to push your knowledge further and consume a complete list of Panviva's API offerings.\n\n**Content APIs** perform resource related operations , e.g. `document`, `folder`, `file`, `container`, `image`.\n\n**Live APIs** enable real-time communications with online users on our client application.\n\n**Artefact APIs** interact with curated Panviva content, created by Digital Orchestrator.", + "contact": { + "name": "Panviva Customer Advocacy Team", + "url": "https://www.panviva.com/support", + "email": "support@panviva.com" + } + }, + "host": "api.panviva.com", + "basePath": "/v3", + "schemes": ["https"], + "consumes": [], + "produces": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.panviva.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.panviva.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Business Management;Productivity" + } + ], + "paths": { + "/{instance}/operations/search": { + "get": { + "description": "Searches documents, folders, and files (external documents) for a term and returns paginated results", + "operationId": "OperationsSearch", + "summary": "Search", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Term", + "name": "term", + "in": "query", + "description": "The word or phrase to be searched for", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Page Offset", + "name": "pageOffset", + "in": "query", + "description": "The pagination offset to denote the number of initial search results to skip. For example, pageOffset of 100 and pageLimit of 10 would return records 101-110.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Page Limit", + "name": "pageLimit", + "in": "query", + "description": "The number of records to return. Must be an integer between 0 and 1000.", + "type": "integer", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetSearchResponse" + }, + "examples": { + "application/json": { + "results": [ + { + "type": "document", + "id": "123", + "name": "Spiderman", + "layout": "topTabsMedium", + "description": "The chronicles of Spiderman", + "classification": "films", + "updatedDate": "2018-05-04T00:00:00Z", + "matchedFields": ["name"], + "snippet": "Spiderman is a superhero", + "language": "en-AU", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/documents/123", + "rel": "document", + "type": "GET" + } + ] + }, + { + "type": "folder", + "id": "32", + "name": "Marvel Trivia", + "description": "All things Marvel", + "matchedFields": ["name"], + "snippet": "Marvel Trivia", + "language": "en-AU", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/32", + "rel": "file", + "type": "GET" + } + ] + }, + { + "type": "file", + "id": "124", + "name": "Spiderman Book", + "fileName": "spiderman-1.pdf", + "description": "A book detailing the history of Spiderman", + "classification": "books", + "updatedDate": "2018-05-04T00:00:00Z", + "matchedFields": ["content", "name", "fileName"], + "snippet": "Spiderman is a hero born in New York", + "language": "en-AU", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/files/124", + "rel": "file", + "type": "GET" + } + ] + } + ], + "total": 57, + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=0&pageLimit=2", + "rel": "first", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=56&pageLimit=2", + "rel": "last", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=2&pageLimit=2", + "rel": "prev", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=6&pageLimit=2", + "rel": "next", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/artefact/nls": { + "get": { + "description": "Return search results for a given query", + "operationId": "OperationsArtefactNls", + "summary": "Search Artefacts", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Simple Query", + "name": "simplequery", + "in": "query", + "description": "Natural language query string. For example: ```Action Movies```. (Note: Use simplequery OR advancedquery, not both.)", + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Advanced Query", + "name": "advancedquery", + "in": "query", + "description": "Query string written in Lucene query syntax. For example: ```films AND \"a story\"```. (Note: Use simplequery OR advancedquery, not both.)", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Filter", + "name": "filter", + "in": "query", + "description": "Accepts a Lucene-formatted filter string. Examples: ```category eq 'Mortgages'```, ```panvivaDocumentVersion gt '8'```. (Filterable fields include dateCreated, dateModified, dateDeleted, categoryJson, queryVariationsJson, title, category, primaryQuery, isDeleted, timestamp, panvivaDocumentId, panvivaDocumentVersion, id)", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Channel", + "name": "channel", + "in": "query", + "description": "Return response for a specific channel, instead of the default", + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Page Offset", + "name": "pageOffset", + "in": "query", + "description": "The pagination offset to denote the number of initial search results to skip. For example, pageOffset of 100 and pageLimit of 10 would return records 101-110.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Page Limit", + "name": "pageLimit", + "in": "query", + "description": "The number of records to return. Must be an integer between 0 and 1000.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Facet", + "name": "facet", + "in": "query", + "description": "Accepts a Lucene-formatted facet string. Examples: ```facet=Category,count:10&facet=Rating```. (Facetable fields include metaData/values)", + "type": "string", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetSearchArtefactResponse" + }, + "examples": { + "application/json": { + "facets": null, + "results": [ + { + "id": "ae18c1ae-dd63-445b-b69a-46d89f8c315c", + "content": [ + { + "mediaType": "text/plain", + "text": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", + "href": null, + "resourceLocation": null + } + ], + "category": { + "name": "Marvel Cinematic Universe", + "id": 1, + "dateCreated": "2018-09-05T04:12:52.83+00:00", + "dateModified": "2018-09-05T04:12:52.83+00:00" + }, + "metaData": { + "Superheroes": { + "values": ["Captain America", "Captain Marvel"], + "dataType": "string" + }, + "Villains": { + "values": ["Thanos"], + "dataType": "string" + } + }, + "searchScore": 0.99844, + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/artefacts/12", + "rel": "artefact", + "type": "GET" + } + ], + "queryVariations": null, + "primaryQuery": "What is the Marvel Cinematic Universe?", + "panvivaDocumentId": 235, + "panvivaDocumentVersion": 5, + "title": "About Marvel Cinematic Universe" + } + ], + "total": 1 + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/csh": { + "post": { + "description": "Present a CSH search result page of the passing query on Panviva client to specified user on Panviva client", + "operationId": "OperationsLiveCsh", + "summary": "Live CSH", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveCshRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveCshRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveCshResponse" + }, + "examples": { + "application/json": null + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/document": { + "post": { + "description": "Present a document page to specified user on Panviva client", + "operationId": "OperationsLiveDocument", + "summary": "Live Document", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveDocumentRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveDocumentRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveDocumentResponse" + }, + "examples": { + "application/json": null + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/search": { + "post": { + "description": "Present a search result page of the passing query on Panviva client to specified user on Panviva client", + "operationId": "OperationsLiveSearch", + "summary": "Live Search", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveSearchRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveSearchRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveSearchResponse" + }, + "examples": { + "application/json": null + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/container/{id}": { + "get": { + "description": "Return a container using the container ID provided", + "operationId": "ResourcesContainerById", + "summary": "Container", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The id of a document container", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetContainerResponse" + }, + "examples": { + "application/json": { + "id": "343-229-1-2", + "name": "Captain America: Civil War", + "body": "
Captain America: Civil War

SupportPoint Image 738

" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}": { + "get": { + "description": "Return a document using the document ID provided", + "operationId": "ResourcesDocumentById", + "summary": "Document", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "A document unique identifier, Document ID. If a document is a translated document, this value represents Internal ID or IID in Panviva API v1.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Version", + "name": "version", + "in": "query", + "description": "Request the API to return a particular version of the specified document.", + "type": "integer", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentResponse" + }, + "examples": { + "application/json": { + "id": "343", + "name": "Marvel Cinematic Universe (Films)", + "description": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", + "version": 229, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective date", + "value": "2018-05-04T00:00:00Z" + } + ], + "hidden": false, + "type": "document", + "release": 33, + "released": true, + "copyright": "Marvel Studios, LLC", + "classification": "films", + "status": "Phase Three", + "percentage": 100, + "releaseDate": "2017-09-09T04:12:52.83Z", + "layout": "leftTabsMedium", + "training": { + "failureFeedback": "Please review the Marvel documentation in document 343", + "forcePageSequence": true, + "forceQuestionSequence": true, + "passingScore": 10, + "successFeedback": "With great power comes great responsibility." + }, + "keywords": [ + "Iron Man", + "Hulk", + "Thor", + "Captain America", + "Avenger", + "Guardians of the Galaxy", + "Ant-Man", + "Doctor Strange", + "Spider-Man", + "Black Panter", + "Captain Marvel" + ], + "cshKeywords": ["Chrome", "MCU"], + "updatedDate": "2017-09-09T04:12:52.83Z", + "createdDate": "2017-08-09T04:02:46.907Z", + "reusableContent": false, + "changeNote": "Added in Captain Marvel", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/document/343/translations", + "rel": "translations", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/resources/document/343/containers", + "rel": "containers", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/artefact/{id}": { + "get": { + "description": "Return an artefact using the ID provided", + "operationId": "ResourcesArtefactById", + "summary": "Artefact", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "Format - uuid. The id (ID) of an artefact", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetResponseResponse" + }, + "examples": { + "application/json": { + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/document/343?version=229", + "rel": "document", + "type": "GET" + } + ], + "title": "About Marvel Cinematic Universe", + "content": [ + { + "mediaType": "text/plain", + "text": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", + "href": null, + "resourceLocation": null + }, + { + "mediaType": "image/jpeg", + "text": null, + "href": "https://terrigen-cdn-dev.marvel.com/content/prod/1x/mi-promo-featured-half-dsk-1140x680.jpg", + "resourceLocation": "external" + } + ], + "variations": [ + { + "content": [ + { + "mediaType": "text/plain", + "text": "The Marvel Cinematic Universe is a shared universe that is centered on a series of superhero films.", + "href": null, + "resourceLocation": null + } + ], + "channels": [ + { + "name": "Amazon Alexa" + } + ], + "id": 2, + "dateCreated": "2018-09-10T04:12:52.83+00:00", + "dateModified": "2018-09-10T04:12:52.83+00:00" + } + ], + "category": { + "name": "Marvel Cinematic Universe", + "id": 1, + "dateCreated": "2018-09-05T04:12:52.83+00:00", + "dateModified": "2018-09-05T04:12:52.83+00:00" + }, + "primaryQuery": "What is the Marvel Cinematic Universe?", + "queryVariations": [ + { + "id": 12, + "query": "What is MCU?" + } + ], + "panvivaDocumentId": 235, + "panvivaDocumentVersion": 5, + "metaData": { + "Superheroes": { + "values": ["Captain America", "Captain Marvel"], + "dataType": "string" + }, + "Villains": { + "values": ["Thanos"], + "dataType": "string" + } + }, + "id": "ae18c1ae-dd63-445b-b69a-46d89f8c315c", + "dateCreated": "2018-09-09T04:12:52.83+00:00", + "dateModified": "2018-09-10T04:12:52.83+00:00" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}/containers": { + "get": { + "description": "Return a list of containers using the document ID provided", + "operationId": "ResourcesDocumentByIdContainers", + "summary": "Document Containers", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentContainersResponse" + }, + "examples": { + "application/json": { + "containers": [ + { + "id": "343-229-0-0", + "name": "Phase Three", + "body": null + }, + { + "id": "343-229-1-2", + "name": "Captain America: Civil War", + "body": "
Captain America: Civil War

SupportPoint Image 738

" + }, + { + "id": "343-229-3-4", + "name": "Doctor Strange", + "body": "
Doctor Strange

Mr. Doctor?

" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}/containers/relationships": { + "get": { + "description": "Return a list of the parent-child relationship between each container for the document ID provided", + "operationId": "ResourcesDocumentByIdContainersRelationships", + "summary": "Document Container Relationships", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentContainerRelationshipsResponse" + }, + "examples": { + "application/json": { + "relationships": [ + { + "id": "343-229-0-0", + "parent": null, + "children": ["343-229-1-2", "343-229-3-4"], + "taskFlow": null + }, + { + "id": "343-229-1-2", + "parent": "343-229-0-0", + "children": null, + "taskFlow": null + }, + { + "id": "343-229-3-4", + "parent": "343-229-0-0", + "children": null, + "taskFlow": null + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + } + } + }, + "/{instance}/resources/document/{id}/translations": { + "get": { + "description": "Return a list of all translations (per language and locale) of a Panviva document", + "operationId": "ResourcesDocumentByIdTranslations", + "summary": "Document Translations", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document.", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentTranslationsResponse" + }, + "examples": { + "application/json": { + "translations": [ + { + "id": "568", + "name": "Univers cinématographique Marvel. (Films)", + "description": "Marvel Cinematic Universe (MCU) est une franchise de médias américains et un univers partagé centré sur une série de films de super héros.", + "version": 52, + "language": "fr-FR", + "tags": [ + { + "name": "Rang", + "value": "2" + }, + { + "name": "Date effective", + "value": "2018-05-04T00:00:00Z" + } + ], + "hidden": false, + "type": "document", + "release": 23, + "released": true, + "copyright": "Marvel Studios, LLC", + "classification": "films", + "status": "Phase Trois", + "percentage": 100, + "releaseDate": "2017-09-09T04:12:52.83Z", + "layout": "leftTabsMedium", + "training": { + "failureFeedback": "Veuillez consulter la documentation Marvel dans le document 343", + "forcePageSequence": true, + "forceQuestionSequence": true, + "passingScore": 10, + "successFeedback": "Un grand pouvoir implique de grandes responsabilités" + }, + "keywords": [ + "Iron Man", + "Hulk", + "Thor", + "Captain America", + "Avenger", + "Guardians of the Galaxy", + "Ant-Man", + "Doctor Strange", + "Spider-Man", + "Black Panter", + "Captain Marvel" + ], + "cshKeywords": ["Chrome", "MCU"], + "updatedDate": "2017-09-09T04:12:52.83Z", + "createdDate": "2017-08-09T04:02:46.907Z", + "reusableContent": false, + "changeNote": "Added in Captain Marvel", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/document/568/translations", + "rel": "translations", + "type": "GET" + } + ] + } + ], + "origin": "343" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/file/{id}": { + "get": { + "description": "Returns a file (external document) from Panviva", + "operationId": "ResourcesFileById", + "summary": "File", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva file (external document)", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFileResponse" + }, + "examples": { + "application/json": { + "id": "file", + "name": "A to Z in Marvel Comic Series", + "description": "Contains details of all featured series.", + "version": 2, + "language": "en-AU", + "tags": [ + { + "name": "custom-category", + "value": "MVU-10" + } + ], + "hidden": false, + "type": "file", + "content": "JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9DcmVhdG9yIChNb3ppbGxhLzUuMCBcKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NFwpIEFwcGxlV2ViS2l0LzUzNy4zNiBcKEtIVE1MLCBsaWtlIEdlY2tvXCkgQ2hyb21lLzcxLjAuMzU3OC45OCBTYWZhcmkvNTM3LjM2KQovUHJvZHVjZXIgKFNraWEvUERGIG03MSkKL0NyZWF0aW9uRGF0ZSAoRDoyMDE5MDEzMDA1NTM0NyswMCcwMCcpCi9Nb2REYXRlIChEOjIwMTkwMTMwMDU1MzQ3KzAwJzAw ...................................... CBuIAowMDAwMzgwMzI0IDAwMDAwIG4gCjAwMDAzODA1NDQgMDAwMDAgbiAKMDAwMDM4MDc2NyAwMDAwMCBuIAowMDAwMzgwOTg2IDAwMDAwIG4gCjAwMDAzODEyMDYgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDEwNwovUm9vdCAxOSAwIFIKL0luZm8gMSAwIFI+PgpzdGFydHhyZWYKMzgxNDIzCiUlRU9G", + "fileName": "A to Z in Marvel Comic Series.pdf", + "release": 2, + "released": true, + "copyright": "public domain", + "classification": "general", + "status": "released", + "percentage": 100, + "releaseDate": "2019-01-30T17:00:53.563Z", + "keywords": ["general info", "series"], + "cshKeywords": ["series"], + "changeNote": "Uploaded linked document.", + "updatedDate": "2019-01-30T17:00:53.563Z", + "createdDate": "2019-01-30T16:54:51.637Z" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/folder/{id}": { + "get": { + "description": "Return information about a Panviva folder and references to each of its direct children", + "operationId": "ResourcesFolderById", + "summary": "Folder", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderResponse" + }, + "examples": { + "application/json": { + "id": "342", + "name": "the films", + "description": "Films that make a grown man squeal by the memories of his childhood.", + "version": 10, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/342/children", + "rel": "children", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/342/translations", + "rel": "translations", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/{id}/children": { + "get": { + "description": "Gets all the immediate children of a Panviva folder, not including grandchildren. Children can be folders, documents, or files (external documents)", + "operationId": "ResourcesFolderByIdChildren", + "summary": "Folder Children", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderChildrenResponse" + }, + "examples": { + "application/json": { + "children": [ + { + "id": "84374", + "name": "Infinity stones", + "description": "All information relating to Marvel's infinity stones.", + "version": 1, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": true, + "type": "folder", + "links": null + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/{id}/translations": { + "get": { + "description": "Gets all the translations of a Panviva folder, along with each translated folders respective children", + "operationId": "ResourcesFolderByIdTranslations", + "summary": "Folder Translations", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderTranslationsResponse" + }, + "examples": { + "application/json": { + "translations": [ + { + "id": "84374", + "name": "die Filme", + "description": "Filme, die einen erwachsenen Mann durch die Erinnerungen an seine Kindheit zum Quietschen bringen.", + "version": 1, + "language": "de-DE", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/translations", + "rel": "translations", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/children", + "rel": "children", + "type": "GET" + } + ] + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/root": { + "get": { + "description": "Gets the root/home folder in all of Panviva, which can be drilled into using the Get Folder Children endpoint. Note this endpoint was formerly referred to as the 'Folder Search' endpoint", + "operationId": "ResourcesFolderRoot", + "summary": "Folder Root", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderRootResponse" + }, + "examples": { + "application/json": { + "id": "1", + "name": "Home", + "description": "The Home folder of Panviva", + "version": 8, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/translations", + "rel": "translations", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/children", + "rel": "children", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/image/{id}": { + "get": { + "description": "Returns an image from Panviva. Image data is represented as a base64 string", + "operationId": "ResourcesImageById", + "summary": "Image", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The id of a Panviva image", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetImageResponse" + }, + "examples": { + "application/json": { + "id": "627", + "name": "avengers-marvel-marvel-comics", + "width": 128, + "height": 128, + "size": 12311, + "contentType": "image/png", + "content": "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAC+sSURBVHhe7Xz3nxRl1u/90+7n3sh/tkrt4vFHyBAXgASfwuuzLg0LCJTeB7wp3ccA/yRs8O8I82DPvwjswME71psv ...................................... Y/zniEzcr3ZXrg2s9fxSz495H+/l9MgF9ZMtUoAbnc5Pev+qvCDq+EQ1OTAJik5xC+bXoE+LOH9tEc+QQwvIVhyxqce6crjvCNWPVz2zkCmmN8VnAEp+KNgEtRpuAFqNNQIvRJqDFaBPQYrQJaDHaBLQYbQJajDYBLUabgBajTUCL0SagxWgT0GK0CWgx2gS0GG0CWow2AS1Gm4AWo01Ai9EmoMVoE9BitAloMdoEtBhtAlqMNgEtRpuAFqNNQIvRJqDFaBPQYrQJaCkk6f8DK/JmX1NVAtQAAAAASUVORK5CYII=" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/artefactcategory": { + "get": { + "description": "Gets a list of all available artefact categories", + "operationId": "ResourcesArtefactCategoriesGet", + "summary": "Get Artefact Categories", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetArtefactCategoriesResponse" + }, + "examples": { + "application/json": { + "categories": [ + { + "id": 1, + "categoryName": "Marvel Cinematic Universe" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + }, + "post": { + "description": "Creates a category for classifying artefacts", + "operationId": "ResourcesArtefactCategoryPost", + "summary": "Create Artefact Category", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postArtefactCategoryRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostArtefactCategoryRequest" + }, + "description": "JSON object containing the category name" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "201": { + "description": "Success", + "schema": { + "$ref": "#/definitions/PostArtefactCategoryResponse" + }, + "examples": { + "application/json": { + "categoryId": 1, + "categoryName": "Marvel Cinematic Universe" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + } + }, + "definitions": { + "Link": { + "type": "object", + "properties": { + "href": { + "type": "string" + }, + "rel": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "ResourceSearchResult": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "matchedFields": { + "type": "array", + "items": { + "type": "string" + } + }, + "snippet": { + "type": "string" + }, + "language": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetSearchResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourceSearchResult" + } + }, + "total": { + "type": "integer" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "StringInt64NullableKeyValuePair": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int64", + "type": "integer", + "readOnly": true + } + } + }, + "Facet": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/definitions/StringInt64NullableKeyValuePair" + } + } + } + }, + "ResponseSection": { + "type": "object", + "properties": { + "mediaType": { + "type": "string" + }, + "text": { + "type": "string" + }, + "href": { + "type": "string" + }, + "resourceLocation": { + "type": "string" + } + } + }, + "Category": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "MetaDataValueDetails": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "dataType": { + "type": "string" + } + } + }, + "QueryVariation": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "query": { + "type": "string" + } + } + }, + "SearchResult": { + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "category": { + "$ref": "#/definitions/Category" + }, + "metaData": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MetaDataValueDetails" + } + }, + "searchScore": { + "type": "number" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + }, + "queryVariations": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryVariation" + } + }, + "primaryQuery": { + "type": "string" + }, + "panvivaDocumentId": { + "type": "integer" + }, + "panvivaDocumentVersion": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "GetSearchArtefactResponse": { + "type": "object", + "properties": { + "facets": { + "type": "array", + "items": { + "$ref": "#/definitions/Facet" + } + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/SearchResult" + } + }, + "total": { + "type": "integer" + } + } + }, + "PostLiveCshRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "query": { + "description": "The CSH term to search for.", + "type": "string" + }, + "showFirstResult": { + "description": "True to immediately open the first document found, or false to show the list of results.", + "type": "boolean" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + } + } + }, + "PostLiveCshResponse": { + "type": "object" + }, + "PostLiveDocumentRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "id": { + "description": "The Document ID of the Panviva Document you wish to send.", + "type": "string" + }, + "location": { + "description": "The Section ID you would like the user to see, when the specified document is opened.", + "type": "string" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + } + } + }, + "PostLiveDocumentResponse": { + "type": "object" + }, + "PostLiveSearchRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "query": { + "description": "The term to search for.", + "type": "string" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + }, + "showFirstResult": { + "description": "True to immediately open the first document found, or false to show the list of results.", + "type": "boolean" + } + } + }, + "PostLiveSearchResponse": { + "type": "object" + }, + "GetContainerResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "Training": { + "type": "object", + "properties": { + "failureFeedback": { + "type": "string" + }, + "forcePageSequence": { + "type": "boolean" + }, + "forceQuestionSequence": { + "type": "boolean" + }, + "passingScore": { + "type": "integer" + }, + "successFeedback": { + "type": "string" + } + } + }, + "GetDocumentResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "layout": { + "type": "string" + }, + "training": { + "$ref": "#/definitions/Training" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "reusableContent": { + "type": "boolean" + }, + "changeNote": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "Channel": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "ResponseVariation": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/definitions/Channel" + } + }, + "id": { + "type": "integer" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "GetResponseResponse": { + "type": "object", + "properties": { + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + }, + "title": { + "type": "string" + }, + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "variations": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseVariation" + } + }, + "category": { + "$ref": "#/definitions/Category" + }, + "primaryQuery": { + "type": "string" + }, + "queryVariations": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryVariation" + } + }, + "panvivaDocumentId": { + "type": "integer" + }, + "panvivaDocumentVersion": { + "type": "integer" + }, + "metaData": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MetaDataValueDetails" + } + }, + "id": { + "format": "uuid", + "type": "string" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "Container": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "GetDocumentContainersResponse": { + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "$ref": "#/definitions/Container" + } + } + } + }, + "ContainerRelationship": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "parent": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "type": "string" + } + }, + "taskFlow": { + "type": "string" + } + } + }, + "GetDocumentContainerRelationshipsResponse": { + "type": "object", + "properties": { + "relationships": { + "type": "array", + "items": { + "$ref": "#/definitions/ContainerRelationship" + } + } + } + }, + "Document": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "layout": { + "type": "string" + }, + "training": { + "$ref": "#/definitions/Training" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "reusableContent": { + "type": "boolean" + }, + "changeNote": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetDocumentTranslationsResponse": { + "type": "object", + "properties": { + "translations": { + "type": "array", + "items": { + "$ref": "#/definitions/Document" + } + }, + "origin": { + "type": "string" + } + } + }, + "GetFileResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "content": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "changeNote": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + } + } + }, + "GetFolderResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "Resource": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "GetFolderChildrenResponse": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/Resource" + } + } + } + }, + "Folder": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetFolderTranslationsResponse": { + "type": "object", + "properties": { + "translations": { + "type": "array", + "items": { + "$ref": "#/definitions/Folder" + } + } + } + }, + "GetFolderRootResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetImageResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "content": { + "type": "string" + } + } + }, + "ArtefactCategory": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "categoryName": { + "type": "string" + } + } + }, + "GetArtefactCategoriesResponse": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/definitions/ArtefactCategory" + } + } + } + }, + "PostArtefactCategoryRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "PostArtefactCategoryResponse": { + "type": "object", + "properties": { + "categoryId": { + "type": "integer" + }, + "categoryName": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "apiKeyHeader": { + "type": "apiKey", + "name": "Ocp-Apim-Subscription-Key", + "in": "header" + } + }, + "security": [ + { + "apiKeyHeader": [] + } + ], + "tags": [] +} diff --git a/certified-connectors/Panviva/apiProperties.json b/certified-connectors/Panviva/apiProperties.json new file mode 100644 index 000000000..ea80802d0 --- /dev/null +++ b/certified-connectors/Panviva/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "Panviva API Subscription Key", + "description": "The Panviva API Subscription Key for your instance.", + "tooltip": "The Panviva API Subscription Key for your instance. Get yours at https://dev.panviva.com.", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#265174", + "capabilities": [], + "publisher": "Panviva", + "stackOwner": "Panviva" + } +} From 85d1605c0d5c38805e4f391d12484697c05d71dc Mon Sep 17 00:00:00 2001 From: amancdk <35783172+amancdk@users.noreply.github.com> Date: Sat, 22 Aug 2020 00:40:05 +0530 Subject: [PATCH 022/347] Cdk service vehicles (#392) * Initial commit for the CDK Drive Service Vehicle connector * Adding allowed categories * Adding allowed categories * Fixing support URL * Removing the support url * Removing the support url * Removing privacy policy * Adding back privacy policy * fixing review comments * updating icon background color * updating icon and some metadata info * Update apiDefinition.swagger.json --- .../CDK Drive Service Vehicles/apiDefinition.swagger.json | 6 +++--- .../CDK Drive Service Vehicles/apiProperties.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json b/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json index 34a9d93a8..bc3d7fb93 100644 --- a/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json +++ b/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json @@ -3,7 +3,7 @@ "info": { "title": "CDK Drive Service Vehicles", "version": "1.0", - "description": "# CDK Drive - Service - Vehicles\nAssociates identification, type, status, and customer information about a vehicle.\n\n# What does this API do?\nThe API will allow you to create, update, query, and retrieve service domain vehicle information in CDK Drive. \n\n# Intended Audience\nVehicle is a dependency for Service Appointment and Service Repair Order workflows. \n", + "description": "CDK Drive Service Vehicles Associates identification, type, status, and customer information about a vehicle. The API will allow you to create, update, query, and retrieve service domain vehicle information in CDK.", "contact": { "name": "CDK Global", "url": "https://serviceconnect.support.cdk.com", @@ -488,7 +488,7 @@ "x-ms-connector-metadata": [ { "propertyName": "Website", - "propertyValue": "https://apidocs.fortellis.io/specs/54b70ee1-ac17-4be2-9314-45c947692c5d" + "propertyValue": "https://fortellis.io" }, { "propertyName": "Privacy policy", @@ -925,4 +925,4 @@ } ], "tags": [] -} \ No newline at end of file +} diff --git a/certified-connectors/CDK Drive Service Vehicles/apiProperties.json b/certified-connectors/CDK Drive Service Vehicles/apiProperties.json index 53794553c..73c7ec621 100644 --- a/certified-connectors/CDK Drive Service Vehicles/apiProperties.json +++ b/certified-connectors/CDK Drive Service Vehicles/apiProperties.json @@ -1,7 +1,7 @@ { "properties": { "connectionParameters": {}, - "iconBrandColor": "#f8f8f8", + "iconBrandColor": "#000000", "capabilities": [], "publisher": "CDK Global", "stackOwner": "CDK Global" From 44b90ebf802d6a256d6c7ea8b4b4b0ee512d4837 Mon Sep 17 00:00:00 2001 From: River <22485304+actual-size@users.noreply.github.com> Date: Sat, 22 Aug 2020 09:35:14 +1000 Subject: [PATCH 023/347] Add Panviva connector (#395) --- certified-connectors/Panviva/README.md | 55 + .../Panviva/apiDefinition.swagger.json | 3856 +++++++++++++++++ .../Panviva/apiProperties.json | 23 + 3 files changed, 3934 insertions(+) create mode 100644 certified-connectors/Panviva/README.md create mode 100644 certified-connectors/Panviva/apiDefinition.swagger.json create mode 100644 certified-connectors/Panviva/apiProperties.json diff --git a/certified-connectors/Panviva/README.md b/certified-connectors/Panviva/README.md new file mode 100644 index 000000000..d4cff2b21 --- /dev/null +++ b/certified-connectors/Panviva/README.md @@ -0,0 +1,55 @@ +## Panviva Connector + +Panviva provides a powerful and very extensive REST API. Using this API, you can access and manage knowledge stores in your Panviva instances. This connector allows you to leverage the same knowledge within your application, or in your process automation. + +## Prerequisites + +You will need the following to proceed: + +- A Microsoft Power Apps or Power Automate plan with custom connector feature +- A Panviva subscription +- The Power Platform CLI tools + +## Building the connector + +Since the Panviva APIs are secured, you will need + +1. Access to a Panviva instance (also known as a tenant) +2. A developer account on the Panviva developer portal [https://dev.panviva.com](https://dev.panviva.com) +3. An active Panviva API subscription (also known as an API plan) and valid Panviva API credentials + After that is completed, you can create and test the connector. + +### Deploying the sample + +Run the following commands and follow the prompts: + +```paconn +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json +``` + +## Supported Actions + +The connector supports the following actions: + +- **Search Operations** + - `Search`: Search documents, folders, and files (external documents) for a term and return paginated results + - `Search Artefacts`: Return search results for a given query +- **Live Operations** + - `Live CSH`: Perform a CSH keyword search and present the results on an active user's Panviva client + - `Live Document`: Present a document on an active user's Panviva client + - `Live Search`: Search and present the results on an active user's Panviva client +- **Document Operations** + - `Document`: Return a document using the document ID provided + - `Document Containers`: Return a list of containers using the document ID provided + - `Document Container Relationships`: List parent-child relationships between the containers of a Panviva document + - `Container`: Return a container using the container ID provided + - `Document Translations`: List all translations (per language and locale) of a Panviva document +- **Resource Operations** + - `Artefact`: Return an artefact using the ID provided + - `Artefact Categories`: List all available artefact categories + - `File`: Retrieve a file (external document) from Panviva + - `Folder`: Return information about a Panviva folder and references to each of its direct children + - `Folder Children`: Get all the immediate children of a Panviva folder, not including grandchildren. Children can be folders, documents, or files (external documents) + - `Folder Translations`: Get all the translations of a Panviva folder, along with each translated folders respective children + - `Folder Root`: Get the root/home folder in all of Panviva, which can be drilled into using the Get Folder Children endpoint. Note this endpoint was formerly referred to as the 'Folder Search' endpoint + - `Image`: Retrieve an image from Panviva. Image data is represented as a base64 string diff --git a/certified-connectors/Panviva/apiDefinition.swagger.json b/certified-connectors/Panviva/apiDefinition.swagger.json new file mode 100644 index 000000000..86927fd28 --- /dev/null +++ b/certified-connectors/Panviva/apiDefinition.swagger.json @@ -0,0 +1,3856 @@ +{ + "swagger": "2.0", + "info": { + "title": "Panviva", + "version": "1.0", + "description": "Wouldn't it be great if you could share information seamlessly? This connector allows you to push your knowledge further and consume a complete list of Panviva's API offerings.\n\n**Content APIs** perform resource related operations , e.g. `document`, `folder`, `file`, `container`, `image`.\n\n**Live APIs** enable real-time communications with online users on our client application.\n\n**Artefact APIs** interact with curated Panviva content, created by Digital Orchestrator.", + "contact": { + "name": "Panviva Customer Advocacy Team", + "url": "https://www.panviva.com/support", + "email": "support@panviva.com" + } + }, + "host": "api.panviva.com", + "basePath": "/v3", + "schemes": ["https"], + "consumes": [], + "produces": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.panviva.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.panviva.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Business Management;Productivity" + } + ], + "paths": { + "/{instance}/operations/search": { + "get": { + "description": "Searches documents, folders, and files (external documents) for a term and returns paginated results", + "operationId": "OperationsSearch", + "summary": "Search", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Term", + "name": "term", + "in": "query", + "description": "The word or phrase to be searched for", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Page Offset", + "name": "pageOffset", + "in": "query", + "description": "The pagination offset to denote the number of initial search results to skip. For example, pageOffset of 100 and pageLimit of 10 would return records 101-110.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Page Limit", + "name": "pageLimit", + "in": "query", + "description": "The number of records to return. Must be an integer between 0 and 1000.", + "type": "integer", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetSearchResponse" + }, + "examples": { + "application/json": { + "results": [ + { + "type": "document", + "id": "123", + "name": "Spiderman", + "layout": "topTabsMedium", + "description": "The chronicles of Spiderman", + "classification": "films", + "updatedDate": "2018-05-04T00:00:00Z", + "matchedFields": ["name"], + "snippet": "Spiderman is a superhero", + "language": "en-AU", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/documents/123", + "rel": "document", + "type": "GET" + } + ] + }, + { + "type": "folder", + "id": "32", + "name": "Marvel Trivia", + "description": "All things Marvel", + "matchedFields": ["name"], + "snippet": "Marvel Trivia", + "language": "en-AU", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/32", + "rel": "file", + "type": "GET" + } + ] + }, + { + "type": "file", + "id": "124", + "name": "Spiderman Book", + "fileName": "spiderman-1.pdf", + "description": "A book detailing the history of Spiderman", + "classification": "books", + "updatedDate": "2018-05-04T00:00:00Z", + "matchedFields": ["content", "name", "fileName"], + "snippet": "Spiderman is a hero born in New York", + "language": "en-AU", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/files/124", + "rel": "file", + "type": "GET" + } + ] + } + ], + "total": 57, + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=0&pageLimit=2", + "rel": "first", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=56&pageLimit=2", + "rel": "last", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=2&pageLimit=2", + "rel": "prev", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=6&pageLimit=2", + "rel": "next", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/artefact/nls": { + "get": { + "description": "Return search results for a given query", + "operationId": "OperationsArtefactNls", + "summary": "Search Artefacts", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Simple Query", + "name": "simplequery", + "in": "query", + "description": "Natural language query string. For example: ```Action Movies```. (Note: Use simplequery OR advancedquery, not both.)", + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Advanced Query", + "name": "advancedquery", + "in": "query", + "description": "Query string written in Lucene query syntax. For example: ```films AND \"a story\"```. (Note: Use simplequery OR advancedquery, not both.)", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Filter", + "name": "filter", + "in": "query", + "description": "Accepts a Lucene-formatted filter string. Examples: ```category eq 'Mortgages'```, ```panvivaDocumentVersion gt '8'```. (Filterable fields include dateCreated, dateModified, dateDeleted, categoryJson, queryVariationsJson, title, category, primaryQuery, isDeleted, timestamp, panvivaDocumentId, panvivaDocumentVersion, id)", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Channel", + "name": "channel", + "in": "query", + "description": "Return response for a specific channel, instead of the default", + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Page Offset", + "name": "pageOffset", + "in": "query", + "description": "The pagination offset to denote the number of initial search results to skip. For example, pageOffset of 100 and pageLimit of 10 would return records 101-110.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Page Limit", + "name": "pageLimit", + "in": "query", + "description": "The number of records to return. Must be an integer between 0 and 1000.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Facet", + "name": "facet", + "in": "query", + "description": "Accepts a Lucene-formatted facet string. Examples: ```facet=Category,count:10&facet=Rating```. (Facetable fields include metaData/values)", + "type": "string", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetSearchArtefactResponse" + }, + "examples": { + "application/json": { + "facets": null, + "results": [ + { + "id": "ae18c1ae-dd63-445b-b69a-46d89f8c315c", + "content": [ + { + "mediaType": "text/plain", + "text": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", + "href": null, + "resourceLocation": null + } + ], + "category": { + "name": "Marvel Cinematic Universe", + "id": 1, + "dateCreated": "2018-09-05T04:12:52.83+00:00", + "dateModified": "2018-09-05T04:12:52.83+00:00" + }, + "metaData": { + "Superheroes": { + "values": ["Captain America", "Captain Marvel"], + "dataType": "string" + }, + "Villains": { + "values": ["Thanos"], + "dataType": "string" + } + }, + "searchScore": 0.99844, + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/artefacts/12", + "rel": "artefact", + "type": "GET" + } + ], + "queryVariations": null, + "primaryQuery": "What is the Marvel Cinematic Universe?", + "panvivaDocumentId": 235, + "panvivaDocumentVersion": 5, + "title": "About Marvel Cinematic Universe" + } + ], + "total": 1 + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/csh": { + "post": { + "description": "Present a CSH search result page of the passing query on Panviva client to specified user on Panviva client", + "operationId": "OperationsLiveCsh", + "summary": "Live CSH", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveCshRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveCshRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveCshResponse" + }, + "examples": { + "application/json": null + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/document": { + "post": { + "description": "Present a document page to specified user on Panviva client", + "operationId": "OperationsLiveDocument", + "summary": "Live Document", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveDocumentRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveDocumentRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveDocumentResponse" + }, + "examples": { + "application/json": null + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/search": { + "post": { + "description": "Present a search result page of the passing query on Panviva client to specified user on Panviva client", + "operationId": "OperationsLiveSearch", + "summary": "Live Search", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveSearchRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveSearchRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveSearchResponse" + }, + "examples": { + "application/json": null + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/container/{id}": { + "get": { + "description": "Return a container using the container ID provided", + "operationId": "ResourcesContainerById", + "summary": "Container", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The id of a document container", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetContainerResponse" + }, + "examples": { + "application/json": { + "id": "343-229-1-2", + "name": "Captain America: Civil War", + "body": "
Captain America: Civil War

SupportPoint Image 738

" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}": { + "get": { + "description": "Return a document using the document ID provided", + "operationId": "ResourcesDocumentById", + "summary": "Document", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "A document unique identifier, Document ID. If a document is a translated document, this value represents Internal ID or IID in Panviva API v1.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Version", + "name": "version", + "in": "query", + "description": "Request the API to return a particular version of the specified document.", + "type": "integer", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentResponse" + }, + "examples": { + "application/json": { + "id": "343", + "name": "Marvel Cinematic Universe (Films)", + "description": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", + "version": 229, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective date", + "value": "2018-05-04T00:00:00Z" + } + ], + "hidden": false, + "type": "document", + "release": 33, + "released": true, + "copyright": "Marvel Studios, LLC", + "classification": "films", + "status": "Phase Three", + "percentage": 100, + "releaseDate": "2017-09-09T04:12:52.83Z", + "layout": "leftTabsMedium", + "training": { + "failureFeedback": "Please review the Marvel documentation in document 343", + "forcePageSequence": true, + "forceQuestionSequence": true, + "passingScore": 10, + "successFeedback": "With great power comes great responsibility." + }, + "keywords": [ + "Iron Man", + "Hulk", + "Thor", + "Captain America", + "Avenger", + "Guardians of the Galaxy", + "Ant-Man", + "Doctor Strange", + "Spider-Man", + "Black Panter", + "Captain Marvel" + ], + "cshKeywords": ["Chrome", "MCU"], + "updatedDate": "2017-09-09T04:12:52.83Z", + "createdDate": "2017-08-09T04:02:46.907Z", + "reusableContent": false, + "changeNote": "Added in Captain Marvel", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/document/343/translations", + "rel": "translations", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/resources/document/343/containers", + "rel": "containers", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/artefact/{id}": { + "get": { + "description": "Return an artefact using the ID provided", + "operationId": "ResourcesArtefactById", + "summary": "Artefact", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "Format - uuid. The id (ID) of an artefact", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetResponseResponse" + }, + "examples": { + "application/json": { + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/document/343?version=229", + "rel": "document", + "type": "GET" + } + ], + "title": "About Marvel Cinematic Universe", + "content": [ + { + "mediaType": "text/plain", + "text": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", + "href": null, + "resourceLocation": null + }, + { + "mediaType": "image/jpeg", + "text": null, + "href": "https://terrigen-cdn-dev.marvel.com/content/prod/1x/mi-promo-featured-half-dsk-1140x680.jpg", + "resourceLocation": "external" + } + ], + "variations": [ + { + "content": [ + { + "mediaType": "text/plain", + "text": "The Marvel Cinematic Universe is a shared universe that is centered on a series of superhero films.", + "href": null, + "resourceLocation": null + } + ], + "channels": [ + { + "name": "Amazon Alexa" + } + ], + "id": 2, + "dateCreated": "2018-09-10T04:12:52.83+00:00", + "dateModified": "2018-09-10T04:12:52.83+00:00" + } + ], + "category": { + "name": "Marvel Cinematic Universe", + "id": 1, + "dateCreated": "2018-09-05T04:12:52.83+00:00", + "dateModified": "2018-09-05T04:12:52.83+00:00" + }, + "primaryQuery": "What is the Marvel Cinematic Universe?", + "queryVariations": [ + { + "id": 12, + "query": "What is MCU?" + } + ], + "panvivaDocumentId": 235, + "panvivaDocumentVersion": 5, + "metaData": { + "Superheroes": { + "values": ["Captain America", "Captain Marvel"], + "dataType": "string" + }, + "Villains": { + "values": ["Thanos"], + "dataType": "string" + } + }, + "id": "ae18c1ae-dd63-445b-b69a-46d89f8c315c", + "dateCreated": "2018-09-09T04:12:52.83+00:00", + "dateModified": "2018-09-10T04:12:52.83+00:00" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}/containers": { + "get": { + "description": "Return a list of containers using the document ID provided", + "operationId": "ResourcesDocumentByIdContainers", + "summary": "Document Containers", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentContainersResponse" + }, + "examples": { + "application/json": { + "containers": [ + { + "id": "343-229-0-0", + "name": "Phase Three", + "body": null + }, + { + "id": "343-229-1-2", + "name": "Captain America: Civil War", + "body": "
Captain America: Civil War

SupportPoint Image 738

" + }, + { + "id": "343-229-3-4", + "name": "Doctor Strange", + "body": "
Doctor Strange

Mr. Doctor?

" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}/containers/relationships": { + "get": { + "description": "Return a list of the parent-child relationship between each container for the document ID provided", + "operationId": "ResourcesDocumentByIdContainersRelationships", + "summary": "Document Container Relationships", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentContainerRelationshipsResponse" + }, + "examples": { + "application/json": { + "relationships": [ + { + "id": "343-229-0-0", + "parent": null, + "children": ["343-229-1-2", "343-229-3-4"], + "taskFlow": null + }, + { + "id": "343-229-1-2", + "parent": "343-229-0-0", + "children": null, + "taskFlow": null + }, + { + "id": "343-229-3-4", + "parent": "343-229-0-0", + "children": null, + "taskFlow": null + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + } + } + }, + "/{instance}/resources/document/{id}/translations": { + "get": { + "description": "Return a list of all translations (per language and locale) of a Panviva document", + "operationId": "ResourcesDocumentByIdTranslations", + "summary": "Document Translations", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document.", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentTranslationsResponse" + }, + "examples": { + "application/json": { + "translations": [ + { + "id": "568", + "name": "Univers cinématographique Marvel. (Films)", + "description": "Marvel Cinematic Universe (MCU) est une franchise de médias américains et un univers partagé centré sur une série de films de super héros.", + "version": 52, + "language": "fr-FR", + "tags": [ + { + "name": "Rang", + "value": "2" + }, + { + "name": "Date effective", + "value": "2018-05-04T00:00:00Z" + } + ], + "hidden": false, + "type": "document", + "release": 23, + "released": true, + "copyright": "Marvel Studios, LLC", + "classification": "films", + "status": "Phase Trois", + "percentage": 100, + "releaseDate": "2017-09-09T04:12:52.83Z", + "layout": "leftTabsMedium", + "training": { + "failureFeedback": "Veuillez consulter la documentation Marvel dans le document 343", + "forcePageSequence": true, + "forceQuestionSequence": true, + "passingScore": 10, + "successFeedback": "Un grand pouvoir implique de grandes responsabilités" + }, + "keywords": [ + "Iron Man", + "Hulk", + "Thor", + "Captain America", + "Avenger", + "Guardians of the Galaxy", + "Ant-Man", + "Doctor Strange", + "Spider-Man", + "Black Panter", + "Captain Marvel" + ], + "cshKeywords": ["Chrome", "MCU"], + "updatedDate": "2017-09-09T04:12:52.83Z", + "createdDate": "2017-08-09T04:02:46.907Z", + "reusableContent": false, + "changeNote": "Added in Captain Marvel", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/document/568/translations", + "rel": "translations", + "type": "GET" + } + ] + } + ], + "origin": "343" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/file/{id}": { + "get": { + "description": "Returns a file (external document) from Panviva", + "operationId": "ResourcesFileById", + "summary": "File", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva file (external document)", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFileResponse" + }, + "examples": { + "application/json": { + "id": "file", + "name": "A to Z in Marvel Comic Series", + "description": "Contains details of all featured series.", + "version": 2, + "language": "en-AU", + "tags": [ + { + "name": "custom-category", + "value": "MVU-10" + } + ], + "hidden": false, + "type": "file", + "content": "JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9DcmVhdG9yIChNb3ppbGxhLzUuMCBcKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NFwpIEFwcGxlV2ViS2l0LzUzNy4zNiBcKEtIVE1MLCBsaWtlIEdlY2tvXCkgQ2hyb21lLzcxLjAuMzU3OC45OCBTYWZhcmkvNTM3LjM2KQovUHJvZHVjZXIgKFNraWEvUERGIG03MSkKL0NyZWF0aW9uRGF0ZSAoRDoyMDE5MDEzMDA1NTM0NyswMCcwMCcpCi9Nb2REYXRlIChEOjIwMTkwMTMwMDU1MzQ3KzAwJzAw ...................................... CBuIAowMDAwMzgwMzI0IDAwMDAwIG4gCjAwMDAzODA1NDQgMDAwMDAgbiAKMDAwMDM4MDc2NyAwMDAwMCBuIAowMDAwMzgwOTg2IDAwMDAwIG4gCjAwMDAzODEyMDYgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDEwNwovUm9vdCAxOSAwIFIKL0luZm8gMSAwIFI+PgpzdGFydHhyZWYKMzgxNDIzCiUlRU9G", + "fileName": "A to Z in Marvel Comic Series.pdf", + "release": 2, + "released": true, + "copyright": "public domain", + "classification": "general", + "status": "released", + "percentage": 100, + "releaseDate": "2019-01-30T17:00:53.563Z", + "keywords": ["general info", "series"], + "cshKeywords": ["series"], + "changeNote": "Uploaded linked document.", + "updatedDate": "2019-01-30T17:00:53.563Z", + "createdDate": "2019-01-30T16:54:51.637Z" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/folder/{id}": { + "get": { + "description": "Return information about a Panviva folder and references to each of its direct children", + "operationId": "ResourcesFolderById", + "summary": "Folder", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderResponse" + }, + "examples": { + "application/json": { + "id": "342", + "name": "the films", + "description": "Films that make a grown man squeal by the memories of his childhood.", + "version": 10, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/342/children", + "rel": "children", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/342/translations", + "rel": "translations", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/{id}/children": { + "get": { + "description": "Gets all the immediate children of a Panviva folder, not including grandchildren. Children can be folders, documents, or files (external documents)", + "operationId": "ResourcesFolderByIdChildren", + "summary": "Folder Children", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderChildrenResponse" + }, + "examples": { + "application/json": { + "children": [ + { + "id": "84374", + "name": "Infinity stones", + "description": "All information relating to Marvel's infinity stones.", + "version": 1, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": true, + "type": "folder", + "links": null + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/{id}/translations": { + "get": { + "description": "Gets all the translations of a Panviva folder, along with each translated folders respective children", + "operationId": "ResourcesFolderByIdTranslations", + "summary": "Folder Translations", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderTranslationsResponse" + }, + "examples": { + "application/json": { + "translations": [ + { + "id": "84374", + "name": "die Filme", + "description": "Filme, die einen erwachsenen Mann durch die Erinnerungen an seine Kindheit zum Quietschen bringen.", + "version": 1, + "language": "de-DE", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/translations", + "rel": "translations", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/children", + "rel": "children", + "type": "GET" + } + ] + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/root": { + "get": { + "description": "Gets the root/home folder in all of Panviva, which can be drilled into using the Get Folder Children endpoint. Note this endpoint was formerly referred to as the 'Folder Search' endpoint", + "operationId": "ResourcesFolderRoot", + "summary": "Folder Root", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderRootResponse" + }, + "examples": { + "application/json": { + "id": "1", + "name": "Home", + "description": "The Home folder of Panviva", + "version": 8, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/translations", + "rel": "translations", + "type": "GET" + }, + { + "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/children", + "rel": "children", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/image/{id}": { + "get": { + "description": "Returns an image from Panviva. Image data is represented as a base64 string", + "operationId": "ResourcesImageById", + "summary": "Image", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The id of a Panviva image", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetImageResponse" + }, + "examples": { + "application/json": { + "id": "627", + "name": "avengers-marvel-marvel-comics", + "width": 128, + "height": 128, + "size": 12311, + "contentType": "image/png", + "content": "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAC+sSURBVHhe7Xz3nxRl1u/90+7n3sh/tkrt4vFHyBAXgASfwuuzLg0LCJTeB7wp3ccA/yRs8O8I82DPvwjswME71psv ...................................... Y/zniEzcr3ZXrg2s9fxSz495H+/l9MgF9ZMtUoAbnc5Pev+qvCDq+EQ1OTAJik5xC+bXoE+LOH9tEc+QQwvIVhyxqce6crjvCNWPVz2zkCmmN8VnAEp+KNgEtRpuAFqNNQIvRJqDFaBPQYrQJaDHaBLQYbQJajDYBLUabgBajTUCL0SagxWgT0GK0CWgx2gS0GG0CWow2AS1Gm4AWo01Ai9EmoMVoE9BitAloMdoEtBhtAlqMNgEtRpuAFqNNQIvRJqDFaBPQYrQJaCkk6f8DK/JmX1NVAtQAAAAASUVORK5CYII=" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/artefactcategory": { + "get": { + "description": "Gets a list of all available artefact categories", + "operationId": "ResourcesArtefactCategoriesGet", + "summary": "Get Artefact Categories", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetArtefactCategoriesResponse" + }, + "examples": { + "application/json": { + "categories": [ + { + "id": 1, + "categoryName": "Marvel Cinematic Universe" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + }, + "post": { + "description": "Creates a category for classifying artefacts", + "operationId": "ResourcesArtefactCategoryPost", + "summary": "Create Artefact Category", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postArtefactCategoryRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostArtefactCategoryRequest" + }, + "description": "JSON object containing the category name" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "201": { + "description": "Success", + "schema": { + "$ref": "#/definitions/PostArtefactCategoryResponse" + }, + "examples": { + "application/json": { + "categoryId": 1, + "categoryName": "Marvel Cinematic Universe" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan’s rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + } + }, + "definitions": { + "Link": { + "type": "object", + "properties": { + "href": { + "type": "string" + }, + "rel": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "ResourceSearchResult": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "matchedFields": { + "type": "array", + "items": { + "type": "string" + } + }, + "snippet": { + "type": "string" + }, + "language": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetSearchResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourceSearchResult" + } + }, + "total": { + "type": "integer" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "StringInt64NullableKeyValuePair": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int64", + "type": "integer", + "readOnly": true + } + } + }, + "Facet": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/definitions/StringInt64NullableKeyValuePair" + } + } + } + }, + "ResponseSection": { + "type": "object", + "properties": { + "mediaType": { + "type": "string" + }, + "text": { + "type": "string" + }, + "href": { + "type": "string" + }, + "resourceLocation": { + "type": "string" + } + } + }, + "Category": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "MetaDataValueDetails": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "dataType": { + "type": "string" + } + } + }, + "QueryVariation": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "query": { + "type": "string" + } + } + }, + "SearchResult": { + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "category": { + "$ref": "#/definitions/Category" + }, + "metaData": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MetaDataValueDetails" + } + }, + "searchScore": { + "type": "number" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + }, + "queryVariations": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryVariation" + } + }, + "primaryQuery": { + "type": "string" + }, + "panvivaDocumentId": { + "type": "integer" + }, + "panvivaDocumentVersion": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "GetSearchArtefactResponse": { + "type": "object", + "properties": { + "facets": { + "type": "array", + "items": { + "$ref": "#/definitions/Facet" + } + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/SearchResult" + } + }, + "total": { + "type": "integer" + } + } + }, + "PostLiveCshRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "query": { + "description": "The CSH term to search for.", + "type": "string" + }, + "showFirstResult": { + "description": "True to immediately open the first document found, or false to show the list of results.", + "type": "boolean" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + } + } + }, + "PostLiveCshResponse": { + "type": "object" + }, + "PostLiveDocumentRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "id": { + "description": "The Document ID of the Panviva Document you wish to send.", + "type": "string" + }, + "location": { + "description": "The Section ID you would like the user to see, when the specified document is opened.", + "type": "string" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + } + } + }, + "PostLiveDocumentResponse": { + "type": "object" + }, + "PostLiveSearchRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "query": { + "description": "The term to search for.", + "type": "string" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + }, + "showFirstResult": { + "description": "True to immediately open the first document found, or false to show the list of results.", + "type": "boolean" + } + } + }, + "PostLiveSearchResponse": { + "type": "object" + }, + "GetContainerResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "Training": { + "type": "object", + "properties": { + "failureFeedback": { + "type": "string" + }, + "forcePageSequence": { + "type": "boolean" + }, + "forceQuestionSequence": { + "type": "boolean" + }, + "passingScore": { + "type": "integer" + }, + "successFeedback": { + "type": "string" + } + } + }, + "GetDocumentResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "layout": { + "type": "string" + }, + "training": { + "$ref": "#/definitions/Training" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "reusableContent": { + "type": "boolean" + }, + "changeNote": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "Channel": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "ResponseVariation": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/definitions/Channel" + } + }, + "id": { + "type": "integer" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "GetResponseResponse": { + "type": "object", + "properties": { + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + }, + "title": { + "type": "string" + }, + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "variations": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseVariation" + } + }, + "category": { + "$ref": "#/definitions/Category" + }, + "primaryQuery": { + "type": "string" + }, + "queryVariations": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryVariation" + } + }, + "panvivaDocumentId": { + "type": "integer" + }, + "panvivaDocumentVersion": { + "type": "integer" + }, + "metaData": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MetaDataValueDetails" + } + }, + "id": { + "format": "uuid", + "type": "string" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "Container": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "GetDocumentContainersResponse": { + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "$ref": "#/definitions/Container" + } + } + } + }, + "ContainerRelationship": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "parent": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "type": "string" + } + }, + "taskFlow": { + "type": "string" + } + } + }, + "GetDocumentContainerRelationshipsResponse": { + "type": "object", + "properties": { + "relationships": { + "type": "array", + "items": { + "$ref": "#/definitions/ContainerRelationship" + } + } + } + }, + "Document": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "layout": { + "type": "string" + }, + "training": { + "$ref": "#/definitions/Training" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "reusableContent": { + "type": "boolean" + }, + "changeNote": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetDocumentTranslationsResponse": { + "type": "object", + "properties": { + "translations": { + "type": "array", + "items": { + "$ref": "#/definitions/Document" + } + }, + "origin": { + "type": "string" + } + } + }, + "GetFileResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "content": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "changeNote": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + } + } + }, + "GetFolderResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "Resource": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "GetFolderChildrenResponse": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/Resource" + } + } + } + }, + "Folder": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetFolderTranslationsResponse": { + "type": "object", + "properties": { + "translations": { + "type": "array", + "items": { + "$ref": "#/definitions/Folder" + } + } + } + }, + "GetFolderRootResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetImageResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "content": { + "type": "string" + } + } + }, + "ArtefactCategory": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "categoryName": { + "type": "string" + } + } + }, + "GetArtefactCategoriesResponse": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/definitions/ArtefactCategory" + } + } + } + }, + "PostArtefactCategoryRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "PostArtefactCategoryResponse": { + "type": "object", + "properties": { + "categoryId": { + "type": "integer" + }, + "categoryName": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "apiKeyHeader": { + "type": "apiKey", + "name": "Ocp-Apim-Subscription-Key", + "in": "header" + } + }, + "security": [ + { + "apiKeyHeader": [] + } + ], + "tags": [] +} diff --git a/certified-connectors/Panviva/apiProperties.json b/certified-connectors/Panviva/apiProperties.json new file mode 100644 index 000000000..ea80802d0 --- /dev/null +++ b/certified-connectors/Panviva/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "Panviva API Subscription Key", + "description": "The Panviva API Subscription Key for your instance.", + "tooltip": "The Panviva API Subscription Key for your instance. Get yours at https://dev.panviva.com.", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#265174", + "capabilities": [], + "publisher": "Panviva", + "stackOwner": "Panviva" + } +} From ea3d56383257c3bacb6e84e0454435f55452d1e5 Mon Sep 17 00:00:00 2001 From: David Rosmon <49154541+workpoint-dar@users.noreply.github.com> Date: Sat, 22 Aug 2020 01:36:47 +0200 Subject: [PATCH 024/347] WorkPoint connector (#382) * Initial connector open sourcing * Add to CODEOWNERS * Remove from CODEOWNERS --- certified-connectors/WorkPoint/README.md | 7 + .../WorkPoint/apiDefinition.swagger.json | 2369 +++++++++++++++++ .../WorkPoint/apiProperties.json | 47 + 3 files changed, 2423 insertions(+) create mode 100644 certified-connectors/WorkPoint/README.md create mode 100644 certified-connectors/WorkPoint/apiDefinition.swagger.json create mode 100644 certified-connectors/WorkPoint/apiProperties.json diff --git a/certified-connectors/WorkPoint/README.md b/certified-connectors/WorkPoint/README.md new file mode 100644 index 000000000..db10725e4 --- /dev/null +++ b/certified-connectors/WorkPoint/README.md @@ -0,0 +1,7 @@ +### Connector intro + +The WorkPoint Connector is WorkPoint’s integration to the Power platform. To use this integration, users must have an active WorkPoint 365 solution with the integration feature activated. If you don’t have an active WorkPoint 365 solution and want to learn more, please visit [WorkPoint](https://www.workpoint365.com) + +For further information about the WorkPoint connector, please visit our knowledgebase: [WorkPoint Connector](https://support.workpoint.dk/hc/en-us/articles/360011957799) + +If you experience any issues with the Power connector, please contact WorkPoint Support. diff --git a/certified-connectors/WorkPoint/apiDefinition.swagger.json b/certified-connectors/WorkPoint/apiDefinition.swagger.json new file mode 100644 index 000000000..7130d0636 --- /dev/null +++ b/certified-connectors/WorkPoint/apiDefinition.swagger.json @@ -0,0 +1,2369 @@ +{ + "basePath": "/", + "consumes": [ + "application/json" + ], + "definitions": { + "WorkPoint365.WebAPI.Model.Action": { + "type": "object", + "properties": { + "Title": { + "type": "string", + "x-ms-summary": "Action title", + "description": "The Title of the Action" + }, + "Id": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "Unique action id", + "description": "The Id of the Action" + } + } + }, + "WorkPoint365.WebAPI.Model.Trigger": { + "type": "object", + "properties": { + "Title": { + "type": "string", + "x-ms-summary": "Trigger title", + "description": "The Title of the Trigger" + }, + "Id": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "Unique trigger id", + "description": "The Id of the Trigger" + } + } + }, + "WorkPoint365.WebAPI.Model.BusinessModuleOnline": { + "type": "object", + "properties": { + "Title": { + "description": "The title of the business module", + "type": "string" + }, + "EntityName": { + "description": "The name of a single entity (typical a singular expression)", + "type": "string" + }, + "Template": { + "format": "int32", + "description": "The business module template", + "type": "integer" + }, + "Category": { + "format": "int32", + "description": "The category used to set entity move behaviour. It is only possible to move entities of same category across business modules", + "type": "integer" + }, + "Parent": { + "format": "uuid", + "description": "The parent business module", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000" + }, + "ParentRelationName": { + "description": "The parent field name", + "type": "string" + }, + "SitesEnabled": { + "description": "The value indicating whether sites are enabled", + "type": "boolean" + }, + "IconUrl": { + "description": "The business module icon url", + "type": "string" + }, + "EnableEMMIntegration": { + "description": "The value indicating if EMM is enabled", + "type": "boolean" + }, + "Id": { + "format": "uuid", + "description": "The business module identifier", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000" + } + } + }, + "WorkPoint365.WebAPI.Model.Document.ConvertToPdfAndSaveOutputParameter": { + "required": [ + "DocumentSiteUrl", + "DocumentUrl", + "OutputSiteUrl", + "OutputUrl", + "OutputExistsBehaviour" + ], + "type": "object", + "properties": { + "DocumentSiteUrl": { + "type": "string", + "x-ms-summary": "absolute document site URL", + "description": "The absolute url of the site where the document is saved", + "x-ms-visibility": "important" + }, + "DocumentUrl": { + "type": "string", + "x-ms-summary": "Absolute document URL", + "description": "The absolute url of the document to be converted to pdf", + "x-ms-visibility": "important" + }, + "OutputSiteUrl": { + "type": "string", + "x-ms-summary": "Absolute output site URL", + "description": "The absolute url of the site where the output document should be saved", + "x-ms-visibility": "important" + }, + "OutputUrl": { + "type": "string", + "x-ms-summary": "Absolute output URL", + "description": "The url of the location where the converted pdf should be saved", + "x-ms-visibility": "important" + }, + "OutputExistsBehaviour": { + "enum": [ "Cancel", "Overwrite", "Rename" ], + "type": "string", + "x-ms-summary": "Override behaviour", + "description": "The override behaviour", + "x-ms-visibility": "important" + }, + "PdfFormat": { + "x-ms-summary": "PdfFormat", + "description": "The PDF conversion format. If not specified the default PDF format will be used", + "enum": [ "PDF_A_1A", "PDF_A_1B", "PDF_A_2A", "PDF_A_3A", "PDF_A_2B", "PDF_A_2U", "PDF_A_3B", "PDF_A_3U", "PDF_v_1_3", "PDF_v_1_4", "PDF_v_1_5", "PDF_v_1_6", "PDF_v_1_7", "PDF_UA_1", "PDF_X_1A", "PDF_X_3" ], + "type": "string" + } + } + }, + "WorkPoint365.WebAPI.Model.Document.DigitalSignatureCreateLogEntryForTransactionParameter": { + "required": [ + "TransactionID", + "SigningProvider", + "BusinessModuleID", + "EntityID", + "TotalSigningCount", + "TotalAppendixCount" + ], + "type": "object", + "properties": { + "TransactionID": { + "type": "string", + "x-ms-summary": "Transaction id", + "description": "The transaction id", + "x-ms-visibility": "important" + }, + "SigningProvider": { + "enum": [ "Penneo", "Visma", "DocuSign", "AdobeSign", "Other" ], + "type": "string", + "x-ms-summary": "Signing provider", + "description": "The signing provider", + "x-ms-visibility": "important" + }, + "LogTitle": { + "type": "string", + "x-ms-summary": "Log title", + "description": "The log title", + "x-ms-visibility": "important" + }, + "LogDescription": { + "type": "string", + "x-ms-summary": "Log description", + "description": "The log description.", + "x-ms-visibility": "important" + }, + "BusinessModuleID": { + "type": "string", + "x-ms-summary": "Business module id", + "description": "The business module id", + "x-ms-visibility": "important", + "title": "Business module id", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + "EntityID": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Entity id", + "description": "The entity id", + "x-ms-visibility": "important" + }, + "TotalSigningCount": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Total signing count", + "description": "The total signing count", + "x-ms-visibility": "important" + }, + "TotalAppendixCount": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Total appendix count", + "description": "The total appendix count", + "x-ms-visibility": "important" + } + + } + }, + "WorkPoint365.WebAPI.Model.Document.DigitalSignatureAddDocumentToTransactionParameter": { + "required": [ + "TransactionID", + "DocumentSiteUrl", + "DocumentUrl", + "SigningSetPropertiesBehaviour", + "SigningDeclareAsRecordBehaviour", + "SigningType" + ], + "type": "object", + "properties": { + "TransactionID": { + "type": "string", + "x-ms-summary": "Transaction id", + "description": "The transaction id", + "x-ms-visibility": "important" + }, + "DocumentSiteUrl": { + "type": "string", + "x-ms-summary": "Absolute document site url", + "description": "The absolute site url of where the document is saved", + "x-ms-visibility": "important" + }, + "DocumentUrl": { + "type": "string", + "x-ms-summary": "Absolute document url", + "description": "The absolute document url", + "x-ms-visibility": "important" + }, + "SigningSetPropertiesBehaviour": { + "enum": [ "IgnoreErrors", "ReturnOnErrors" ], + "type": "string", + "x-ms-summary": "Signing properties behaviour", + "description": "The signing properties behaviour", + "x-ms-visibility": "important" + }, + "SigningDeclareAsRecordBehaviour": { + "enum": [ "DoNotDeclare", "DeclareOriginalDocument", "DeclarePdf", "DeclareOriginalDocumentAndPdf" ], + "type": "string", + "x-ms-summary": "Record declaration setting", + "description": "The record declaration setting", + "x-ms-visibility": "important" + }, + "SigningType": { + "enum": [ "StandardSigning", "Appendix" ], + "type": "string", + "x-ms-summary": "Signing type", + "description": "The signing type", + "x-ms-visibility": "important" + }, + "PdfFormat": { + "x-ms-summary": "PdfFormat", + "description": "The PDF conversion format. If not specified the default PDF format will be used", + "enum": [ "PDF_A_1A", "PDF_A_1B", "PDF_A_2A", "PDF_A_3A", "PDF_A_2B", "PDF_A_2U", "PDF_A_3B", "PDF_A_3U", "PDF_v_1_3", "PDF_v_1_4", "PDF_v_1_5", "PDF_v_1_6", "PDF_v_1_7", "PDF_UA_1", "PDF_X_1A", "PDF_X_3" ], + "type": "string" + } + } + }, + "WorkPoint365.WebAPI.Model.Document.DigitalSignatureAddDocumentToTransactionReturnValue": { + "required": [ + "PdfUrl", + "PdfServerRelativeUrl", + "Errors" + ], + "type": "object", + "properties": { + "PdfUrl": { + "type": "string", + "x-ms-summary": "Pdf url", + "description": "Pdf url", + "x-ms-visibility": "important" + }, + "PdfServerRelativeUrl": { + "type": "string", + "x-ms-summary": "Pdf server relative url", + "description": "Pdf server relative url", + "x-ms-visibility": "important" + }, + "Errors": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureError" + }, + "x-ms-summary": "A collection of errors", + "description": "A collection of errors", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.Document.DigitalSignatureError": { + "required": [ + "ErrorType", + "Text" + ], + "type": "object", + "properties": { + "ErrorType": { + "enum": [ "LogEntryNotFound", "SetPropertyError", "DeclareOriginalDocumentAsRecordError", "DeclarePdfFileAsRecordError", "DeclareAppendixFileAsRecordError", "UndeclareOriginalDocumentAsRecordError", "UndeclarePdfFileAsRecordError", "UndeclareAppendixFileAsRecordError", "IllegalSigningStatus", "FileNotFoundInLog", "MultipleFilesFoundInLog", "DocumentHasAlreadyBeenAdded", "DocumentAlreadySigned", "DocumentAlreadyApproved", "PdfFileIsCheckedOut", "FileDoesNotExistsInSharePoint" ], + "type": "string", + "x-ms-summary": "Error type", + "description": "Error type", + "x-ms-visibility": "important" + }, + "Text": { + "type": "string", + "x-ms-summary": "Text", + "description": "Text", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.Document.DigitalSignatureCompleteDocumentInTransactionParameter": { + "required": [ + "TransactionID", + "FileName", + "SignedPdfBytes", + "SigningStatus", + "UndeclareOriginalDocumentOrAppendixFileAsRecord" + ], + "type": "object", + "properties": { + "TransactionID": { + "type": "string", + "x-ms-summary": "Transaction id", + "description": "The transaction id", + "x-ms-visibility": "important" + }, + "FileName": { + "type": "string", + "x-ms-summary": "File name", + "description": "The file name with extension to complete", + "x-ms-visibility": "important" + }, + "SignedPdfBytes": { + "format": "binary", + "type": "string", + "x-ms-summary": "Signed PDF bytes", + "description": "The PDF document bytes", + "x-ms-visibility": "important" + }, + "SigningStatus": { + "enum": [ "InProgress", "Signed", "Approved", "Cancelled", "Rejected", "Failed" ], + "type": "string", + "x-ms-summary": "Signing status", + "description": "The signing status", + "x-ms-visibility": "important" + }, + "Message": { + "type": "string", + "x-ms-summary": "Message", + "description": "An optional message", + "x-ms-visibility": "important" + }, + "UndeclareOriginalDocumentOrAppendixFileAsRecord": { + "type": "boolean", + "x-ms-summary": "Document undeclaration behaviour", + "description": "The document undeclaration behaviour. If set to true, the original document is undeclared as record", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.Document.DigitalSignatureBase64CompleteDocumentInTransactionParameter": { + "required": [ + "TransactionID", + "FileName", + "SignedPdfBase64String", + "SigningStatus", + "UndeclareOriginalDocumentOrAppendixFileAsRecord" + ], + "type": "object", + "properties": { + "TransactionID": { + "type": "string", + "x-ms-summary": "Transaction id", + "description": "The transaction id", + "x-ms-visibility": "important" + }, + "FileName": { + "type": "string", + "x-ms-summary": "File name", + "description": "The file name with extension to complete", + "x-ms-visibility": "important" + }, + "SignedPdfBase64String": { + "type": "string", + "x-ms-summary": "Base64 PDF document", + "description": "The PDF document as a base64 string", + "x-ms-visibility": "important" + }, + "SigningStatus": { + "enum": [ "InProgress", "Signed", "Approved", "Cancelled", "Rejected", "Failed" ], + "type": "string", + "x-ms-summary": "Signing status", + "description": "The signing status", + "x-ms-visibility": "important" + }, + "Message": { + "type": "string", + "x-ms-summary": "Message", + "description": "An optional message", + "x-ms-visibility": "important" + }, + "UndeclareOriginalDocumentOrAppendixFileAsRecord": { + "type": "boolean", + "x-ms-summary": "Document undeclaration behaviour", + "description": "The document undeclaration behaviour. If set to true, the original document is undeclared as record", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.Document.DigitalSignatureGenerateXwsseHeaderParameter": { + "required": [ + "UserName", + "Password" + ], + "type": "object", + "properties": { + "UserName": { + "description": "User name", + "x-ms-summary": "User name", + "type": "string", + "x-ms-visibility": "important" + }, + "Password": { + "description": "Password", + "x-ms-summary": "Password", + "type": "string", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.MoveEntityParameter": { + "required": [ + "SourceEntityListID", + "SourceEntityID", + "TargetEntityListID", + "TargetEntityContentTypeID", + "ValidateOnly", + "IncludeProgressLogInResult", + "RunAsJob" + ], + "type": "object", + "properties": { + "SourceEntityListID": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "The source entity list id", + "description": "The source entity list id", + "x-ms-visibility": "important", + "title": "The source entity list id", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + "SourceEntityID": { + "format": "int32", + "type": "integer", + "x-ms-summary": "The source entity id", + "description": "The source entity id", + "x-ms-visibility": "important" + }, + "TargetEntityListID": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "Target entity list id", + "description": "Target entity list id", + "x-ms-visibility": "important", + "title": "Target entity list id", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + "TargetEntityContentTypeID": { + "type": "string", + "x-ms-summary": "Target entity content type id", + "description": "Target entity content type id", + "x-ms-visibility": "important" + }, + "ValidateOnly": { + "type": "boolean", + "x-ms-summary": "Validate only", + "description": "Value indicating whether validate only", + "x-ms-visibility": "important" + }, + "IncludeProgressLogInResult": { + "type": "boolean", + "x-ms-summary": "Include progress log", + "description": "Value indicating whether to include progress log in result", + "x-ms-visibility": "important" + }, + "RunAsJob": { + "type": "boolean", + "x-ms-summary": "Run as job", + "description": "Value indicating whether to run as job", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.MoveEntityResult": { + "required": [ + "Ok", + "Errors", + "Warnings", + "ProgressLog" + ], + "type": "object", + "properties": { + "Ok": { + "type": "boolean", + "x-ms-summary": "MoveEntityResult ok", + "description": "Value indicating whether MoveEntityResult is ok", + "x-ms-visibility": "important" + }, + "Errors": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Errors", + "description": "Errors.", + "x-ms-visibility": "important" + }, + "Warnings": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Warnings", + "description": "Warnings", + "x-ms-visibility": "important" + }, + "ProgressLog": { + "type": "string", + "x-ms-summary": "Progress Log", + "description": "Progress Log", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.MailMergeHtmlResult": { + "required": [ + "Html", + "Subject", + "ErrorMessages" + ], + "type": "object", + "properties": { + "Html": { + "type": "string", + "x-ms-summary": "HTML", + "description": "The HTML.", + "x-ms-visibility": "important" + }, + "Subject": { + "type": "string", + "x-ms-summary": "Subject", + "description": "The Subject.", + "x-ms-visibility": "important" + }, + "ErrorMessages": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Error messages", + "description": "The error messages.", + "x-ms-visibility": "important" + }, + "Ok": { + "type": "boolean", + "readOnly": true, + "x-ms-summary": "MailMergeHtmlResult ok", + "description": "Gets a value indicating whether MailMergeHtmlResult is ok.", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.MailMergeDocumentResult": { + "required": [ + "Html", + "Bytes", + "FileName", + "Subject", + "ErrorMessages" + ], + "type": "object", + "properties": { + "Html": { + "type": "string", + "x-ms-summary": "HTML", + "description": "The HTML", + "x-ms-visibility": "important" + }, + "Bytes": { + "format": "byte", + "type": "string", + "x-ms-summary": "Bytes", + "description": "The document bytes", + "x-ms-visibility": "important" + }, + "FileName": { + "type": "string", + "x-ms-summary": "Filename", + "description": "The Filename", + "x-ms-visibility": "important" + }, + "Subject": { + "type": "string", + "x-ms-summary": "Subject", + "description": "The Subject", + "x-ms-visibility": "important" + }, + "ErrorMessages": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Error messages", + "description": "The error messages", + "x-ms-visibility": "important" + }, + "Ok": { + "type": "boolean", + "readOnly": true, + "x-ms-summary": "MailMergeDocumentResult ok", + "description": "Gets a value indicating whether MailMergeDocumentResult is ok.", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.ChangeStageParameter": { + "required": [ + "EntityListId", + "EntityItemId", + "StageId", + "OverrideConstraints", + "OverrideRequiredFields" + ], + "type": "object", + "properties": { + "EntityListId": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "Entity list id", + "description": "The id of the entity list", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + "EntityItemId": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Entity item id", + "description": "The id of the entity item", + "x-ms-visibility": "important" + }, + "StageId": { + "type": "string", + "x-ms-summary": "Stage id", + "description": "The id for the content type (stage) to change to", + "x-ms-visibility": "important" + }, + "OverrideConstraints": { + "enum": [ "NoOverride", "OverrideWarnings", "OverrideErrors", "OverrideWarningsAndErrors" ], + "type": "string", + "x-ms-summary": "Stage contraints behaviour", + "description": "Stage contraints behaviour", + "x-ms-visibility": "important" + }, + "OverrideRequiredFields": { + "type": "boolean", + "x-ms-summary": "Override required fields", + "description": "If true, it is accepted that required fields does not have a value", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter": { + "type": "object", + "properties": { + "Entity": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter.EntityInfo" + }, + "Library": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter.LibraryInfo" + }, + "Documents": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter.DocumentInfo" + } + } + } + }, + "WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter.DocumentInfo": { + "required": [ + "Id", + "Name", + "ServerRelativeUrl" + ], + "type": "object", + "properties": { + "Id": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Document id", + "description": "Document id", + "x-ms-visibility": "important" + }, + "Name": { + "type": "string", + "x-ms-summary": "Document name", + "description": "Document name", + "x-ms-visibility": "important" + }, + "ServerRelativeUrl": { + "type": "string", + "x-ms-summary": "Document server relative url", + "description": "Document server relative url.", + "x-ms-visibility": "important" + }, + "Properties": { + "type": "object", + "properties": { + }, + "additionalProperties": { + "type": "object", + "properties": { + } + }, + "x-ms-summary": "Dictionary containing property names with corresponding values", + "description": "Dictionary containing property names with corresponding values.", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter.EntityInfo": { + "required": [ + "ListId", + "ListItemId", + "Title", + "ServerRelativeUrl" + ], + "type": "object", + "properties": { + "ListId": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "Entity list id", + "description": "Entity list id", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + "ListItemId": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Entity list item id", + "description": "Entity list item id", + "x-ms-visibility": "important" + }, + "Title": { + "type": "string", + "x-ms-summary": "Entity title", + "description": "Entity title", + "x-ms-visibility": "important" + }, + "ServerRelativeUrl": { + "type": "string", + "x-ms-summary": "Entity server relative url", + "description": "Entity server relative url", + "x-ms-visibility": "important" + }, + "Properties": { + "type": "object", + "properties": { + }, + "additionalProperties": { + "type": "object", + "properties": { + } + }, + "x-ms-summary": "Dictionary containing property names with corresponding values", + "description": "Dictionary containing property names with corresponding values.", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter.LibraryInfo": { + "required": [ + "Id", + "ServerRelativeUrl", + "Name" + ], + "type": "object", + "properties": { + "Id": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "Library id", + "description": "The id of the library", + "x-ms-visibility": "important" + }, + "ServerRelativeUrl": { + "type": "string", + "x-ms-summary": "Library server relative url", + "description": "Library server relative url", + "x-ms-visibility": "important" + }, + "Name": { + "type": "string", + "x-ms-summary": "Library name", + "description": "Library name", + "x-ms-visibility": "important" + } + } + }, + "WorkPoint365.WebAPI.Model.ConstructPowerAppAndFlowParameter": { + "required": [ + "PowerAppOrFlowId", + "EntityListId", + "EntityId", + "LibraryInfo", + "DocumentIDs" + ], + "type": "object", + "properties": { + "PowerAppOrFlowId": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "App or flow id", + "description": "Id for a App or flow", + "x-ms-visibility": "important" + }, + "EntityListId": { + "format": "uuid", + "type": "string", + "example": "00000000-0000-0000-0000-000000000000", + "x-ms-summary": "Entity list id", + "description": "Entity list id", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + "EntityId": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Entity id", + "description": "Entity id", + "x-ms-visibility": "important" + }, + "LibraryInfo": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter.LibraryInfo" + }, + "DocumentIDs": { + "type": "array", + "items": { + "format": "int32", + "type": "integer" + }, + "x-ms-summary": "Document ids", + "description": "Document ids", + "x-ms-visibility": "important" + } + } + }, + "Microsoft.AspNet.WebHooks.WebHook": { + "required": [ + "Properties" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "x-ms-summary": "Id", + "description": "Unique web hook id", + "x-ms-visibility": "internal" + }, + "Description": { + "type": "string", + "x-ms-summary": "Description", + "description": "Web hook description" + }, + "IsPaused": { + "type": "boolean", + "x-ms-summary": "Active state", + "description": "Web hook active state", + "x-ms-visibility": "internal" + }, + "Properties": { + "type": "object", + "properties": { + "WorkPointUrl": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + "BusinessModuleId": { + "type": "string", + "format": "uuid", + "x-ms-visibility": "important", + "x-ms-summary": "Business Module Id", + "description": "Business module id attached to web hook" + }, + "WorkPointTrigger": { + "type": "string", + "format": "uuid", + "x-ms-visibility": "important", + "x-ms-summary": "Trigger Id", + "description": "Trigger id attached to web hook" + } + }, + "required": [ + "WorkPointUrl", + "WorkPointTrigger", + "BusinessModuleId" + ] + } + } + } + }, + "host": "wp365webapi.azurewebsites.net", + "info": { + "description": "WorkPoint 365 business-solution makes it easy to manage critical processes.", + "title": "WorkPoint", + "version": "1.0", + "contact": { + "name": "WorkPoint Support", + "url": "https://support.workpoint.dk", + "email": "support@workpoint.dk" + } + }, + "parameters": {}, + "paths": { + "/api/BusinessModules/{id}/Actions": { + "get": { + "tags": [ + "ActionManagement" + ], + "operationId": "ActionManagement_Actions", + "description": "Gets all active actions on a business module", + "summary": "Gets all active actions on a business module", + "x-ms-visibility": "important", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Business module id", + "description": "The id of the business module", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Action" + } + } + } + } + } + }, + "/api/BusinessModules/{id}/Triggers": { + "get": { + "tags": [ + "ActionManagement" + ], + "operationId": "ActionManagement_Triggers", + "description": "Gets all active triggers on a business module", + "summary": "Gets all active triggers on a business module", + "x-ms-visibility": "important", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Business module id", + "description": "The id of the business module", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Trigger" + } + } + } + } + } + }, + "/api/BusinessModules/{bmId}/Actions/{actionId}/Run": { + "post": { + "tags": [ + "ActionManagement" + ], + "operationId": "ActionManagement_RunAction", + "description": "Executes an action on a business module entity", + "summary": "Executes an action on a business module entity", + "x-ms-visibility": "important", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "bmId", + "in": "path", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Business module id", + "description": "The id of the business module", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + { + "name": "actionId", + "in": "path", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Action id", + "description": "The id of the action to run", + "x-ms-dynamic-values": { + "operationId": "ActionManagement_Actions", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "id": { + "parameter": "bmId" + }, + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + { + "name": "entityId", + "in": "query", + "required": true, + "type": "integer", + "format": "int32", + "x-ms-summary": "Entity id", + "description": "The id of the entity in the business module" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string", + "description": "JobId", + "title": "JobId", + "x-ms-visibility": "important" + } + } + } + } + }, + "/api/BusinessModules": { + "get": { + "tags": [ + "BusinessModules" + ], + "operationId": "BusinessModules_Get", + "description": "Gets all business modules", + "summary": "Gets all business modules", + "x-ms-visibility": "important", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.BusinessModuleOnline" + } + } + } + } + } + }, + "/api/BusinessModules/{id}": { + "get": { + "tags": [ + "BusinessModules" + ], + "operationId": "BusinessModules_Lookup", + "description": "Gets a business module", + "summary": "Gets a business module", + "x-ms-visibility": "internal", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "x-ms-url-encoding": "single", + "x-ms-summary": "Business module id", + "description": "The id of the Business Module" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.BusinessModuleOnline" + } + } + } + } + }, + "/api/Document/ConvertToPdfAndSaveOutput": { + "post": { + "tags": [ "Document" ], + "operationId": "Document_ConvertToPdfAndSaveOutput", + "description": "Converts a document to pdf and saves it to a list", + "summary": "Converts a document to pdf and saves it to a list", + "x-ms-visibility": "important", + "consumes": [ "application/json", "text/plain" ], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "parameter", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.ConvertToPdfAndSaveOutputParameter" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "/api/Document/DigitalSignatureCreateLogEntryForTransaction": { + "post": { + "tags": [ "Document" ], + "operationId": "Document_DigitalSignatureCreateLogEntryForTransaction", + "description": "Creates a log entry for a digital signature transaction", + "summary": "Creates a log entry for a digital signature transaction", + "x-ms-visibility": "important", + "consumes": [ "application/json", "text/plain" ], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "parameter", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureCreateLogEntryForTransactionParameter" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "/api/Document/DigitalSignatureAddDocumentToTransaction": { + "post": { + "tags": [ "Document" ], + "operationId": "Document_DigitalSignatureAddDocumentToTransaction", + "description": "Adds a document to a digital signature transaction", + "summary": "Adds a document to a digital signature transaction", + "x-ms-visibility": "important", + "consumes": [ "application/json", "text/plain" ], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "parameter", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureAddDocumentToTransactionParameter" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureAddDocumentToTransactionReturnValue" + } + } + } + } + }, + "/api/Document/DigitalSignatureCompleteDocumentInTransaction": { + "post": { + "tags": [ "Document" ], + "operationId": "Document_DigitalSignatureCompleteDocumentInTransaction", + "description": "Completes a document in a digital signature transaction using a pdf file represented as a byte array", + "summary": "Completes digital signature transaction (byte array)", + "x-ms-visibility": "important", + "consumes": [ "application/json", "text/plain" ], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "parameter", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureCompleteDocumentInTransactionParameter" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureError" + } + } + } + } + } + }, + "/api/Document/DigitalSignatureBase64CompleteDocumentInTransaction": { + "post": { + "tags": [ "Document" ], + "operationId": "Document_DigitalSignatureBase64CompleteDocumentInTransaction", + "description": "Completes a document in a digital signature transaction using a pdf file represented as a base64 string", + "summary": "Completes a digital signature transaction (base64)", + "x-ms-visibility": "important", + "consumes": [ "application/json", "text/plain" ], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "parameter", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureBase64CompleteDocumentInTransactionParameter" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureError" + } + } + } + } + } + }, + "/api/Document/DigitalSignatureGenerateXwsseHeader": { + "post": { + "tags": [ "Document" ], + "summary": "Generates a xwsse header to use for digital signature", + "description": "Generates a xwsse header to use for digital signature", + "operationId": "Document_DigitalSignatureGenerateXwsseHeader", + "x-ms-visibility": "important", + "consumes": [ "application/json", "text/plain" ], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "parameter", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.Document.DigitalSignatureGenerateXwsseHeaderParameter" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string", + "description": "XwsseHeader", + "title": "XwsseHeader", + "x-ms-visibility": "important" + } + } + } + } + }, + "/api/Document/DigitalSignatureUnixTimeMilliseconds": { + "get": { + "tags": [ "Document" ], + "summary": "Gets DateTimeOffset.UtcNow converted to Unix time milliseconds", + "description": "Gets DateTimeOffset.UtcNow converted to Unix time milliseconds", + "operationId": "Document_DigitalSignatureUnixTimeMilliseconds", + "x-ms-visibility": "important", + "consumes": [], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "int64", + "type": "integer", + "description": "Unix time milliseconds", + "title": "Milliseconds", + "x-ms-visibility": "important" + } + } + } + } + }, + "/api/Entity/Move": { + "post": { + "tags": [ "Entity" ], + "operationId": "Entity_Move", + "description": "Moves an entity", + "summary": "Moves an entity", + "x-ms-visibility": "important", + "consumes": [ "application/json", "text/plain" ], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "parameter", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.MoveEntityParameter" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.MoveEntityResult" + } + } + } + } + }, + "/api/ListItem/ChangeStage": { + "post": { + "tags": [ "ListItem" ], + "operationId": "ListItem_ChangeStage", + "consumes": [ "application/json", "text/plain" ], + "description": "Changes the stage for an entity", + "x-ms-visibility": "important", + "summary": "Changes the stage for an entity", + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "parameter", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.ChangeStageParameter" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "boolean", + "description": "Stage was changed", + "title": "StageChanged", + "x-ms-visibility": "important" + } + } + } + } + }, + "/api/MailMerge/GetMailMergedWordDocumentAsHtml": { + "get": { + "tags": [ "MailMerge" ], + "operationId": "MailMerge_GetMailMergedWordDocumentAsHtml", + "consumes": [], + "description": "Creates a Word document based on a template and returns the document as html", + "summary": "Creates a Word document based on a template and returns the document as html", + "x-ms-visibility": "important", + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "businessModuleID", + "in": "query", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-summary": "Business module id", + "x-ms-visibility": "important", + "description": "The id of the business module that the entity belongs to", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + { + "name": "entityID", + "in": "query", + "required": true, + "type": "integer", + "format": "int32", + "x-ms-visibility": "important", + "x-ms-summary": "Entity id", + "description": "The id the entity." + }, + { + "name": "templateID", + "in": "query", + "required": true, + "type": "integer", + "format": "int32", + "x-ms-visibility": "important", + "x-ms-summary": "Word template id", + "description": "The id of the Word template" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.MailMergeHtmlResult" + } + } + } + } + }, + "/api/MailMerge/GetMailMergedWordDocument": { + "get": { + "tags": [ "MailMerge" ], + "operationId": "MailMerge_GetMailMergedWordDocument", + "consumes": [], + "description": "Creates a Word document based on a template and returns the document", + "summary": "Creates a Word document based on a template and returns the document", + "x-ms-visibility": "important", + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "businessModuleID", + "in": "query", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-summary": "Business module id", + "x-ms-visibility": "important", + "description": "The business module id of the entity", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + { + "name": "entityID", + "in": "query", + "required": true, + "type": "integer", + "format": "int32", + "x-ms-visibility": "important", + "x-ms-summary": "Entity id", + "description": "The id the entity" + }, + { + "name": "templateID", + "in": "query", + "required": true, + "type": "integer", + "format": "int32", + "x-ms-visibility": "important", + "x-ms-summary": "Word template id", + "description": "The Word template id" + }, + { + "name": "includeHtml", + "in": "query", + "required": true, + "type": "boolean", + "x-ms-visibility": "important", + "x-ms-summary": "Include the document as HTML in the result", + "description": "Include the document as HTML in the result" + }, + { + "name": "includeBytes", + "in": "query", + "required": true, + "type": "boolean", + "x-ms-visibility": "important", + "x-ms-summary": "Include the document bytes", + "description": "Include the document bytes in the result" + }, + { + "name": "commonFieldsBusinessModuleID", + "in": "query", + "required": false, + "type": "string", + "format": "uuid", + "x-ms-summary": "Business module id that the entity for common fields belongs to", + "x-ms-visibility": "important", + "description": "The id of the business module that the entity for common fields is belongs to.", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + { + "name": "commonFieldsEntityID", + "in": "query", + "required": false, + "type": "integer", + "format": "int32", + "x-ms-visibility": "important", + "x-ms-summary": "Entity id used for common fields", + "description": "The id the entity used for common fields." + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.MailMergeDocumentResult" + } + } + } + } + }, + "/api/Parameter/GetPowerAppAndFlowParameter/{identifier}": { + "get": { + "tags": [ "Parameter" ], + "operationId": "Parameter_GetPowerAppAndFlowParameter", + "description": "Gets a parameter for app or flow integration.", + "summary": "Gets a parameter for App or flow integration", + "x-ms-visibility": "important", + "consumes": [], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "identifier", + "in": "path", + "required": true, + "type": "string", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-summary": "Parameter object identifier", + "description": "The identifier of the parameter" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/WorkPoint365.WebAPI.Model.PowerAppAndFlowParameter" + } + } + } + } + }, + "/api/RecordManagement/Declare": { + "post": { + "tags": [ "RecordManagement" ], + "operationId": "RecordManagement_Declare", + "description": "Declares a document as record", + "summary": "Declares a document as record", + "x-ms-visibility": "important", + "consumes": [], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "siteUrl", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "Absolute site Url", + "description": "The absolute url of the site where the document belongs to (the value must be UrlEncoded)" + }, + { + "name": "documentUrl", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "Absolute document Url", + "description": "The absolute url of the document to declare (the value must be UrlEncoded)" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "/api/RecordManagement/Undeclare": { + "post": { + "tags": [ "RecordManagement" ], + "operationId": "RecordManagement_Undeclare", + "description": "Undeclares a document as record.", + "summary": "Undeclares a document as record", + "x-ms-visibility": "important", + "consumes": [], + "produces": [ "application/json", "text/plain" ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "siteUrl", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "Absolute site Url", + "description": "The absolute url of the site where the document belongs to (the value must be UrlEncoded)" + }, + { + "name": "documentUrl", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "Absolute document Url", + "description": "The absolute url of the document to declare (the value must be UrlEncoded)" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "/api/webhooks/registrations": { + "x-ms-notification-content": { + "description": "Created", + "schema": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "Id", + "x-ms-visibility": "internal" + }, + "Attempt": { + "type": "integer", + "format": "int32", + "description": "Attempt", + "x-ms-visibility": "internal" + }, + "Properties": { + "type": "object", + "properties": { + "WorkPointUrl": { + "type": "string", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + "BusinessModuleId": { + "type": "string", + "x-ms-summary": "Business Module Id", + "description": "Business module id attached to web hook" + }, + "WorkPointTrigger": { + "type": "string", + "x-ms-summary": "Trigger Id", + "description": "Trigger id attached to web hook" + } + }, + "description": "Properties" + }, + "Notifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Action": { + "type": "string", + "description": "Action", + "x-ms-visibility": "internal" + }, + "EntityId": { + "type": "integer", + "format": "int32", + "description": "EntityId" + } + } + }, + "description": "Notifications" + } + } + } + }, + "get": { + "tags": [ + "WebHookRegistrations" + ], + "operationId": "WebHookRegistrations_Get", + "description": "Get all WorkPoint webhooks", + "summary": "Get all WorkPoint webhooks", + "x-ms-visibility": "internal", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.AspNet.WebHooks.WebHook" + } + } + } + } + }, + "delete": { + "tags": [ + "WebHookRegistrations" + ], + "operationId": "WebHookRegistrations_DeleteAll", + "description": "Delete all WorkPoint webhooks", + "summary": "Delete all WorkPoint webhooks", + "x-ms-visibility": "internal", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + } + } + } + } + }, + "post": { + "tags": [ + "WebHookRegistrations" + ], + "description": "Creates a WorkPoint webhook", + "summary": "Triggers when a WorkPoint event occurs", + "operationId": "WebHookRegistrations_Post", + "x-ms-trigger": "single", + "x-ms-visibility": "important", + "consumes": [ + "application/json", + "text/plain" + ], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "webHook", + "in": "body", + "required": true, + "schema": { + "required": [ + "WebHookUri", + "Properties" + ], + "type": "object", + "properties": { + "Id": { + "type": "string", + "x-ms-summary": "Id", + "description": "Unique web hook id", + "title": "Id", + "x-ms-visibility": "internal" + }, + "WebHookUri": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "x-ms-summary": "Callback URI", + "description": "Web hook callback property" + }, + "Description": { + "type": "string", + "x-ms-summary": "Description", + "description": "Web hook description" + }, + "IsPaused": { + "type": "boolean", + "x-ms-summary": "Active state", + "description": "Web hook active state", + "x-ms-visibility": "internal" + }, + "Properties": { + "type": "object", + "properties": { + "WorkPointUrl": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed", + "title": "WorkPoint365 URL" + }, + "BusinessModuleId": { + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-summary": "Business Module Id", + "description": "Business module id attached to web hook", + "title": "Business Module Id", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "Properties.WorkPointUrl" + } + } + }, + "x-ms-dynamic-list": { + "operationId": "BusinessModules_Get", + "itemValuePath": "Id", + "itemTitlePath": "Title", + "parameters": { + "WorkPoint365Url": { + "parameterReference": "webHook/Properties/WorkPointUrl" + } + } + } + }, + "WorkPointTrigger": { + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-summary": "Trigger Id", + "description": "Trigger id attached to web hook", + "title": "Trigger Id", + "x-ms-dynamic-values": { + "operationId": "ActionManagement_Triggers", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "Properties.WorkPointUrl" + }, + "id": { + "parameter": "Properties.BusinessModuleId" + } + } + }, + "x-ms-dynamic-list": { + "operationId": "ActionManagement_Triggers", + "itemValuePath": "Id", + "itemTitlePath": "Title", + "parameters": { + "id": { + "parameterReference": "webHook/Properties/BusinessModuleId" + }, + "WorkPoint365Url": { + "parameterReference": "webHook/Properties/WorkPointUrl" + } + } + } + } + }, + "required": [ + "BusinessModuleId", + "WorkPointTrigger", + "WorkPointUrl" + ] + } + } + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/Microsoft.AspNet.WebHooks.WebHook" + } + } + } + } + }, + "/api/webhooks/registrations/{id}": { + "get": { + "tags": [ + "WebHookRegistrations" + ], + "operationId": "WebHookRegistrations_Lookup", + "description": "Get a WorkPoint webhook", + "summary": "Get a WorkPoint webhook based on id", + "x-ms-visibility": "internal", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Microsoft.AspNet.WebHooks.WebHook" + } + } + } + }, + "delete": { + "tags": [ + "WebHookRegistrations" + ], + "operationId": "WebHookRegistrations_Delete", + "description": "Delete a WorkPoint webhook", + "summary": "Delete a WorkPoint webhook based on id", + "x-ms-visibility": "internal", + "consumes": [], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + } + } + } + } + }, + "put": { + "tags": [ + "WebHookRegistrations" + ], + "operationId": "WebHookRegistrations_Put", + "description": "Update a WorkPoint webhook", + "summary": "Update a WorkPoint webhook based on id", + "x-ms-visibility": "internal", + "consumes": [ + "application/json", + "text/plain" + ], + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "x-ms-url-encoding": "single" + }, + { + "name": "webHook", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Microsoft.AspNet.WebHooks.WebHook" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + } + } + } + } + } + } + }, + "produces": [ + "application/json" + ], + "responses": {}, + "schemes": [ + "https" + ], + "security": [ + { + "AAD": [] + } + ], + "securityDefinitions": { + "AAD": { + "authorizationUrl": "https://login.windows.net/common/oauth2/authorize", + "flow": "accessCode", + "scopes": {}, + "tokenUrl": "https://login.windows.net/common/oauth2/token", + "type": "oauth2" + } + }, + "swagger": "2.0", + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.workpoint365.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.workpoint365.com/privacy-policy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity;Content and Files" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/WorkPoint/apiProperties.json b/certified-connectors/WorkPoint/apiProperties.json new file mode 100644 index 000000000..447a47a64 --- /dev/null +++ b/certified-connectors/WorkPoint/apiProperties.json @@ -0,0 +1,47 @@ +{ + "properties": { + "capabilities": [], + "connectionParameters": { + "token": { + "oAuthSettings": { + "clientId": "92a0e022-cc2e-43df-a843-86cc6e60dafb", + "customParameters": { + "loginUri": { + "value": "https://login.windows.net" + }, + "resourceUri": { + "value": "https://workpoint365.dk/WorkPoint365.WebAPI" + }, + "tenantId": { + "value": "common" + } + }, + "identityProvider": "aad", + "properties": { + "AzureActiveDirectoryResourceId": "https://workpoint365.dk/WorkPoint365.WebAPI", + "IsFirstParty": "False" + }, + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "scopes": [] + }, + "type": "oauthSetting" + }, + "token:TenantId": { + "metadata": { + "sourceType": "AzureActiveDirectoryTenant" + }, + "type": "string", + "uiDefinition": { + "constraints": { + "hidden": "true", + "required": "false" + } + } + } + }, + "publisher": "WorkPoint", + "stackOwner": "WorkPoint", + "iconBrandColor": "#000000" + } +} \ No newline at end of file From cc7c8cfbd4c571e3ee5f1b09660aaafd2103d1b4 Mon Sep 17 00:00:00 2001 From: Dan Sargeant Date: Tue, 25 Aug 2020 04:35:52 +1000 Subject: [PATCH 025/347] fix: Way We Do connector updates (#398) Rename of connector Additional trigger Minor updates to schema --- .../Way We Do/apiDefinition.swagger.json | 3223 +++++++++-------- .../Way We Do/apiProperties.json | 6 +- certified-connectors/Way We Do/readme.md | 4 +- 3 files changed, 1623 insertions(+), 1610 deletions(-) diff --git a/certified-connectors/Way We Do/apiDefinition.swagger.json b/certified-connectors/Way We Do/apiDefinition.swagger.json index 80df61644..2f7f56178 100644 --- a/certified-connectors/Way We Do/apiDefinition.swagger.json +++ b/certified-connectors/Way We Do/apiDefinition.swagger.json @@ -1,1671 +1,1682 @@ { - "basePath": "/", - "consumes": [ - "application/json" - ], - "definitions": { - "ChecklistComment": { - "properties": { - "comment": { - "description": "The comment text added to the step.", - "type": "string", - "x-ms-summary": "Comment Text", - "x-ms-visibility": "important" + "swagger": "2.0", + "info": { + "title": "Way We Do", + "description": "Way We Do enables teams to actively use repeatable policies, procedures, processes and playbooks in their day to day workflows to increase efficiency, quality and compliance.", + "contact": { + "name": "Way We Do", + "url": "https://support.waywedo.com", + "email": "support@waywedo.com" }, - "created": { - "description": "The date and time the comment was created.", - "format": "date-time", - "type": "string", - "x-ms-summary": "Comment Date", - "x-ms-visibility": "important" - }, - "createdBy": { - "description": "The email address of the user who created the comment.", - "type": "string", - "x-ms-summary": "Comment User", - "x-ms-visibility": "important" - }, - "id": { - "description": "The unique ID of the comment.", - "type": "string", - "x-ms-summary": "Comment ID", - "x-ms-visibility": "important" - }, - "imageUrl": { - "description": "The URL to the attached file. Valid for 5 minutes.", - "type": "string", - "x-ms-summary": "Comment Attachment URL", - "x-ms-visibility": "important" - }, - "instanceId": { - "description": "The unique ID of the checklist instance.", - "type": "string", - "x-ms-summary": "Instance ID", - "x-ms-visibility": "advanced" - }, - "instanceTitle": { - "description": "The title of the checklist instance.", - "type": "string", - "x-ms-summary": "Instance Title", - "x-ms-visibility": "important" - }, - "procedureId": { - "description": "The unique ID of the procedure.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Procedure ID", - "x-ms-visibility": "advanced" - }, - "procedureTitle": { - "description": "The title of the procedure.", - "type": "string", - "x-ms-summary": "Procedure Title", - "x-ms-visibility": "important" - }, - "stepId": { - "description": "The unique ID of the checklist step.", - "type": "string", - "x-ms-summary": "Step ID", - "x-ms-visibility": "advanced" - }, - "type": { - "description": "The type of comment; either 1 (standard) or 2 (attachment).", - "enum": [ - 1, - 2 - ], - "type": "integer", - "x-ms-summary": "Comment Type", - "x-ms-visibility": "advanced" + "version": "v1", + "x-ms-api-annotation": { + "status": "Preview" } - }, - "type": "object" }, - "ChecklistInstance": { - "properties": { - "created": { - "description": "The date and time the checklist instance was started.", - "format": "date-time", - "type": "string", - "x-ms-summary": "Instance Created Date", - "x-ms-visibility": "important" + "host": "api.waywedo.com", + "basePath": "/", + "schemes": ["https"], + "consumes": ["application/json"], + "produces": ["application/json"], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.waywedo.com" }, - "createdBy": { - "description": "The email address of the user who started the checklist instance.", - "type": "string", - "x-ms-summary": "Instance User", - "x-ms-visibility": "important" + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.waywedo.com/privacy-policy/" }, - "id": { - "description": "The unique ID of the checklist instance.", - "type": "string", - "x-ms-summary": "Instance ID", - "x-ms-visibility": "important" - }, - "procedureId": { - "description": "The unique ID of the procedure.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Procedure ID", - "x-ms-visibility": "important" - }, - "title": { - "description": "The title of the checklist instance.", - "type": "string", - "x-ms-summary": "Instance Title", - "x-ms-visibility": "important" - }, - "url": { - "description": "The URL to the checklist instance.", - "type": "string", - "x-ms-summary": "Instance URL", - "x-ms-visibility": "advanced" + { + "propertyName": "Categories", + "propertyValue": "Productivity;Business Management" } - }, - "type": "object" - }, - "ChecklistStep": { - "properties": { - "id": { - "description": "The unique ID of the instance step.", - "type": "string", - "x-ms-summary": "Step ID", - "x-ms-visibility": "important" - }, - "ordinal": { - "description": "The number of the instance step.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Step Number", - "x-ms-visibility": "important" - }, - "title": { - "description": "The title of the instance step.", - "type": "string", - "x-ms-summary": "Step Title", - "x-ms-visibility": "important" - } - }, - "type": "object" - }, - "Procedure": { - "properties": { - "createdBy": { - "description": "The email of the user that created the procedure.", - "type": "string", - "x-ms-summary": "Created By", - "x-ms-visibility": "important" - }, - "id": { - "description": "The unique ID of the procedure.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Procedure ID", - "x-ms-visibility": "important" - }, - "restricted": { - "description": "Wether the procedure is restricted or not.", - "enum": [ - true, - false - ], - "type": "boolean", - "x-ms-summary": "Restricted", - "x-ms-visibility": "advanced" - }, - "status": { - "description": "The publishing status of the procedure.", - "type": "string", - "x-ms-summary": "Procedure Status", - "x-ms-visibility": "advanced" - }, - "summary": { - "description": "The summary of the procedure.", - "type": "string", - "x-ms-summary": "Procedure Summary", - "x-ms-visibility": "important" - }, - "title": { - "description": "The title of the procedure.", - "type": "string", - "x-ms-summary": "Procedure Title", - "x-ms-visibility": "important" - }, - "type": { - "description": "The type of procedure; 1 (standard) or 2 (checklist)", - "enum": [ - 1, - 2 - ], - "type": "integer", - "x-ms-summary": "Procedure Type", - "x-ms-visibility": "advanced" - }, - "url": { - "description": "The URL of the procedure.", - "type": "string", - "x-ms-summary": "Procedure URL", - "x-ms-visibility": "important" - } - }, - "type": "object" - }, - "ProcedureAcceptance": { - "properties": { - "accepted": { - "description": "The date and time the procedure was accepted.", - "format": "date-time", - "type": "string", - "x-ms-summary": "Accepted", - "x-ms-visibility": "advanced" - }, - "attachmentUrl": { - "description": "The URL to the generated PDF. Valid for 5 minutes.", - "type": "string", - "x-ms-summary": "PDF URL", - "x-ms-visibility": "important" - }, - "createdBy": { - "description": "The email address of the user that accepted the procedure.", - "type": "string", - "x-ms-summary": "Accepted By", - "x-ms-visibility": "important" - }, - "fileName": { - "description": "The file name of the generated PDF.", - "type": "string", - "x-ms-summary": "PDF File Name", - "x-ms-visibility": "important" - }, - "id": { - "description": "The unique ID of the procedure acceptance", - "format": "int32", - "type": "integer", - "x-ms-summary": "Acceptance ID", - "x-ms-visibility": "important" - }, - "procedureTitle": { - "description": "The title of the accepted procedure.", - "type": "string", - "x-ms-summary": "Procedure Title", - "x-ms-visibility": "important" - } - }, - "type": "object" - }, - "User": { - "properties": { - "email": { - "description": "The email address of the user.", - "type": "string", - "x-ms-summary": "Email", - "x-ms-visibility": "important" - }, - "firstName": { - "description": "The first name of the user.", - "type": "string", - "x-ms-summary": "First Name", - "x-ms-visibility": "important" - }, - "id": { - "description": "The unique ID of the user.", - "format": "int32", - "type": "integer", - "x-ms-summary": "User ID", - "x-ms-visibility": "important" - }, - "lastName": { - "description": "The last name of the user.", - "type": "string", - "x-ms-summary": "Last Name", - "x-ms-visibility": "important" - } - }, - "type": "object" - }, - "WebhookRegistered": { - "properties": { - "callbackurl": { - "description": "The URL to call when action occurs.", - "type": "string", - "x-ms-summary": "Callback URL", - "x-ms-visibility": "internal" - }, - "created": { - "description": "The date and time the webhook was registered.", - "format": "date-time", - "type": "string", - "x-ms-summary": "Created Date", - "x-ms-visibility": "internal" - }, - "id": { - "description": "The unique ID of the Webhook registration.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Webhook ID", - "x-ms-visibility": "internal" - }, - "webHookEvent": { - "description": "The name of the webhook event.", - "type": "string", - "x-ms-summary": "Webhook Event", - "x-ms-visibility": "internal" - } - }, - "type": "object" - } - }, - "host": "api.waywedo.com", - "info": { - "contact": { - "email": "support@waywedo.com", - "name": "Way We Do", - "url": "https://support.waywedo.com" - }, - "description": "Way We Do enables teams to actively use repeatable policies, procedures, processes and playbooks in their day to day workflows to increase efficiency, quality and compliance.", - "title": "Way We Do Integration API", - "version": "v1", - "x-ms-api-annotation": { - "status": "Preview" - } - }, - "parameters": { - "Limit": { - "default": 20, - "description": "Maximum number of results to fetch.", - "format": "int32", - "in": "query", - "name": "limit", - "required": false, - "type": "integer", - "x-ms-summary": "Limit", - "x-ms-visibility": "advanced", - "x-nullable": false - }, - "Offset": { - "default": 0, - "description": "The number of records skipped.", - "format": "int32", - "in": "query", - "name": "offset", - "required": false, - "type": "integer", - "x-ms-summary": "Offset", - "x-ms-visibility": "advanced", - "x-nullable": false - }, - "WebhookRegistration": { - "in": "body", - "name": "Webhook Registration", - "required": true, - "schema": { - "properties": { - "callbackUrl": { - "description": "The URL to call when action occurs.", - "type": "string", - "x-ms-notification-url": true, - "x-ms-summary": "Callback URL", - "x-ms-visibility": "internal" - } - }, - "required": [ - "callbackUrl" - ], - "type": "object" - }, - "x-ms-visibility": "important" - } - }, - "paths": { - "/v1/ChecklistInstanceComments": { - "post": { - "description": "Adds a new comment to an Activated Checklist Instance step.", - "operationId": "Comment_Add", - "parameters": [ - { - "in": "body", - "name": "CreateCommentCommand", - "required": true, - "schema": { - "properties": { - "bot": { - "default": "Microsoft Power Automate", - "description": "The name of the bot creating the comment", - "type": "string", - "x-ms-summary": "Bot Name", - "x-ms-visibility": "internal" - }, - "instanceId": { - "description": "Select the checklist instance", - "type": "string", - "x-ms-dynamic-values": { - "operationId": "GetAll_ChecklistInstances", - "value-collection": "results", - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Checklist Instance ID", - "x-ms-visibility": "important" - }, - "message": { - "description": "Specify the comment to add", - "type": "string", - "x-ms-summary": "Comment Text", - "x-ms-visibility": "important" - }, - "stepId": { - "description": "Select the step of the checklist instance", - "type": "string", - "x-ms-dynamic-values": { - "operationId": "Find_Steps", - "parameters": { - "instanceId": { - "parameter": "instanceId" - } - }, - "value-path": "id", - "value-title": "title" - }, - "x-ms-dynamic-list": { - "operationId": "Find_Steps", - "parameters": { - "instanceId": { - "parameterReference": "CreateCommentCommand/instanceId" - } - }, - "itemValuePath": "id", - "itemTitlePath": "title" - }, - "x-ms-summary": "Step ID", - "x-ms-visibility": "important" - }, - "userId": { - "description": "Select the user creating the comment", - "format": "int32", - "type": "integer", - "x-ms-dynamic-values": { - "operationId": "Find_User", - "value-path": "id", - "value-title": "email" - }, - "x-ms-summary": "User ID", - "x-ms-visibility": "important" + ], + "paths": { + "/v1/ChecklistInstanceComments": { + "post": { + "tags": ["Checklist Instance Comments"], + "operationId": "Comment_Add", + "summary": "Add a comment to a checklist instance step", + "description": "Adds a new comment to an Activated Checklist Instance step.", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "CreateCommentCommand", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "instanceId": { + "type": "string", + "description": "Select the checklist instance", + "x-ms-summary": "Checklist Instance ID", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "GetAll_ChecklistInstances", + "value-path": "id", + "value-collection": "results", + "value-title": "title" + } + }, + "stepId": { + "type": "string", + "description": "Select the step of the checklist instance", + "x-ms-summary": "Step ID", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_Steps", + "value-path": "id", + "value-title": "title", + "parameters": { + "instanceId": { + "parameter": "instanceId" + } + } + }, + "x-ms-dynamic-list": { + "operationId": "Find_Steps", + "parameters": { + "instanceId": { + "parameterReference": "CreateCommentCommand/instanceId" + } + }, + "itemValuePath": "id", + "itemTitlePath": "title" + } + }, + "userId": { + "type": "integer", + "format": "int32", + "description": "Select the user creating the comment", + "x-ms-summary": "User ID", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_User", + "value-path": "id", + "value-title": "email" + } + }, + "message": { + "type": "string", + "description": "Specify the comment to add", + "x-ms-summary": "Comment Text", + "x-ms-visibility": "important" + }, + "bot": { + "type": "string", + "description": "The name of the bot creating the comment", + "x-ms-summary": "Bot Name", + "x-ms-visibility": "internal", + "default": "Microsoft Power Automate" + } + }, + "required": [ + "bot", + "instanceId", + "message", + "stepId", + "userId" + ] + }, + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Checklist Comment", + "schema": { + "$ref": "#/definitions/ChecklistComment" + } + } } - }, - "required": [ - "bot", - "instanceId", - "message", - "stepId", - "userId" - ], - "type": "object" - }, - "x-ms-visibility": "important" - } - ], - "responses": { - "200": { - "description": "Checklist Comment", - "schema": { - "$ref": "#/definitions/ChecklistComment" } - } }, - "summary": "Add a comment to a checklist instance step", - "tags": [ - "Checklist Instance Comments" - ], - "x-ms-visibility": "important" - } - }, - "/v1/ChecklistInstances": { - "get": { - "description": "Retrieves a list of all activated checklist instances.", - "operationId": "GetAll_ChecklistInstances", - "parameters": [ - { - "$ref": "#/parameters/Limit" - }, - { - "$ref": "#/parameters/Offset" - } - ], - "responses": { - "200": { - "description": "Checklist Instances", - "schema": { - "properties": { - "_total": { - "description": "The total number of checklist instances.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Total", - "x-ms-visibility": "advanced" - }, - "results": { - "description": "The list of checklist instances.", - "items": { - "$ref": "#/definitions/ChecklistInstance" - }, - "type": "array", - "x-ms-summary": "Checklist Instances" + "/v1/ChecklistInstances": { + "get": { + "tags": ["Checklist Instances"], + "operationId": "GetAll_ChecklistInstances", + "summary": "Get All Checklist Instances", + "description": "Retrieves a list of all activated checklist instances.", + "x-ms-visibility": "internal", + "parameters": [ + { + "$ref": "#/parameters/Limit" + }, + { + "$ref": "#/parameters/Offset" + }, + { + "type": "integer", + "name": "status", + "in": "query", + "x-nullable": false, + "format": "int32", + "default": 1, + "description": "The status of instances returned.", + "x-ms-summary": "Status", + "required": false, + "x-ms-visibility": "advanced" + } + ], + "responses": { + "200": { + "description": "Checklist Instances", + "schema": { + "type": "object", + "properties": { + "results": { + "type": "array", + "description": "The list of checklist instances.", + "x-ms-summary": "Checklist Instances", + "items": { + "$ref": "#/definitions/ChecklistInstance" + } + }, + "_total": { + "type": "integer", + "format": "int32", + "description": "The total number of checklist instances.", + "x-ms-summary": "Total", + "x-ms-visibility": "advanced" + } + } + }, + "x-nullable": true + } } - }, - "type": "object" }, - "x-nullable": true - } + "post": { + "tags": ["Checklist Instances"], + "operationId": "ChecklistInstances_Post", + "summary": "Create Checklist Instance", + "description": "Creates a new activated checklist instance.", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "CreateInstanceCommand", + "in": "body", + "required": true, + "x-ms-visibility": "important", + "schema": { + "type": "object", + "properties": { + "procedureId": { + "type": "integer", + "format": "int32", + "description": "Select a checklist master", + "x-ms-summary": "Procedure ID", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_Checklist", + "value-path": "id", + "value-title": "title", + "parameters": { + "type": 2 + } + } + }, + "title": { + "type": "string", + "description": "The title of the checklist instance", + "x-ms-summary": "Title", + "x-ms-visibility": "important" + }, + "userId": { + "type": "integer", + "format": "int32", + "description": "Select the user creating the instance", + "x-ms-summary": "User ID", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_User", + "value-path": "id", + "value-title": "email" + } + }, + "bot": { + "type": "string", + "description": "The name of the bot creating the instance", + "x-ms-summary": "Bot Name", + "x-ms-visibility": "internal", + "default": "Microsoft Power Automate" + } + }, + "required": [ + "bot", + "procedureId", + "title", + "userId" + ] + } + } + ], + "responses": { + "200": { + "description": "Checklist instance created", + "schema": { + "$ref": "#/definitions/ChecklistInstance" + } + } + } + } }, - "summary": "Get All Checklist Instances", - "tags": [ - "Checklist Instances" - ], - "x-ms-visibility": "internal" - }, - "post": { - "description": "Creates a new activated checklist instance.", - "operationId": "ChecklistInstances_Post", - "parameters": [ - { - "in": "body", - "name": "CreateInstanceCommand", - "required": true, - "schema": { - "properties": { - "bot": { - "default": "Microsoft Power Automate", - "description": "The name of the bot creating the instance", - "type": "string", - "x-ms-summary": "Bot Name", - "x-ms-visibility": "internal" + "/v1/ChecklistInstances/{instanceId}": { + "get": { + "tags": ["Checklist Instances"], + "operationId": "ChecklistInstances_Get", + "summary": "Get A Checklist Instance", + "description": "Retrieves a specific activated checklist instance", + "x-ms-visibility": "internal", + "parameters": [ + { + "type": "string", + "name": "instanceId", + "in": "path", + "required": true, + "x-nullable": false, + "format": "guid", + "description": "Select the checklist instance", + "x-ms-url-encoding": "single", + "x-ms-summary": "Instance ID", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_Checklist", + "value-path": "id", + "value-title": "title", + "parameters": { + "type": 2 + } + } + } + ], + "responses": { + "200": { + "description": "Checklist Instance", + "schema": { + "$ref": "#/definitions/ChecklistInstance" + }, + "x-nullable": true + } + } + } + }, + "/v1/ChecklistInstances/{instanceId}/Activity": { + "get": { + "tags": ["Checklist Instance Activity"], + "operationId": "ChecklistInstances_Activity", + "summary": "Get Checklist Instance Activity", + "description": "Retrieve all activity for a checklist instance", + "x-ms-visibility": "advanced", + "parameters": [ + { + "type": "string", + "name": "instanceId", + "description": "Select the checklist instance", + "x-ms-summary": "Instance Id", + "in": "path", + "required": true, + "x-nullable": false, + "format": "guid", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "GetAll_ChecklistInstances", + "value-path": "id", + "value-collection": "results", + "value-title": "title", + "parameters": { + "status": 0 + } + } + } + ], + "responses": { + "200": { + "description": "Checklist Activity", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "occurred": { + "type": "string", + "format": "date-time", + "description": "The date and time the activity occurred.", + "x-ms-summary": "Occurred", + "x-ms-visibility": "important" + }, + "title": { + "type": "string", + "description": "A description of the activity that occurred.", + "x-ms-summary": "Description", + "x-ms-visibility": "important" + } + } + } + }, + "x-nullable": true + } + } + } + }, + "/v1/ChecklistInstances/{instanceId}/Steps": { + "get": { + "tags": ["Checklist Instance Steps"], + "operationId": "Find_Steps", + "summary": "Find Checklist Step", + "description": "Find a step of a checklist instance", + "x-ms-visibility": "important", + "parameters": [ + { + "type": "string", + "name": "instanceId", + "description": "Select the checklist instance", + "x-ms-summary": "Instance Id", + "in": "path", + "required": true, + "x-nullable": false, + "format": "guid", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "GetAll_ChecklistInstances", + "value-path": "id", + "value-collection": "results", + "value-title": "title" + } + }, + { + "type": "string", + "name": "query", + "description": "Search for a step title", + "x-ms-summary": "Step Title", + "in": "query", + "x-nullable": true, + "required": false, + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Checklist Steps", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ChecklistStep" + } + }, + "x-nullable": true + } + } + } + }, + "/v1/ChecklistInstances/{instanceId}/Steps/{stepId}": { + "get": { + "tags": ["Checklist Instance Steps"], + "operationId": "ChecklistSteps_Get", + "summary": "Get A Checklist Step", + "description": "Retrieves a specific checklist step", + "x-ms-visibility": "internal", + "parameters": [ + { + "type": "string", + "name": "instanceId", + "description": "Select the checklist instance", + "x-ms-summary": "Instance Id", + "in": "path", + "required": true, + "x-nullable": false, + "format": "guid", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "GetAll_ChecklistInstances", + "value-path": "id", + "value-collection": "results", + "value-title": "title" + } + }, + { + "type": "string", + "name": "stepId", + "description": "Select the checklist step", + "x-ms-summary": "Step Id", + "in": "path", + "required": true, + "x-nullable": false, + "format": "guid", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_Steps", + "value-path": "id", + "value-title": "title", + "parameters": { + "instanceId": { + "parameter": "instanceId" + } + } + } + } + ], + "responses": { + "200": { + "description": "Checklist Step", + "schema": { + "$ref": "#/definitions/ChecklistStep" + }, + "x-nullable": true + } + } + } + }, + "/v1/ChecklistInstances/{instanceId}/Steps/{stepId}/Complete": { + "post": { + "tags": ["Checklist Instance Steps"], + "operationId": "ChecklistSteps_Complete", + "summary": "Complete a Checklist Step", + "description": "Mark a specific step in a checklist instance as complete.", + "x-ms-visibility": "advanced", + "parameters": [ + { + "name": "instanceId", + "description": "Select the checklist instance", + "x-ms-summary": "Instance Id", + "in": "path", + "required": true, + "x-nullable": false, + "type": "string", + "format": "guid", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "GetAll_ChecklistInstances", + "value-path": "id", + "value-collection": "results", + "value-title": "title" + } + }, + { + "name": "stepId", + "description": "Select the checklist step", + "x-ms-summary": "Step Id", + "in": "path", + "required": true, + "x-nullable": false, + "type": "string", + "format": "guid", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_Steps", + "value-path": "id", + "value-title": "title", + "parameters": { + "instanceId": { + "parameter": "instanceId" + } + } + } + }, + { + "name": "Complete Step Command", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "userId": { + "type": "integer", + "format": "int32", + "description": "Select the user completing the step", + "x-ms-summary": "User ID", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_User", + "value-path": "id", + "value-title": "email" + } + }, + "bot": { + "type": "string", + "description": "The name of the bot that completed the checklist step", + "x-ms-summary": "Bot Name", + "x-ms-visibility": "internal", + "default": "Microsoft Power Automate" + } + }, + "required": ["bot", "userId"] + } + } + ], + "responses": { + "200": { + "description": "Checklist Step Completed", + "schema": {} + } + } + } + }, + "/v1/Company": { + "get": { + "tags": ["Company"], + "operationId": "Company_GetCompany", + "summary": "Get Company", + "description": "Retrieves your company ID and Name", + "x-ms-visibility": "internal", + "parameters": [], + "responses": { + "200": { + "description": "Company", + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "The unique ID of your company.", + "x-ms-summary": "Company ID", + "x-ms-visibility": "important" + }, + "title": { + "type": "string", + "description": "The name of the company registered with Way We Do", + "x-ms-summary": "Company Title", + "x-ms-visibility": "important" + } + } + }, + "x-nullable": true + } + } + } + }, + "/v1/CompanyRoles": { + "get": { + "tags": ["Company Roles"], + "operationId": "CompanyRoles_GetAll", + "summary": "Get Company Roles", + "description": "Retrieve all the company roles.", + "x-ms-visibility": "internal", + "parameters": [], + "responses": { + "200": { + "description": "Company Roles", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "The unique ID of the company role.", + "x-ms-summary": "Role ID", + "x-ms-visibility": "important" + }, + "title": { + "type": "string", + "format": "date-time", + "description": "The name of the company role.", + "x-ms-summary": "Role Title", + "x-ms-visibility": "important" + } + } + } + }, + "x-nullable": true + } + } + } + }, + "/v1/ProcedureAcceptances": { + "get": { + "tags": ["Procedure Acceptance"], + "operationId": "ProcedureAcceptances_GetAll", + "summary": "Get All Procedure Acceptances", + "description": "Retrieves a list of all procedure acceptances.", + "x-ms-visibility": "internal", + "parameters": [ + { + "$ref": "#/parameters/Limit" + }, + { + "$ref": "#/parameters/Offset" + } + ], + "responses": { + "200": { + "description": "Procedure Acceptances", + "schema": { + "type": "object", + "properties": { + "results": { + "type": "array", + "description": "The list of procedure acceptances.", + "x-ms-summary": "Procedure Acceptances", + "items": { + "$ref": "#/definitions/ProcedureAcceptance" + } + }, + "_total": { + "type": "integer", + "format": "int32", + "description": "The total number of procedure acceptances.", + "x-ms-summary": "Total", + "x-ms-visibility": "advanced" + } + } + }, + "x-nullable": true + } + } + } + }, + "/v1/Procedures": { + "get": { + "tags": ["Procedures"], + "operationId": "Find_Checklist", + "summary": "Find Checklist", + "description": "Search for a checklist by title", + "x-ms-visibility": "important", + "parameters": [ + { + "type": "string", + "name": "query", + "in": "query", + "x-nullable": true, + "required": false, + "x-ms-visibility": "important", + "description": "The title of the checklist", + "x-ms-summary": "Checklist Title" + }, + { + "type": "integer", + "name": "type", + "in": "query", + "x-nullable": true, + "format": "int32", + "description": "The type of procedure; either 1 (standard) or 2 (checklist).", + "x-ms-summary": "Procedure Type", + "required": true, + "default": 2, + "x-ms-visibility": "internal" + } + ], + "responses": { + "200": { + "description": "Checklists", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Procedure" + } + }, + "x-nullable": true + } + } + } + }, + "/v1/Procedures/{procedureId}": { + "get": { + "tags": ["Procedures"], + "operationId": "Procedures_Get", + "summary": "Get A Checklist", + "description": "Retrieves a specific checklist or procedure by ID.", + "x-ms-visibility": "internal", + "parameters": [ + { + "type": "integer", + "name": "procedureId", + "in": "path", + "description": "Select a checklist", + "x-ms-summary": "Procedure ID", + "required": true, + "x-nullable": false, + "format": "int32", + "x-ms-url-encoding": "single", + "x-ms-dynamic-values": { + "operationId": "Find_Checklist", + "value-path": "id", + "value-title": "title", + "parameters": { + "type": 2 + } + }, + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Checklist", + "schema": { + "$ref": "#/definitions/Procedure" + }, + "x-nullable": true + } + } + } + }, + "/v1/Procedures/{procedureId}/ChecklistInstances": { + "get": { + "tags": ["Checklist Instances"], + "operationId": "Find_Checklist_Instances", + "summary": "Find Checklist Instance", + "description": "Search for a checklist instance by title.", + "x-ms-visibility": "important", + "parameters": [ + { + "type": "integer", + "name": "procedureId", + "description": "Select a checklist", + "x-ms-summary": "Procedure ID", + "in": "path", + "required": true, + "x-nullable": false, + "format": "int32", + "x-ms-url-encoding": "single", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Find_Checklist", + "value-path": "id", + "value-title": "title", + "parameters": { + "type": 2 + } + } + }, + { + "type": "string", + "name": "query", + "in": "query", + "x-nullable": true, + "required": false, + "x-ms-visibility": "important", + "description": "The title of the checklist instance.", + "x-ms-summary": "Instance Title" + } + ], + "responses": { + "200": { + "description": "Checklist Instances", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ChecklistInstance" + } + }, + "x-nullable": true + } + } + } + }, + "/v1/SecurityRoles": { + "get": { + "tags": ["Security Roles"], + "operationId": "SecurityRoles_IdTitle", + "summary": "Get Security Roles", + "description": "Retrieve a list of all security roles", + "x-ms-visibility": "internal", + "parameters": [], + "responses": { + "200": { + "description": "Security Roles", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "The unique id of the security role.", + "x-ms-summary": "Security Role ID", + "x-ms-visibility": "important" + }, + "title": { + "type": "string", + "format": "date-time", + "description": "The title of the security role.", + "x-ms-summary": "Security Role Title", + "x-ms-visibility": "important" + } + } + } + }, + "x-nullable": true + } + } + } + }, + "/v1/TimeZones": { + "get": { + "tags": ["Time Zones"], + "operationId": "TimeZones_Get", + "summary": "Get Time Zones", + "description": "Rectrieve a list of all time zones.", + "x-ms-visibility": "internal", + "parameters": [], + "responses": { + "200": { + "description": "Time Zones", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique ID of the time zone.", + "x-ms-summary": "Time Zone ID", + "x-ms-visibility": "important" + }, + "title": { + "type": "string", + "description": "The title of the time zone.", + "x-ms-summary": "Time Zone Title", + "x-ms-visibility": "important" + } + } + } + }, + "x-nullable": true + } + } + } + }, + "/v1/Users/{userId}": { + "get": { + "tags": ["Users"], + "operationId": "Users_Get", + "summary": "Get User", + "description": "Retrieves a specific user by ID", + "x-ms-visibility": "internal", + "parameters": [ + { + "type": "integer", + "name": "userId", + "in": "path", + "description": "Select the user.", + "x-ms-summary": "User ID", + "required": true, + "x-nullable": false, + "format": "int32", + "x-ms-url-encoding": "single", + "x-ms-dynamic-values": { + "operationId": "Find_User", + "value-path": "id", + "value-title": "email" + } + } + ], + "responses": { + "200": { + "description": "User", + "schema": { + "$ref": "#/definitions/User" + }, + "x-nullable": true + } + } + } + }, + "/v1/Users": { + "get": { + "tags": ["Users"], + "operationId": "Find_User", + "summary": "Find User", + "description": "Search for a user by name or email.", + "x-ms-visibility": "important", + "parameters": [ + { + "type": "string", + "name": "query", + "in": "query", + "x-nullable": true, + "required": false, + "x-ms-visibility": "important", + "description": "The name or email address of the user.", + "x-ms-summary": "Email Address Or Name" + } + ], + "responses": { + "200": { + "description": "Users", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/User" + } + }, + "x-nullable": true + } + } + }, + "post": { + "tags": ["Users"], + "operationId": "Users_Post", + "summary": "Add a New User", + "description": "Creates and invites a new user.", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "Create User Command", + "in": "body", + "schema": { + "type": "object", + "additionalProperties": false, + "required": [ + "securityRole", + "email", + "firstName", + "lastName", + "timeZoneId" + ], + "properties": { + "firstName": { + "type": "string", + "description": "The first name of the user.", + "x-ms-summary": "First Name", + "x-ms-visibility": "important" + }, + "lastName": { + "type": "string", + "description": "The last name of the user.", + "x-ms-summary": "Last Name", + "x-ms-visibility": "important" + }, + "email": { + "type": "string", + "description": "The email address of the user.", + "x-ms-summary": "Email", + "x-ms-visibility": "important" + }, + "securityRole": { + "type": "integer", + "format": "int32", + "description": "Select a security role.", + "x-ms-summary": "Security Role", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "SecurityRoles_IdTitle", + "value-path": "id", + "value-title": "title" + } + }, + "companyRoles": { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + "description": "Select the company roles.", + "x-ms-summary": "Company Roles", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "CompanyRoles_GetAll", + "value-path": "id", + "value-title": "title" + } + } + }, + "timeZoneId": { + "type": "string", + "description": "Select the user's timezone.", + "x-ms-summary": "Time Zone", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "TimeZones_Get", + "value-path": "id", + "value-title": "title" + } + } + } + }, + "x-nullable": true, + "x-ms-visibility": "important", + "required": true + } + ], + "responses": { + "200": { + "description": "User Created", + "schema": { + "type": "object", + "properties": {} + } + } + } + } + }, + "/v1/Webhook/events/checklist_start": { + "post": { + "tags": ["WebHooks"], + "summary": "When a checklist instance is started", + "description": "This operation triggers when a checklist instance is started.", + "operationId": "Checklist_Create_WebHook", + "x-ms-visibility": "important", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/WebhookRegistration" + } + ], + "responses": { + "200": { + "description": "Webhook Registered", + "schema": { + "$ref": "#/definitions/WebhookRegistered" + } + } + } + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/ChecklistInstance" + }, + "description": "Checklist Instance" + } + }, + "/v1/Webhook/events/new_comment": { + "post": { + "tags": ["WebHooks"], + "summary": "When a comment is added to a checklist", + "description": "This operation triggers when a new comment is added to a checklist.", + "operationId": "New_Comment_WebHook", + "x-ms-visibility": "important", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/WebhookRegistration" + } + ], + "responses": { + "200": { + "description": "Webhook Registered", + "schema": { + "$ref": "#/definitions/WebhookRegistered" + } + } + } + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/ChecklistComment" + }, + "description": "Checklist Comment" + } + }, + "/v1/Webhook/events/checklist_finish": { + "post": { + "tags": ["WebHooks"], + "summary": "When a checklist is finished", + "description": "This operation triggers when a checklist is finished.", + "operationId": "Finish_Checklist_WebHook", + "x-ms-visibility": "important", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/WebhookRegistration" + } + ], + "responses": { + "200": { + "description": "Webhook Registered", + "schema": { + "$ref": "#/definitions/WebhookRegistered" + } + } + } + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/ChecklistInstance" + }, + "description": "Checklist Finished" + } + }, + "/v1/Webhook/events/supervisor_invite": { + "post": { + "tags": ["WebHooks"], + "summary": "When a supervisor is invited", + "description": "This operation triggers when a supervisor invite is generated.", + "operationId": "Invite_Supervisor_WebHook", + "x-ms-visibility": "important", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/WebhookRegistration" + } + ], + "responses": { + "200": { + "description": "Webhook Registered", + "schema": { + "$ref": "#/definitions/WebhookRegistered" + } + } + } + }, + "x-ms-notification-content": { + "description": "Supervisor Invited", + "schema": { + "type": "object", + "properties": { + "instanceId": { + "type": "string", + "description": "The unique ID of the checklist instance.", + "x-ms-summary": "Instance ID", + "x-ms-visibility": "important" + }, + "instanceTitle": { + "type": "string", + "description": "The title of the checklist instance.", + "x-ms-summary": "Instance Title", + "x-ms-visibility": "important" + }, + "procedureId": { + "type": "integer", + "format": "int32", + "description": "The unique ID of the procedure.", + "x-ms-summary": "Procedure ID", + "x-ms-visibility": "important" + }, + "collaborator": { + "type": "string", + "description": "The email address of the supervisor", + "x-ms-summary": "Supervisor Email", + "x-ms-visibility": "important" + }, + "createdBy": { + "type": "string", + "description": "The email address of the user that invited the supervisor.", + "x-ms-summary": "User Email", + "x-ms-visibility": "important" + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time the invite was created.", + "x-ms-summary": "Invite Sent", + "x-ms-visibility": "important" + } + } + } + } + }, + "/v1/Webhook/events/generate_acceptance_pdf": { + "post": { + "tags": ["WebHooks"], + "summary": "When a procedure is accepted", + "description": "This operation triggers when a procedure is accepted.", + "operationId": "Generate_Acceptance_PDF_WebHook", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/WebhookRegistration" + } + ], + "x-ms-visibility": "important", + "responses": { + "200": { + "description": "Webhook Registered", + "schema": { + "$ref": "#/definitions/WebhookRegistered" + } + } + } + }, + "x-ms-notification-content": { + "description": "Procedure Acceptance", + "schema": { + "$ref": "#/definitions/ProcedureAcceptance" + } + } + }, + "/v1/Webhook/events/checklist_step_completed": { + "post": { + "tags": ["WebHooks"], + "summary": "When a checklist step is completed", + "description": "This operation triggers when a checklist step is completed.", + "operationId": "Checklist_Step_Completed_WebHook", + "x-ms-visibility": "important", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/WebhookRegistration" + } + ], + "responses": { + "200": { + "description": "Webhook Registered", + "schema": { + "$ref": "#/definitions/WebhookRegistered" + } + } + } + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/CompletedStep" + }, + "description": "Checklist Step Completed" + } + } + }, + "definitions": { + "ChecklistInstance": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique ID of the checklist instance.", + "x-ms-summary": "Instance ID", + "x-ms-visibility": "important" }, "procedureId": { - "description": "Select a checklist master", - "format": "int32", - "title": "Procedure ID", - "type": "integer", - "x-ms-dynamic-values": { - "operationId": "Find_Checklist", - "parameters": { - "type": 2 - }, - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Procedure ID", - "x-ms-visibility": "important" + "type": "integer", + "format": "int32", + "description": "The unique ID of the procedure.", + "x-ms-summary": "Procedure ID", + "x-ms-visibility": "important" }, "title": { - "description": "The title of the checklist instance", - "type": "string", - "x-ms-summary": "Title", - "x-ms-visibility": "important" + "type": "string", + "description": "The title of the checklist instance.", + "x-ms-summary": "Instance Title", + "x-ms-visibility": "important" }, - "userId": { - "description": "Select the user creating the instance", - "format": "int32", - "type": "integer", - "x-ms-dynamic-values": { - "operationId": "Find_User", - "value-path": "id", - "value-title": "email" - }, - "x-ms-summary": "User ID", - "x-ms-visibility": "important" - } - }, - "required": [ - "bot", - "procedureId", - "title", - "userId" - ], - "type": "object" - }, - "x-ms-visibility": "important" - } - ], - "responses": { - "200": { - "description": "Checklist instance created", - "schema": { - "$ref": "#/definitions/ChecklistInstance" - } - } - }, - "summary": "Create Checklist Instance", - "tags": [ - "Checklist Instances" - ], - "x-ms-visibility": "important" - } - }, - "/v1/ChecklistInstances/{instanceId}": { - "get": { - "description": "Retrieves a specific activated checklist instance", - "operationId": "ChecklistInstances_Get", - "parameters": [ - { - "description": "Select the checklist instance", - "format": "guid", - "in": "path", - "name": "instanceId", - "required": true, - "type": "string", - "x-ms-dynamic-values": { - "operationId": "Find_Checklist", - "parameters": { - "type": 2 - }, - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Instance ID", - "x-ms-visibility": "important", - "x-nullable": false - } - ], - "responses": { - "200": { - "description": "Checklist Instance", - "schema": { - "$ref": "#/definitions/ChecklistInstance" - }, - "x-nullable": true - } - }, - "summary": "Get A Checklist Instance", - "tags": [ - "Checklist Instances" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/ChecklistInstances/{instanceId}/Activity": { - "get": { - "description": "Retrieve all activity for a checklist instance", - "operationId": "ChecklistInstances_Activity", - "parameters": [ - { - "description": "Select the checklist instance", - "format": "guid", - "in": "path", - "name": "instanceId", - "required": true, - "type": "string", - "x-ms-dynamic-values": { - "operationId": "GetAll_ChecklistInstances", - "value-collection": "results", - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Instance Id", - "x-ms-visibility": "important", - "x-nullable": false - } - ], - "responses": { - "200": { - "description": "Checklist Activity", - "schema": { - "items": { - "properties": { - "occurred": { - "description": "The date and time the activity occurred.", + "url": { + "type": "string", + "description": "The URL to the checklist instance.", + "x-ms-summary": "Instance URL", + "x-ms-visibility": "advanced" + }, + "created": { + "type": "string", "format": "date-time", - "type": "string", - "x-ms-summary": "Occurred", + "description": "The date and time the checklist instance was started.", + "x-ms-summary": "Instance Created Date", "x-ms-visibility": "important" - }, - "title": { - "description": "A description of the activity that occurred.", + }, + "createdBy": { "type": "string", - "x-ms-summary": "Description", + "description": "The email address of the user who started the checklist instance.", + "x-ms-summary": "Instance User", "x-ms-visibility": "important" - } }, - "type": "object" - }, - "type": "array" - }, - "x-nullable": true - } - }, - "summary": "Get Checklist Instance Activity", - "tags": [ - "Checklist Instance Activity" - ], - "x-ms-visibility": "advanced" - } - }, - "/v1/ChecklistInstances/{instanceId}/Steps": { - "get": { - "description": "Find a step of a checklist instance", - "operationId": "Find_Steps", - "parameters": [ - { - "description": "Select the checklist instance", - "format": "guid", - "in": "path", - "name": "instanceId", - "required": true, - "type": "string", - "x-ms-dynamic-values": { - "operationId": "GetAll_ChecklistInstances", - "value-collection": "results", - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Instance Id", - "x-ms-visibility": "important", - "x-nullable": false - }, - { - "description": "Search for a step title", - "in": "query", - "name": "query", - "required": false, - "type": "string", - "x-ms-summary": "Step Title", - "x-ms-visibility": "important", - "x-nullable": true - } - ], - "responses": { - "200": { - "description": "Checklist Steps", - "schema": { - "items": { - "$ref": "#/definitions/ChecklistStep" - }, - "type": "array" - }, - "x-nullable": true - } - }, - "summary": "Find Checklist Step", - "tags": [ - "Checklist Instance Steps" - ], - "x-ms-visibility": "important" - } - }, - "/v1/ChecklistInstances/{instanceId}/Steps/{stepId}": { - "get": { - "description": "Retrieves a specific checklist step", - "operationId": "ChecklistSteps_Get", - "parameters": [ - { - "description": "Select the checklist instance", - "format": "guid", - "in": "path", - "name": "instanceId", - "required": true, - "type": "string", - "x-ms-dynamic-values": { - "operationId": "GetAll_ChecklistInstances", - "value-collection": "results", - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Instance Id", - "x-ms-visibility": "important", - "x-nullable": false - }, - { - "description": "Select the checklist step", - "format": "guid", - "in": "path", - "name": "stepId", - "required": true, - "type": "string", - "x-ms-dynamic-values": { - "operationId": "Find_Steps", - "parameters": { - "instanceId": { - "parameter": "instanceId" + "finished": { + "type": "string", + "format": "date-time", + "description": "The date and time the checklist instance was finished.", + "x-ms-summary": "Instance Finish Date", + "x-ms-visibility": "advanced" } - }, - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Step Id", - "x-ms-visibility": "important", - "x-nullable": false - } - ], - "responses": { - "200": { - "description": "Checklist Step", - "schema": { - "$ref": "#/definitions/ChecklistStep" - }, - "x-nullable": true - } - }, - "summary": "Get A Checklist Step", - "tags": [ - "Checklist Instance Steps" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/ChecklistInstances/{instanceId}/Steps/{stepId}/Complete": { - "post": { - "description": "Mark a specific step in a checklist instance as complete.", - "operationId": "ChecklistSteps_Complete", - "parameters": [ - { - "description": "Select the checklist instance", - "format": "guid", - "in": "path", - "name": "instanceId", - "required": true, - "type": "string", - "x-ms-dynamic-values": { - "operationId": "GetAll_ChecklistInstances", - "value-collection": "results", - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Instance Id", - "x-ms-visibility": "important", - "x-nullable": false - }, - { - "description": "Select the checklist step", - "format": "guid", - "in": "path", - "name": "stepId", - "required": true, - "type": "string", - "x-ms-dynamic-values": { - "operationId": "Find_Steps", - "parameters": { - "instanceId": { - "parameter": "instanceId" - } - }, - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Step Id", - "x-ms-visibility": "important", - "x-nullable": false - }, - { - "in": "body", - "name": "Complete Step Command", - "required": false, - "schema": { - "properties": { - "bot": { - "default": "Microsoft Power Automate", - "description": "The name of the bot that completed the checklist step", - "type": "string", - "x-ms-summary": "Bot Name", - "x-ms-visibility": "internal" - }, - "userId": { - "description": "Select the user completing the step", - "format": "int32", - "type": "integer", - "x-ms-dynamic-values": { - "operationId": "Find_User", - "value-path": "id", - "value-title": "email" - }, - "x-ms-summary": "User ID", - "x-ms-visibility": "important" - } - }, - "required": [ - "bot", - "userId" - ], - "type": "object" } - } - ], - "responses": { - "200": { - "description": "Checklist Step Completed" - } }, - "summary": "Complete a Checklist Step", - "tags": [ - "Checklist Instance Steps" - ], - "x-ms-visibility": "advanced" - } - }, - "/v1/Company": { - "get": { - "description": "Retrieves your company ID and Name", - "operationId": "Company_GetCompany", - "parameters": [], - "responses": { - "200": { - "description": "Company", - "schema": { - "properties": { + "ChecklistStep": { + "type": "object", + "properties": { "id": { - "description": "The unique ID of your company.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Company ID", - "x-ms-visibility": "important" + "type": "string", + "description": "The unique ID of the instance step.", + "x-ms-summary": "Step ID", + "x-ms-visibility": "important" }, "title": { - "description": "The name of the company registered with Way We Do", - "type": "string", - "x-ms-summary": "Company Title", - "x-ms-visibility": "important" + "type": "string", + "description": "The title of the instance step.", + "x-ms-summary": "Step Title", + "x-ms-visibility": "important" + }, + "ordinal": { + "type": "integer", + "format": "int32", + "description": "The number of the instance step.", + "x-ms-summary": "Step Number", + "x-ms-visibility": "important" } - }, - "type": "object" - }, - "x-nullable": true - } + } }, - "summary": "Get Company", - "tags": [ - "Company" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/CompanyRoles": { - "get": { - "description": "Retrieve all the company roles.", - "operationId": "CompanyRoles_GetAll", - "parameters": [], - "responses": { - "200": { - "description": "Company Roles", - "schema": { - "items": { - "properties": { - "id": { - "description": "The unique ID of the company role.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Role ID", - "x-ms-visibility": "important" - }, - "title": { - "description": "The name of the company role.", - "format": "date-time", + "CompletedStep": { + "type": "object", + "properties": { + "id": { "type": "string", - "x-ms-summary": "Role Title", + "description": "The unique ID of the checklist step completion.", + "x-ms-summary": "Completion ID", "x-ms-visibility": "important" - } }, - "type": "object" - }, - "type": "array" - }, - "x-nullable": true - } - }, - "summary": "Get Company Roles", - "tags": [ - "Company Roles" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/ProcedureAcceptances": { - "get": { - "description": "Retrieves a list of all procedure acceptances.", - "operationId": "ProcedureAcceptances_GetAll", - "parameters": [ - { - "$ref": "#/parameters/Limit" - }, - { - "$ref": "#/parameters/Offset" - } - ], - "responses": { - "200": { - "description": "Procedure Acceptances", - "schema": { - "properties": { - "_total": { - "description": "The total number of procedure acceptances.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Total", - "x-ms-visibility": "advanced" + "instanceId": { + "type": "string", + "description": "The unique ID of the checklist instance.", + "x-ms-summary": "Instance ID", + "x-ms-visibility": "important" }, - "results": { - "description": "The list of procedure acceptances.", - "items": { - "$ref": "#/definitions/ProcedureAcceptance" - }, - "type": "array", - "x-ms-summary": "Procedure Acceptances" + "procedureId": { + "type": "integer", + "format": "int32", + "description": "The unique ID of the procedure.", + "x-ms-summary": "Procedure ID", + "x-ms-visibility": "important" + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time the checklist step was completed.", + "x-ms-summary": "Step Completed Date", + "x-ms-visibility": "important" + }, + "createdBy": { + "type": "string", + "description": "The email address of the user that completed the checklist step.", + "x-ms-summary": "Completed By", + "x-ms-visibility": "important" + }, + "step": { + "$ref": "#/definitions/ChecklistStep" } - }, - "type": "object" - }, - "x-nullable": true - } + } }, - "summary": "Get All Procedure Acceptances", - "tags": [ - "Procedure Acceptance" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/Procedures": { - "get": { - "description": "Search for a checklist by title", - "operationId": "Find_Checklist", - "parameters": [ - { - "description": "The title of the checklist", - "in": "query", - "name": "query", - "required": false, - "type": "string", - "x-ms-summary": "Checklist Title", - "x-ms-visibility": "important", - "x-nullable": true - }, - { - "default": 2, - "description": "The type of procedure; either 1 (standard) or 2 (checklist).", - "format": "int32", - "in": "query", - "name": "type", - "required": true, - "type": "integer", - "x-ms-summary": "Procedure Type", - "x-ms-visibility": "internal", - "x-nullable": true - } - ], - "responses": { - "200": { - "description": "Checklists", - "schema": { - "items": { - "$ref": "#/definitions/Procedure" - }, - "type": "array" - }, - "x-nullable": true - } - }, - "summary": "Find Checklist", - "tags": [ - "Procedures" - ], - "x-ms-visibility": "important" - } - }, - "/v1/Procedures/{procedureId}": { - "get": { - "description": "Retrieves a specific checklist or procedure by ID.", - "operationId": "Procedures_Get", - "parameters": [ - { - "description": "Select a checklist", - "format": "int32", - "in": "path", - "name": "procedureId", - "required": true, - "type": "integer", - "x-ms-dynamic-values": { - "operationId": "Find_Checklist", - "parameters": { - "type": 2 - }, - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Procedure ID", - "x-ms-visibility": "important", - "x-nullable": false - } - ], - "responses": { - "200": { - "description": "Checklist", - "schema": { - "$ref": "#/definitions/Procedure" - }, - "x-nullable": true - } - }, - "summary": "Get A Checklist", - "tags": [ - "Procedures" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/Procedures/{procedureId}/ChecklistInstances": { - "get": { - "description": "Search for a checklist instance by title.", - "operationId": "Find_Checklist_Instances", - "parameters": [ - { - "description": "Select a checklist", - "format": "int32", - "in": "path", - "name": "procedureId", - "required": true, - "type": "integer", - "x-ms-dynamic-values": { - "operationId": "Find_Checklist", - "parameters": { - "type": 2 - }, - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Procedure ID", - "x-ms-visibility": "important", - "x-nullable": false - }, - { - "description": "The title of the checklist instance.", - "in": "query", - "name": "query", - "required": false, - "type": "string", - "x-ms-summary": "Instance Title", - "x-ms-visibility": "important", - "x-nullable": true - } - ], - "responses": { - "200": { - "description": "Checklist Instances", - "schema": { - "items": { - "$ref": "#/definitions/ChecklistInstance" - }, - "type": "array" - }, - "x-nullable": true - } - }, - "summary": "Find Checklist Instance", - "tags": [ - "Checklist Instances" - ], - "x-ms-visibility": "important" - } - }, - "/v1/SecurityRoles": { - "get": { - "description": "Retrieve a list of all security roles", - "operationId": "SecurityRoles_IdTitle", - "parameters": [], - "responses": { - "200": { - "description": "Security Roles", - "schema": { - "items": { - "properties": { - "id": { - "description": "The unique id of the security role.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Security Role ID", + "ChecklistComment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique ID of the comment.", + "x-ms-summary": "Comment ID", "x-ms-visibility": "important" - }, - "title": { - "description": "The title of the security role.", + }, + "type": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "description": "The type of comment; either 1 (standard) or 2 (attachment).", + "x-ms-summary": "Comment Type", + "x-ms-visibility": "advanced" + }, + "procedureId": { + "type": "integer", + "format": "int32", + "description": "The unique ID of the procedure.", + "x-ms-summary": "Procedure ID", + "x-ms-visibility": "advanced" + }, + "procedureTitle": { + "type": "string", + "description": "The title of the procedure.", + "x-ms-summary": "Procedure Title", + "x-ms-visibility": "important" + }, + "instanceId": { + "type": "string", + "description": "The unique ID of the checklist instance.", + "x-ms-summary": "Instance ID", + "x-ms-visibility": "advanced" + }, + "stepId": { + "type": "string", + "description": "The unique ID of the checklist step.", + "x-ms-summary": "Step ID", + "x-ms-visibility": "advanced" + }, + "instanceTitle": { + "type": "string", + "description": "The title of the checklist instance.", + "x-ms-summary": "Instance Title", + "x-ms-visibility": "important" + }, + "comment": { + "type": "string", + "description": "The comment text added to the step.", + "x-ms-summary": "Comment Text", + "x-ms-visibility": "important" + }, + "created": { + "type": "string", "format": "date-time", - "type": "string", - "x-ms-summary": "Security Role Title", + "description": "The date and time the comment was created.", + "x-ms-summary": "Comment Date", "x-ms-visibility": "important" - } }, - "type": "object" - }, - "type": "array" - }, - "x-nullable": true - } - }, - "summary": "Get Security Roles", - "tags": [ - "Security Roles" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/TimeZones": { - "get": { - "description": "Rectrieve a list of all time zones.", - "operationId": "TimeZones_Get", - "parameters": [], - "responses": { - "200": { - "description": "Time Zones", - "schema": { - "items": { - "properties": { - "id": { - "description": "The unique ID of the time zone.", + "createdBy": { "type": "string", - "x-ms-summary": "Time Zone ID", + "description": "The email address of the user who created the comment.", + "x-ms-summary": "Comment User", "x-ms-visibility": "important" - }, - "title": { - "description": "The title of the time zone.", - "type": "string", - "x-ms-summary": "Time Zone Title", - "x-ms-visibility": "important" - } }, - "type": "object" - }, - "type": "array" - }, - "x-nullable": true - } + "imageUrl": { + "type": "string", + "description": "The URL to the attached file. Valid for 5 minutes.", + "x-ms-summary": "Comment Attachment URL", + "x-ms-visibility": "important" + } + } }, - "summary": "Get Time Zones", - "tags": [ - "Time Zones" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/Users": { - "get": { - "description": "Search for a user by name or email.", - "operationId": "Find_User", - "parameters": [ - { - "description": "The name or email address of the user.", - "in": "query", - "name": "query", - "required": false, - "type": "string", - "x-ms-summary": "Email Address Or Name", - "x-ms-visibility": "important", - "x-nullable": true - } - ], - "responses": { - "200": { - "description": "Users", - "schema": { - "items": { - "$ref": "#/definitions/User" - }, - "type": "array" - }, - "x-nullable": true - } - }, - "summary": "Find User", - "tags": [ - "Users" - ], - "x-ms-visibility": "important" - }, - "post": { - "description": "Creates and invites a new user.", - "operationId": "Users_Post", - "parameters": [ - { - "in": "body", - "name": "Create User Command", - "required": true, - "schema": { - "additionalProperties": false, - "properties": { - "companyRoles": { - "items": { - "description": "Select the company roles.", - "format": "int32", + "Procedure": { + "type": "object", + "properties": { + "id": { "type": "integer", - "x-ms-dynamic-values": { - "operationId": "CompanyRoles_GetAll", - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Company Roles", + "format": "int32", + "description": "The unique ID of the procedure.", + "x-ms-summary": "Procedure ID", "x-ms-visibility": "important" - }, - "type": "array" }, - "email": { - "description": "The email address of the user.", - "type": "string", - "x-ms-summary": "Email", - "x-ms-visibility": "important" + "title": { + "type": "string", + "description": "The title of the procedure.", + "x-ms-summary": "Procedure Title", + "x-ms-visibility": "important" + }, + "status": { + "type": "string", + "description": "The publishing status of the procedure.", + "x-ms-summary": "Procedure Status", + "x-ms-visibility": "advanced" + }, + "summary": { + "type": "string", + "description": "The summary of the procedure.", + "x-ms-summary": "Procedure Summary", + "x-ms-visibility": "important" + }, + "createdBy": { + "type": "string", + "description": "The email of the user that created the procedure.", + "x-ms-summary": "Created By", + "x-ms-visibility": "important" + }, + "url": { + "type": "string", + "description": "The URL of the procedure.", + "x-ms-summary": "Procedure URL", + "x-ms-visibility": "important" + }, + "restricted": { + "type": "boolean", + "description": "Wether the procedure is restricted or not.", + "x-ms-summary": "Restricted", + "x-ms-visibility": "advanced", + "enum": [ + true, + false + ] + }, + "type": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "description": "The type of procedure; 1 (standard) or 2 (checklist)", + "x-ms-summary": "Procedure Type", + "x-ms-visibility": "advanced" + } + } + }, + "ProcedureAcceptance": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "The unique ID of the procedure acceptance", + "x-ms-summary": "Acceptance ID", + "x-ms-visibility": "important" + }, + "accepted": { + "type": "string", + "format": "date-time", + "description": "The date and time the procedure was accepted.", + "x-ms-summary": "Accepted", + "x-ms-visibility": "advanced" + }, + "createdBy": { + "type": "string", + "description": "The email address of the user that accepted the procedure.", + "x-ms-summary": "Accepted By", + "x-ms-visibility": "important" + }, + "fileName": { + "type": "string", + "description": "The file name of the generated PDF.", + "x-ms-summary": "PDF File Name", + "x-ms-visibility": "important" + }, + "attachmentUrl": { + "type": "string", + "description": "The URL to the generated PDF. Valid for 5 minutes.", + "x-ms-summary": "PDF URL", + "x-ms-visibility": "important" + }, + "procedureTitle": { + "type": "string", + "description": "The title of the accepted procedure.", + "x-ms-summary": "Procedure Title", + "x-ms-visibility": "important" + } + } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "The unique ID of the user.", + "x-ms-summary": "User ID", + "x-ms-visibility": "important" }, "firstName": { - "description": "The first name of the user.", - "type": "string", - "x-ms-summary": "First Name", - "x-ms-visibility": "important" + "type": "string", + "description": "The first name of the user.", + "x-ms-summary": "First Name", + "x-ms-visibility": "important" }, "lastName": { - "description": "The last name of the user.", - "type": "string", - "x-ms-summary": "Last Name", - "x-ms-visibility": "important" + "type": "string", + "description": "The last name of the user.", + "x-ms-summary": "Last Name", + "x-ms-visibility": "important" }, - "securityRole": { - "description": "Select a security role.", - "format": "int32", - "type": "integer", - "x-ms-dynamic-values": { - "operationId": "SecurityRoles_IdTitle", - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Security Role", - "x-ms-visibility": "important" - }, - "timeZoneId": { - "description": "Select the user's timezone.", - "type": "string", - "x-ms-dynamic-values": { - "operationId": "TimeZones_Get", - "value-path": "id", - "value-title": "title" - }, - "x-ms-summary": "Time Zone", - "x-ms-visibility": "important" + "email": { + "type": "string", + "description": "The email address of the user.", + "x-ms-summary": "Email", + "x-ms-visibility": "important" } - }, - "required": [ - "securityRole", - "companyRoles", - "email", - "firstName", - "lastName", - "timeZoneId" - ], - "type": "object" - }, - "x-ms-visibility": "important", - "x-nullable": true - } - ], - "responses": { - "200": { - "description": "User Created", - "schema": { - "properties": {}, - "type": "object" } - } }, - "summary": "Add a New User", - "tags": [ - "Users" - ], - "x-ms-visibility": "important" - } + "WebhookRegistered" : { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "The unique ID of the Webhook registration.", + "x-ms-summary": "Webhook ID", + "x-ms-visibility": "internal" + }, + "callbackurl": { + "type": "string", + "description": "The URL to call when action occurs.", + "x-ms-summary": "Callback URL", + "x-ms-visibility": "internal" + }, + "created": { + "type": "string", + "format": "date-time", + "description": "The date and time the webhook was registered.", + "x-ms-summary": "Created Date", + "x-ms-visibility": "internal" + }, + "webHookEvent": { + "type": "string", + "description": "The name of the webhook event.", + "x-ms-summary": "Webhook Event", + "x-ms-visibility": "internal" + } + } + } }, - "/v1/Users/{userId}": { - "get": { - "description": "Retrieves a specific user by ID", - "operationId": "Users_Get", - "parameters": [ - { - "description": "Select the user.", - "format": "int32", - "in": "path", - "name": "userId", - "required": true, + "parameters": { + "Limit": { "type": "integer", - "x-ms-dynamic-values": { - "operationId": "Find_User", - "value-path": "id", - "value-title": "email" - }, - "x-ms-summary": "User ID", - "x-nullable": false - } - ], - "responses": { - "200": { - "description": "User", - "schema": { - "$ref": "#/definitions/User" - }, - "x-nullable": true - } + "name": "limit", + "in": "query", + "x-nullable": false, + "format": "int32", + "default": 20, + "description": "Maximum number of results to fetch.", + "x-ms-summary": "Limit", + "required": false, + "x-ms-visibility": "advanced" }, - "summary": "Get User", - "tags": [ - "Users" - ], - "x-ms-visibility": "internal" - } - }, - "/v1/Webhook/events/checklist_finish": { - "post": { - "description": "This operation triggers when a checklst is finished.", - "operationId": "Finish_Checklist_WebHook", - "parameters": [ - { - "$ref": "#/parameters/WebhookRegistration" - } - ], - "responses": { - "200": { - "description": "Webhook Registered", - "schema": { - "$ref": "#/definitions/WebhookRegistered" - } - } + "Offset": { + "type": "integer", + "name": "offset", + "in": "query", + "x-nullable": false, + "format": "int32", + "default": 0, + "description": "The number of records skipped.", + "x-ms-summary": "Offset", + "required": false, + "x-ms-visibility": "advanced" }, - "summary": "When a checklist is finished", - "tags": [ - "WebHooks" - ], - "x-ms-trigger": "single", - "x-ms-visibility": "important" - }, - "x-ms-notification-content": { - "description": "Checklist Finished", - "schema": { - "properties": { - "bot": { - "description": "The name of the bot that created the checklist instance", - "type": "string", - "x-ms-summary": "Bot Name", - "x-ms-visibility": "internal" + "WebhookRegistration": { + "name": "Webhook Registration", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "description": "The URL to call when action occurs.", + "x-ms-summary": "Callback URL", + "x-ms-visibility": "internal", + "x-ms-notification-url": true + } + }, + "required": ["callbackUrl"] }, - "created": { - "description": "The date and time the checklist instance was started.", - "format": "date-time", - "type": "string", - "x-ms-summary": "Instance Created Date", - "x-ms-visibility": "important" - }, - "createdBy": { - "description": "The email address of the user that finished the checklist instance.", - "type": "string", - "x-ms-summary": "Finshed By", - "x-ms-visibility": "important" - }, - "finished": { - "description": "The date and time the checklist instance was finished.", - "format": "date-time", - "type": "string", - "x-ms-summary": "Instance Finish Date", - "x-ms-visibility": "important" - }, - "id": { - "description": "The unique ID of the checklist instance.", - "type": "string", - "x-ms-summary": "Instance ID", - "x-ms-visibility": "important" - }, - "procedureId": { - "description": "The unique ID of the procedure.", - "format": "int32", - "type": "integer", - "x-ms-summary": "Procedure ID", - "x-ms-visibility": "important" - }, - "title": { - "description": "The title of the checklist instance.", - "type": "string", - "x-ms-summary": "Instance Title", - "x-ms-visibility": "important" - }, - "url": { - "description": "The URL to the checklist instance.", - "type": "string", - "x-ms-summary": "Instance URL", - "x-ms-visibility": "advanced" - } - }, - "type": "object" + "x-ms-visibility": "important" } - } }, - "/v1/Webhook/events/checklist_start": { - "post": { - "description": "This operation triggers when a checklist instance is started.", - "operationId": "Checklist_Create_WebHook", - "parameters": [ - { - "$ref": "#/parameters/WebhookRegistration" - } - ], - "responses": { - "200": { - "description": "Webhook Registered", - "schema": { - "$ref": "#/definitions/WebhookRegistered" - } - } - }, - "summary": "When a checklist instance is started", - "tags": [ - "WebHooks" - ], - "x-ms-trigger": "single", - "x-ms-visibility": "important" - }, - "x-ms-notification-content": { - "description": "Checklist Instance", - "schema": { - "$ref": "#/definitions/ChecklistInstance" + "responses": {}, + "securityDefinitions": { + "apikey": { + "type": "apiKey", + "name": "Authorization", + "in": "header" } - } }, - "/v1/Webhook/events/generate_acceptance_pdf": { - "post": { - "description": "This operation triggers when a procedure is accepted.", - "operationId": "Generate_Acceptance_PDF_WebHook", - "parameters": [ - { - "$ref": "#/parameters/WebhookRegistration" - } - ], - "responses": { - "200": { - "description": "Webhook Registered", - "schema": { - "$ref": "#/definitions/WebhookRegistered" - } - } - }, - "summary": "When a procedure is accepted", - "tags": [ - "WebHooks" - ], - "x-ms-trigger": "single", - "x-ms-visibility": "important" - }, - "x-ms-notification-content": { - "description": "Procedure Acceptance", - "schema": { - "$ref": "#/definitions/ProcedureAcceptance" - } - } - }, - "/v1/Webhook/events/new_comment": { - "post": { - "description": "This operation triggers when a new comment is added to a checklist.", - "operationId": "New_Comment_WebHook", - "parameters": [ - { - "$ref": "#/parameters/WebhookRegistration" - } - ], - "responses": { - "200": { - "description": "Webhook Registered", - "schema": { - "$ref": "#/definitions/WebhookRegistered" - } - } - }, - "summary": "When a comment is added to a checklist", - "tags": [ - "WebHooks" - ], - "x-ms-trigger": "single", - "x-ms-visibility": "important" - }, - "x-ms-notification-content": { - "description": "Checklist Comment", - "schema": { - "$ref": "#/definitions/ChecklistComment" - } - } - }, - "/v1/Webhook/events/supervisor_invite": { - "post": { - "description": "This operation triggers when a supervisor invite is generated.", - "operationId": "Invite_Supervisor_WebHook", - "parameters": [ - { - "$ref": "#/parameters/WebhookRegistration" - } - ], - "responses": { - "200": { - "description": "Webhook Registered", - "schema": { - "$ref": "#/definitions/WebhookRegistered" - } - } - }, - "summary": "When a supervisor is invited", - "tags": [ - "WebHooks" - ], - "x-ms-trigger": "single", - "x-ms-visibility": "important" - }, - "x-ms-notification-content": { - "description": "Supervisor Invited", - "schema": { - "properties": { - "collaborator": { - "description": "The email address of the supervisor", - "title": "collaborator", - "type": "string", - "x-ms-summary": "Supervisor Email", - "x-ms-visibility": "important" - }, - "created": { - "description": "The date and time the invite was created.", - "format": "date-time", - "title": "created", - "type": "string", - "x-ms-summary": "Invite Sent", - "x-ms-visibility": "important" - }, - "createdBy": { - "description": "The email address of the user that invited the supervisor.", - "title": "createdBy", - "type": "string", - "x-ms-summary": "User Email", - "x-ms-visibility": "important" - }, - "instanceTitle": { - "description": "The title of the checklist instance.", - "title": "instanceTitle", - "type": "string", - "x-ms-summary": "Instance Title", - "x-ms-visibility": "important" - } - }, - "type": "object" - } - } - } - }, - "produces": [ - "application/json" - ], - "responses": {}, - "schemes": [ - "https" - ], - "security": [], - "securityDefinitions": { - "apikey": { - "in": "header", - "name": "Authorization", - "type": "apiKey" - } - }, - "swagger": "2.0", - "tags": [], - "x-generator": "NSwag v11.11.2.0 (NJsonSchema v9.9.14.0 (Newtonsoft.Json v10.0.0.0))" -} \ No newline at end of file + "security": [], + "tags": [], + "x-generator": "NSwag v11.11.2.0 (NJsonSchema v9.9.14.0 (Newtonsoft.Json v10.0.0.0))" +} diff --git a/certified-connectors/Way We Do/apiProperties.json b/certified-connectors/Way We Do/apiProperties.json index 016860fa5..65176ef07 100644 --- a/certified-connectors/Way We Do/apiProperties.json +++ b/certified-connectors/Way We Do/apiProperties.json @@ -19,6 +19,8 @@ } } }, - "iconBrandColor": "#52B7BD" + "iconBrandColor": "#52B7BD", + "publisher": "Way We Do", + "stackOwner": "Way We Do" } -} \ No newline at end of file +} diff --git a/certified-connectors/Way We Do/readme.md b/certified-connectors/Way We Do/readme.md index 644501d37..50dee9406 100644 --- a/certified-connectors/Way We Do/readme.md +++ b/certified-connectors/Way We Do/readme.md @@ -1,4 +1,4 @@ - + ## Way We Do Way We Do enables teams to actively use repeatable policies, procedures, processes and playbooks in their day to day workflows to increase efficiency, quality and compliance. This connector offers the ability to integrate your other applications with Way We Do. @@ -26,4 +26,4 @@ The connector supports the following operations: ## Deployment instructions -Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as custom connector in Microsoft Power Automate and Power Apps. \ No newline at end of file +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as custom connector in Microsoft Power Automate and Power Apps. From dce7b906ffd7ed26ff6538d25421feb76dd41478 Mon Sep 17 00:00:00 2001 From: Crispin Koech Date: Wed, 26 Aug 2020 23:23:43 +0300 Subject: [PATCH 026/347] Update Africa's Talking Payments connector (#405) Co-authored-by: Crispin Kipruto --- .../Africa's Talking Payments/README.md | 16 +- .../apiDefinition.swagger.json | 780 +----------------- .../apiProperties.json | 21 + 3 files changed, 48 insertions(+), 769 deletions(-) diff --git a/certified-connectors/Africa's Talking Payments/README.md b/certified-connectors/Africa's Talking Payments/README.md index 578617a63..9e2f12e32 100644 --- a/certified-connectors/Africa's Talking Payments/README.md +++ b/certified-connectors/Africa's Talking Payments/README.md @@ -1,21 +1,23 @@ ## Africa's Talking Payments -Africa's Talking Payments provides a powerful API that allows you to charge and send payments to more than 300 million mobile, bank and card account holders across Africa. This connectors exposes a couple of operations that allow you to seamlessly receive payments from payment providers, as well as initiate payments going out to your customers. +Africa's Talking Payments provides a powerful API that allows you to charge and send payments to more than 300 million mobile account holders across Africa. This connectors exposes a couple of operations that allow you to seamlessly receive payments from payment providers, as well as initiate payments going out to your customers. ## Pre-requisites In order to use this connector, you will need the following: * An account with Africa's Talking; you can sign up [here](https://account.africastalking.com/auth/register?next=%2Fauth%2Fsignup). -* A live prod application; you can create one after registering. -* A payments product; you can request for one after you've registered. +* An application (sandbox or production). By default, a sandbox app is created for you when you sign up but you can create a production application afterwards if you need to use a live product. +* A payments product. If using a sandbox application, you can go ahead and create one under [`Payments > Products`](https://account.africastalking.com/apps/sandbox/payments/products). For a prod application, you'll have to request for a product first. -Once you've signed up and you've created a live application, generate a new API Key for that application; you will use this key to authenticate your requests from our Payments connector. +Once you've signed up and you have an application, generate a new API Key for that application; you will use this key to authenticate your requests from our Payments connector. ## Authentication. This connector uses `API Key` authentication (see steps above on how to obtain one). When creating a new connector (in Power Apps/Logic Apps), you'll be required to provide an API Key. +You'll also be required to select an environment to use with this connector, either `sandbox` or `production`. Note that when using the sandbox environment, the username field to be used in all operations should be `sandbox`; otherwise, the username will be your prod application username. + ## Supported Operations This connector supports the following operations: @@ -25,14 +27,8 @@ This connector supports the following operations: * `Mobile B2B (Business to Business)`: Send payments to businesses e.g banks from your Payment Wallet. * `Fetch Wallet Balance`: Fetch your wallet balance. * `Wallet Transfer`: Transfer money from one Payment Product to another Payment Product hosted on Africa’s Talking. -* `Card Checkout`: Collect money into your Payment Wallet by initiating transactions that deduct money from a customers Debit or Credit Card. -* `Card Checkout Validate`: Validate card checkout charge requests. -* `Bank Checkout`: Collect money into your payment wallet by initiating transactions that deduct money from a customers bank account. -* `Bank Checkout Validate`: Validate bank checkout charge requests. * `Fetch Wallet Transactions`: Fetch your wallet transactions. -* `Bank Transfer`: Move money from your Payment Wallet to bank accounts. * `Top Up Stash`: Move money from a Payment Product to an Africa’s Talking application stash. * `Fetch Product Transactions`: Fetch transactions of a particular payment product. -* `Find Transaction`: Find a particular payment transaction. For more information on parameters accepted/required by the connector's operations, please refer to our [documentation](https://build.at-labs.io/docs/payments%2Foverview). diff --git a/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json b/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json index dd86c7039..208bc5fed 100644 --- a/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json +++ b/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json @@ -103,7 +103,9 @@ "metadata": { "type": "object", "properties": {}, - "description": "metadata" + "description": "metadata", + "default": {}, + "x-ms-visibility": "advanced" } }, "default": { @@ -252,7 +254,9 @@ "metadata": { "type": "object", "properties": {}, - "description": "metadata" + "description": "metadata", + "default": {}, + "x-ms-visibility": "advanced" } }, "default": { @@ -301,451 +305,10 @@ "x-ms-visibility": "important" } }, - "/card/checkout/charge": { - "post": { - "summary": "Card Checkout", - "description": "Collect money into your Payment Wallet by initiating transactions that deduct money from a customers Debit or Credit Card.", - "operationId": "CardCheckout", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Your application's username.", - "title": "Username", - "x-ms-visibility": "important" - }, - "productName": { - "type": "string", - "description": "Your Africa\u2019s Talking Payment Product to initiate this transaction.", - "title": "Product Name", - "x-ms-visibility": "important" - }, - "paymentCard": { - "type": "object", - "properties": { - "number": { - "type": "string", - "description": "The payment card number.", - "title": "Card Number", - "x-ms-visibility": "important" - }, - "cvvNumber": { - "type": "integer", - "format": "int32", - "description": "3 or 4 digit payment card verification value.", - "title": "CVV Number", - "x-ms-visibility": "important" - }, - "expiryMonth": { - "type": "integer", - "format": "int32", - "description": "Expiration month on the payment card.", - "title": "Expiry Month", - "x-ms-visibility": "important" - }, - "expiryYear": { - "type": "integer", - "format": "int32", - "description": "Expiration year on the payment card.", - "title": "Expiry Year", - "x-ms-visibility": "important" - }, - "countryCode": { - "type": "string", - "description": "Country where the payment card was issued.", - "title": "Country Code", - "x-ms-visibility": "important", - "enum": [ - "NG" - ] - }, - "authToken": { - "type": "string", - "description": "The payment card's ATM PIN", - "title": "Auth Token", - "x-ms-visibility": "important" - } - }, - "description": "paymentCard", - "required": [ - "number", - "cvvNumber", - "expiryMonth", - "expiryYear", - "countryCode", - "authToken" - ] - }, - "currencyCode": { - "type": "string", - "description": "Currency code for the value of this transaction.", - "title": "Currency Code", - "x-ms-visibility": "important" - }, - "amount": { - "type": "number", - "format": "float", - "description": "Amount - in the provided currency - that the client is expected to confirm.", - "title": "Amount", - "x-ms-visibility": "important" - }, - "narration": { - "type": "string", - "description": "Short description of the transaction that can be displayed on the clients statement.", - "title": "Narration.", - "x-ms-visibility": "important" - }, - "metadata": { - "type": "object", - "properties": {}, - "description": "metadata" - } - }, - "default": { - "username": "sandbox", - "productName": "TestProduct", - "paymentCard": { - "number": "1234123412341234", - "cvvNumber": 123, - "expiryMonth": 12, - "expiryYear": 2020, - "countryCode": "NG", - "authToken": "1234" - }, - "currencyCode": "KES", - "amount": 100, - "narration": "Sent this amount to you.", - "metadata": {} - }, - "x-ms-visibility": "important", - "required": [ - "username", - "productName", - "paymentCard", - "amount", - "currencyCode", - "narration" - ] - }, - "required": true, - "x-ms-visibility": "important" - } - ], - "responses": { - "201": { - "description": "201", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "status" - }, - "description": { - "type": "string", - "description": "description" - }, - "transactionId": { - "type": "string", - "description": "transactionId" - } - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/card/checkout/validate": { - "post": { - "summary": "Card Checkout Validate", - "description": "Validate card checkout charge requests.", - "operationId": "CardCheckoutValidate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Your application username.", - "title": "Username", - "x-ms-visibility": "important" - }, - "transactionId": { - "type": "string", - "description": "The id of the transaction your application wants to validate.", - "title": "Transaction Id", - "x-ms-visibility": "important" - }, - "otp": { - "type": "string", - "description": "A one-time password that was sent to the client that owns the payment card being charged.", - "title": "OTP", - "x-ms-visibility": "important" - } - }, - "default": { - "username": "sandbox", - "transactionId": "transactionId", - "otp": "1234" - }, - "x-ms-visibility": "important", - "required": [ - "otp", - "transactionId", - "username" - ] - }, - "required": true, - "x-ms-visibility": "important" - } - ], - "responses": { - "201": { - "description": "201", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "status" - }, - "description": { - "type": "string", - "description": "description" - }, - "checkoutToken": { - "type": "string", - "description": "checkoutToken" - } - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/bank/checkout/validate": { - "post": { - "summary": "Bank Checkout Validate", - "description": "Validate bank checkout charge requests.", - "operationId": "BankCheckoutValidate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Your application username.", - "title": "Username", - "x-ms-visibility": "important" - }, - "transactionId": { - "type": "string", - "description": "The id of the transaction your application wants to validate.", - "title": "Transaction Id", - "x-ms-visibility": "important" - }, - "otp": { - "type": "string", - "description": "A One Time Password that was sent to the client that owns the bank account being charged.", - "title": "OTP", - "x-ms-visibility": "important" - } - }, - "default": { - "username": "sandbox", - "transactionId": "ATPid_f55d7d8a0853de893cde800d6ac1a826", - "otp": "12345" - }, - "x-ms-visibility": "important", - "required": [ - "otp", - "transactionId", - "username" - ] - }, - "required": true, - "x-ms-visibility": "important" - } - ], - "responses": { - "201": { - "description": "201", - "schema": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "description" - }, - "status": { - "type": "string", - "description": "status" - } - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/bank/checkout/charge": { - "post": { - "summary": "Bank Checkout", - "description": "Collect money into your payment wallet by initiating transactions that deduct money from a customers bank account.", - "operationId": "BankCheckout", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Your application username.", - "title": "Username", - "x-ms-visibility": "important" - }, - "productName": { - "type": "string", - "description": "Africa\u2019s Talking Payment Product to initiate this transaction.", - "title": "Product Name", - "x-ms-visibility": "important" - }, - "bankAccount": { - "type": "object", - "properties": { - "accountName": { - "type": "string", - "description": "Bank account name.", - "title": "Account Name", - "x-ms-visibility": "important" - }, - "accountNumber": { - "type": "string", - "description": "Bank account number.", - "title": "Account Number", - "x-ms-visibility": "important" - }, - "bankCode": { - "type": "integer", - "format": "int32", - "description": "6-Digit Integer code for the bank that we allocate.", - "title": "Bank Code", - "x-ms-visibility": "important" - }, - "dateOfBirth": { - "type": "string", - "description": "Date of birth of the account owner (Required for Zenith Nigeria).", - "title": "Date of Birth", - "format": "date-time", - "x-ms-visibility": "advanced" - } - }, - "description": "bankAccount", - "required": [ - "accountName", - "accountNumber", - "bankCode" - ] - }, - "currencyCode": { - "type": "string", - "description": "Currency code for the value of this transaction.", - "title": "Currency Code", - "x-ms-visibility": "important", - "enum": [ - "KES", - "UGX", - "TZS", - "USD" - ] - }, - "amount": { - "type": "number", - "format": "float", - "description": "Amount - in the provided currency - that the client is expected to confirm.", - "title": "Amount", - "x-ms-visibility": "important" - }, - "narration": { - "type": "string", - "description": "Short description of the transaction that can be displayed on the clients statement.", - "title": "Narration", - "x-ms-visibility": "important" - }, - "metadata": { - "type": "object", - "properties": {}, - "description": "metadata" - } - }, - "default": { - "username": "sandbox", - "productName": "TestProduct", - "bankAccount": { - "accountName": "Test Account", - "accountNumber": "1234567890", - "bankCode": 234001, - "dateOfBirth": "1990-12-24" - }, - "currencyCode": "KES", - "amount": 1000, - "narration": "Paid for something", - "metadata": {} - }, - "required": [ - "username", - "productName", - "bankAccount", - "currencyCode", - "amount", - "narration" - ], - "x-ms-visibility": "important" - }, - "required": true, - "x-ms-visibility": "important" - } - ], - "responses": { - "201": { - "description": "201", - "schema": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "description" - }, - "status": { - "type": "string", - "description": "status" - }, - "transactionId": { - "type": "string", - "description": "transactionId" - } - } - } - } - }, - "x-ms-visibility": "important" - } - }, + "/card/checkout/charge": {}, + "/card/checkout/validate": {}, + "/bank/checkout/validate": {}, + "/bank/checkout/charge": {}, "/query/wallet/fetch": { "get": { "summary": "Fetch Wallet Transactions", @@ -946,179 +509,7 @@ } } }, - "/bank/transfer": { - "post": { - "summary": "Bank Transfer", - "description": "Move money from your Payment Wallet to bank accounts.", - "operationId": "BankTransfer", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "username": { - "type": "string", - "description": "Your application username.", - "title": "Username", - "x-ms-visibility": "important" - }, - "productName": { - "type": "string", - "description": "Africa\u2019s Talking Payment product to initiate this transaction.", - "title": "Product Name", - "x-ms-visibility": "important" - }, - "recipients": { - "type": "array", - "items": { - "type": "object", - "properties": { - "bankAccount": { - "type": "object", - "properties": { - "accountName": { - "type": "string", - "description": "Bank account name.", - "title": "Account Name", - "x-ms-visibility": "important" - }, - "accountNumber": { - "type": "string", - "description": "Bank Account Number.", - "title": "Account Number", - "x-ms-visibility": "important" - }, - "bankCode": { - "type": "integer", - "format": "int32", - "description": "6-Digit Integer code for the bank that we allocate.", - "title": "Bank Code", - "x-ms-visibility": "important" - } - }, - "description": "bankAccount", - "required": [ - "accountName", - "accountNumber", - "bankCode" - ] - }, - "dateOfBirth": { - "type": "string", - "description": "Date of birth of the account owner (Required for Zenith Nigeria).", - "title": "Date of Birth", - "x-ms-visibility": "advanced" - }, - "currencyCode": { - "type": "string", - "description": "Currency code for the value of this transaction.", - "title": "Currency Code", - "x-ms-visibility": "important", - "enum": [ - "KES", - "UGX", - "USD", - "TZS" - ] - }, - "amount": { - "type": "number", - "format": "float", - "description": "Amount - in the provided currency - that the client is expected to receive.", - "title": "Amount", - "x-ms-visibility": "important" - }, - "narration": { - "type": "string", - "description": "Short description of the transaction that can be displayed on the clients statement.", - "title": "Narration", - "x-ms-visibility": "important" - }, - "metadata": { - "type": "object", - "properties": {}, - "description": "metadata" - } - }, - "required": [ - "bankAccount", - "currencyCode", - "amount", - "narration" - ] - }, - "description": "recipients" - } - }, - "default": { - "username": "sandbox", - "productName": "TestProduct", - "recipients": [ - { - "bankAccount": { - "accountName": "Test Account Name", - "accountNumber": "1234567890", - "bankCode": 234008 - }, - "dateOfBirth": "1990-21-24", - "currencyCode": "KES", - "amount": 1000, - "narration": "Transfered this amount to an account", - "metadata": {} - } - ] - }, - "x-ms-visibility": "important", - "required": [ - "username", - "productName", - "recipients" - ] - }, - "required": true, - "x-ms-visibility": "important" - } - ], - "responses": { - "201": { - "description": "201", - "schema": { - "type": "object", - "properties": { - "entries": { - "type": "array", - "items": { - "type": "object", - "properties": { - "accountNumber": { - "type": "string", - "description": "accountNumber" - }, - "status": { - "type": "string", - "description": "status" - }, - "transactionFee": { - "type": "string", - "description": "transactionFee" - }, - "transactionId": { - "type": "string", - "description": "transactionId" - } - } - }, - "description": "entries" - } - } - } - } - }, - "x-ms-visibility": "important" - } - }, + "/bank/transfer": {}, "/topup/stash": { "post": { "summary": "Top Up Stash", @@ -1165,7 +556,9 @@ "metadata": { "type": "object", "properties": {}, - "description": "metadata" + "description": "metadata", + "default": {}, + "x-ms-visibility": "advanced" } }, "default": { @@ -1482,142 +875,7 @@ "x-ms-visibility": "important" } }, - "/query/transaction/find": { - "get": { - "summary": "Find Transaction", - "description": "Find a particular payment transaction.", - "operationId": "FindTransaction", - "parameters": [ - { - "name": "username", - "in": "query", - "type": "string", - "required": true, - "x-ms-visibility": "important", - "description": "Your application username.", - "x-ms-summary": "Username" - }, - { - "name": "transactionId", - "in": "query", - "type": "string", - "required": true, - "x-ms-visibility": "important", - "description": "ID of the transaction you would like to find.", - "x-ms-summary": "Transaction Id" - } - ], - "responses": { - "200": { - "description": "200", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "status" - }, - "data": { - "type": "object", - "properties": { - "requestMetadata": { - "type": "object", - "properties": { - "reason": { - "type": "string", - "description": "reason" - } - }, - "description": "requestMetadata" - }, - "sourceType": { - "type": "string", - "description": "sourceType" - }, - "source": { - "type": "string", - "description": "source" - }, - "provider": { - "type": "string", - "description": "provider" - }, - "destinationType": { - "type": "string", - "description": "destinationType" - }, - "description": { - "type": "string", - "description": "description" - }, - "providerChannel": { - "type": "string", - "description": "providerChannel" - }, - "transactionFee": { - "type": "string", - "description": "transactionFee" - }, - "providerRefId": { - "type": "string", - "description": "providerRefId" - }, - "providerMetadata": { - "type": "object", - "properties": { - "recipientIsRegistered": { - "type": "string", - "description": "recipientIsRegistered" - }, - "recipientName": { - "type": "string", - "description": "recipientName" - } - }, - "description": "providerMetadata" - }, - "status": { - "type": "string", - "description": "status" - }, - "productName": { - "type": "string", - "description": "productName" - }, - "category": { - "type": "string", - "description": "category" - }, - "transactionDate": { - "type": "string", - "description": "transactionDate" - }, - "destination": { - "type": "string", - "description": "destination" - }, - "value": { - "type": "string", - "description": "value" - }, - "transactionId": { - "type": "string", - "description": "transactionId" - }, - "creationTime": { - "type": "string", - "description": "creationTime" - } - }, - "description": "data" - } - } - } - } - }, - "x-ms-visibility": "important" - } - }, + "/query/transaction/find": {}, "/mobile/checkout/request": { "post": { "summary": "Mobile Checkout", @@ -1676,7 +934,9 @@ "metadata": { "type": "object", "properties": {}, - "description": "metadata" + "description": "metadata", + "default": {}, + "x-ms-visibility": "advanced" } }, "default": { @@ -1811,7 +1071,9 @@ "metadata": { "type": "object", "properties": {}, - "description": "metadata" + "description": "metadata", + "default": {}, + "x-ms-visibility": "advanced" } }, "required": [ diff --git a/certified-connectors/Africa's Talking Payments/apiProperties.json b/certified-connectors/Africa's Talking Payments/apiProperties.json index 517343a83..5629336f6 100644 --- a/certified-connectors/Africa's Talking Payments/apiProperties.json +++ b/certified-connectors/Africa's Talking Payments/apiProperties.json @@ -13,6 +13,27 @@ "required": "true" } } + }, + "environment": { + "type": "string", + "uiDefinition": { + "displayName": "Environment", + "description": "The API environment to use; either production or sandbox", + "tooltip": "Select an API environment to use", + "constraints": { + "required": "true", + "allowedValues": [ + { + "text": "Sandbox", + "value": "payments.sandbox" + }, + { + "text": "Production", + "value": "payments" + } + ] + } + } } }, "iconBrandColor": "#fc9206", From c6b1f8bb654fa86043c30d1c08437b486205cdad Mon Sep 17 00:00:00 2001 From: Nicholas Hance Date: Wed, 26 Aug 2020 17:38:44 -0400 Subject: [PATCH 027/347] Gravty Forms by reenhanced initial release (#393) * Gravty Forms by reenhanced initial release * Update readme.md for expectations --- .../apiDefinition.swagger.json | 295 ++++++++++++++++++ .../apiProperties.json | 23 ++ .../Gravity Forms by reenhanced/readme.md | 19 ++ 3 files changed, 337 insertions(+) create mode 100644 certified-connectors/Gravity Forms by reenhanced/apiDefinition.swagger.json create mode 100644 certified-connectors/Gravity Forms by reenhanced/apiProperties.json create mode 100644 certified-connectors/Gravity Forms by reenhanced/readme.md diff --git a/certified-connectors/Gravity Forms by reenhanced/apiDefinition.swagger.json b/certified-connectors/Gravity Forms by reenhanced/apiDefinition.swagger.json new file mode 100644 index 000000000..5ec2b5c74 --- /dev/null +++ b/certified-connectors/Gravity Forms by reenhanced/apiDefinition.swagger.json @@ -0,0 +1,295 @@ +{ + "swagger": "2.0", + "info": { + "version": "2", + "title": "Gravity Forms by reenhanced", + "description": "Gravity Forms by reenhanced lets you connect your Gravity Forms submissions to your flows. Once you install the add-on into your Gravity Forms Wordpress site, you'll be able to have your form submissions trigger this connector.", + "contact": { + "name": "Reenhanced Team", + "url": "https://www.reenhanced.com/products/gravity-forms-power-automate", + "email": "support@reenhanced.com" + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.reenhanced.com/" + }, + { + "propertyName": "Privacy Policy", + "propertyValue": "https://reenhanced.com/privacy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Website" + } + ], + "host": "we.buildbettersoftware.com", + "basePath": "/gravity-flow/api/power_automate", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/domains": { + "get": { + "tags": [ + "Lookups" + ], + "operationId": "GetLicensedDomains", + "consumes": [], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Returns an array of licensed domains.", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Domain" + } + } + }, + "401": { + "description": "Authorization information is missing or invalid." + } + }, + "x-ms-visibility": "internal", + "summary": "Get licensed domains", + "description": "Returns an array of licensed domains" + } + }, + "/forms": { + "get": { + "tags": [ + "Lookups" + ], + "operationId": "GetForms", + "consumes": [], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Returns an array of forms", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Form" + } + } + }, + "401": { + "description": "Authorization information is missing or invalid" + } + }, + "x-ms-visibility": "internal", + "summary": "Get Forms", + "description": "Returns an array of forms" + } + }, + "/forms/{form_id}": { + "get": { + "tags": [ + "Schema" + ], + "operationId": "GetFormSchema", + "consumes": [], + "produces": [], + "parameters": [ + { + "$ref": "#/parameters/FormIdParam" + } + ], + "responses": { + "200": { + "description": "Returns form schema." + }, + "401": { + "description": "Authorization information is missing or invalid." + }, + "404": { + "description": "Not Found." + } + }, + "x-ms-visibility": "internal", + "summary": "Get form schema", + "description": "Returns schema of the specified form" + } + }, + "/webhooks": { + "x-ms-notification-content": { + "description": "Form data", + "schema": { + "$ref": "#/definitions/FormSchema" + } + }, + "post": { + "tags": [ + "SubmissionTrigger" + ], + "operationId": "CreateWebhook", + "consumes": [ + "application/json" + ], + "produces": [], + "parameters": [ + { + "name": "webhook", + "in": "body", + "required": true, + "schema": { + "required": [ + "callback_url", + "form_id" + ], + "type": "object", + "properties": { + "callback_url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-notification-url": true + }, + "form_id": { + "description": "The Form you want to subscribe to", + "type": "string", + "x-ms-summary": "Form", + "x-ms-dynamic-values": { + "operationId": "GetForms", + "value-path": "id", + "value-title": "form_name" + } + } + } + } + } + ], + "responses": { + "201": { + "description": "Subscription has been created." + }, + "401": { + "description": "Authorization information is missing or invalid." + } + }, + "x-ms-visibility": "important", + "summary": "When a form is submitted", + "description": "Fires whenever the target form is submitted", + "x-ms-trigger": "single" + } + }, + "/webhooks/{id}": { + "delete": { + "tags": [ + "SubmissionTrigger" + ], + "operationId": "Unsubscribe", + "consumes": [], + "produces": [], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "integer", + "x-ms-url-encoding": "single", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "Success" + } + }, + "x-ms-visibility": "internal", + "summary": "Unsubscribe", + "description": "Removes the subscriber" + } + } + }, + "definitions": { + "Domain": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + } + }, + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetLicensedDomains" + } + }, + "Form": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "FormSchema": { + "type": "object", + "properties": {}, + "x-ms-dynamic-schema": { + "operationId": "GetFormSchema", + "parameters": { + "form_id": { + "parameter": "form_id" + } + }, + "value-path": "schema" + }, + "x-ms-dynamic-properties": { + "operationId": "GetFormSchema", + "itemValuePath": "schema", + "parameters": { + "form_id": { + "parameterReference": "webhook/form_id" + } + } + } + } + }, + "parameters": { + "FormIdParam": { + "description": "The Form you want to subscribe to", + "in": "path", + "name": "form_id", + "required": true, + "type": "string", + "x-ms-summary": "Form", + "x-ms-dynamic-values": { + "operationId": "GetForms", + "value-path": "id", + "value-title": "name" + }, + "x-ms-url-encoding": "single", + "x-ms-visibility": "important" + } + }, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "license-key" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/Gravity Forms by reenhanced/apiProperties.json b/certified-connectors/Gravity Forms by reenhanced/apiProperties.json new file mode 100644 index 000000000..e7b3a8ce4 --- /dev/null +++ b/certified-connectors/Gravity Forms by reenhanced/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "License Key", + "description": "The License Key for this api", + "tooltip": "Provide your License Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "publisher": "Reenhanced LLC", + "stackOwner": "Rocketgenius Inc.", + "iconBrandColor": "#365666", + "capabilities": [] + } +} \ No newline at end of file diff --git a/certified-connectors/Gravity Forms by reenhanced/readme.md b/certified-connectors/Gravity Forms by reenhanced/readme.md new file mode 100644 index 000000000..8c5414d28 --- /dev/null +++ b/certified-connectors/Gravity Forms by reenhanced/readme.md @@ -0,0 +1,19 @@ +# Gravity Forms by reenhanced + +Easily connect your Gravity Forms submissions to Power Automate using this connector in combination with the Gravity Forms Power Automate Wordpress plugin by Reenhanced. + +## Prerequisites + +To use this connector, you'll need to install the Gravity Forms Power Automate plugin into your Wordpress site running Gravity Forms. + +Once installed, you will need to configure a feed for each form that you wish to send data to Power Automate. Forms that do not have an active Power Automate feed will not activate the trigger. + +## How to get credentials + +You can download the wordpress plugin and purchase a license to use from here: https://reenhanced.com/products/gravity-forms-power-automate + +You will need a valid license to use this connector. + +## Known issues and limitations + +If you do not configure a feed on the Wordpress side your form will not work with Power Automate. From 07b2be2bc9028c1a72dd86755a9c5684fd87114e Mon Sep 17 00:00:00 2001 From: Oytun Tez Date: Thu, 27 Aug 2020 05:49:44 +0300 Subject: [PATCH 028/347] Initial launch of MotaWord Translations connector (#401) * initial commit for MotaWord Translations connector * minor description improvement for API key Co-authored-by: oytunmw --- .../apiDefinition.swagger.json | 870 ++++++++++++++++++ .../MotaWordTranslations/apiProperties.json | 23 + .../MotaWordTranslations/readme.md | 40 + 3 files changed, 933 insertions(+) create mode 100644 certified-connectors/MotaWordTranslations/apiDefinition.swagger.json create mode 100644 certified-connectors/MotaWordTranslations/apiProperties.json create mode 100644 certified-connectors/MotaWordTranslations/readme.md diff --git a/certified-connectors/MotaWordTranslations/apiDefinition.swagger.json b/certified-connectors/MotaWordTranslations/apiDefinition.swagger.json new file mode 100644 index 000000000..4f69a1036 --- /dev/null +++ b/certified-connectors/MotaWordTranslations/apiDefinition.swagger.json @@ -0,0 +1,870 @@ +{ + "swagger": "2.0", + "info": { + "title": "MotaWord Translations", + "description": "You can now professionally translate your documents or any other kind of content with MotaWord connector. We support many content/file types into 95+ languages with 18000+ professional translators. We are everywhere you are! Check our website and mobile apps to track your translatiosn in real-time.", + "version": "1.0", + "contact": { + "name": "MotaWord Support - 24/7 Chat and Email Support", + "url": "https://www.motaword.com", + "email": "info@motaword.com" + } + }, + "host": "api.motaword.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json", + "text/plain; charset=utf-8", + "text/plain" + ], + "paths": { + "/projects": { + "post": { + "responses": { + "200": { + "description": "Returns a new translation project entity. You can access your quote and word count information.", + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Project ID. This is the ID that other actions usually make use of, such as downloading translations from a MotaWord project." + }, + "source_language": { + "type": "string", + "description": "Source language code of your project. Language codes are available here: http://api.motaword.com/languages" + }, + "target_languages": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Target language codes of your project. Language codes are available here: http://api.motaword.com/languages" + }, + "word_count": { + "type": "integer", + "format": "int32", + "description": "Total word count of your files in this project. We base our quotes on the number of words you are ordering for translation." + }, + "price": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "format": "float", + "description": "Monetary quote amount. Make sure to use `currency` field as well." + }, + "currency": { + "type": "string", + "description": "Currency of your translation quote." + }, + "usd_amount": { + "type": "number", + "format": "float", + "description": "If the currency is different than USD, then this field can tell you its USD equivelant." + } + }, + "description": "Price and currency information of your project." + }, + "price_without_discount": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "format": "float", + "description": "Monetary quote amount. Make sure to use `currency` field as well." + }, + "currency": { + "type": "string", + "description": "Currency of your translation quote." + }, + "usd_amount": { + "type": "number", + "format": "float", + "description": "If the currency is different than USD, then this field can tell you its USD equivelant." + } + }, + "description": "MotaWord works hard to give you discounts over Translation Memory, content exclusion and such. This is the project price without any of our discounts. This is only for information purposes." + }, + "status": { + "type": "string", + "description": "Project status.", + "enum": [ + "pending", + "started", + "translated", + "completed" + ] + }, + "delivery_at": { + "type": "integer", + "format": "int32", + "description": "Unix timestamp for project deadline we provide to you." + }, + "completed_on": { + "type": "string", + "description": "If the project has been completed, this will tell you when it was completed. Unix timestamp." + }, + "valid_until": { + "type": "integer", + "format": "int32", + "description": "Your projects are available for 30 days before you launch them. Once your quote expires after 30 days, you will need to get a new quote." + }, + "custom": { + "type": "string", + "description": "You can put any custom key-value pair here and we will always accompany project entities with this custom metadata. This is a useful field to improve your workflows with custom data/tracking exchange with MotaWord." + }, + "callback_url": { + "type": "string", + "description": "Callback URL is used to update your flows with MotaWord project status changes. This URL is typically generated from a 'HTTP Request Trigger' connector. You can also use our native Trigger for webhook and status change tracking purposes." + }, + "created_at": { + "type": "integer", + "format": "int32", + "description": "Unix timestamp for when this project was first submitted." + } + } + }, + "headers": { + "Location:": { + "description": "Location:", + "type": "string" + }, + "Content-Type:": { + "description": "Content-Type:", + "type": "string" + } + } + } + }, + "summary": "Initialize Translation Project", + "description": "Initialize a new translation project at MotaWord. You can later add document(s) to it, and then launch it.", + "operationId": "InitializeTranslationProject", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "documents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the file that you want translated. MotaWord platform will only know your file by this name.", + "title": "File name", + "x-ms-visibility": "advanced" + }, + "data": { + "type": "string", + "format": "byte", + "description": "Base64 encoded content of the file you want translated.", + "title": "File content", + "x-ms-visibility": "advanced" + } + }, + "required": [ + "name", + "data" + ] + } + }, + "callback_url": { + "type": "string", + "description": "Callback URL is used to update your flows with MotaWord project status changes.", + "title": "Callback Webhook URL", + "x-ms-visibility": "important" + }, + "source_language": { + "type": "string", + "description": "Source language code of the file(s) that you are sending for translation. Language codes are available here: http://api.motaword.com/languages", + "title": "Source Language Code", + "x-ms-visibility": "important" + }, + "target_languages": { + "type": "array", + "items": { + "type": "string", + "description": "A list of language codes that you want to translate your content into. Language codes are available here: http://api.motaword.com/languages", + "title": "Target Language(s)", + "x-ms-visibility": "important" + } + } + }, + "required": [ + "source_language", + "target_languages" + ] + }, + "x-ms-visibility": "important" + } + ] + } + }, + "/projects/{projectId}": { + "get": { + "responses": { + "200": { + "description": "Returns translation project entity. You can access your quote and word count information.", + "schema": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Project ID. This is the ID that other actions usually make use of, such as downloading translations from a MotaWord project." + }, + "source_language": { + "type": "string", + "description": "Source language code of your project. Language codes are available here: http://api.motaword.com/languages" + }, + "target_languages": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Target language codes of your project. Language codes are available here: http://api.motaword.com/languages" + }, + "word_count": { + "type": "integer", + "format": "int32", + "description": "Total word count of your files in this project. We base our quotes on the number of words you are ordering for translation." + }, + "price": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "format": "float", + "description": "Monetary quote amount. Make sure to use `currency` field as well." + }, + "currency": { + "type": "string", + "description": "Currency of your translation quote." + }, + "usd_amount": { + "type": "number", + "format": "float", + "description": "If the currency is different than USD, then this field can tell you its USD equivelant." + } + }, + "description": "Price and currency information of your project." + }, + "price_without_discount": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "format": "float", + "description": "Monetary quote amount. Make sure to use `currency` field as well." + }, + "currency": { + "type": "string", + "description": "Currency of your translation quote." + }, + "usd_amount": { + "type": "number", + "format": "float", + "description": "If the currency is different than USD, then this field can tell you its USD equivelant." + } + }, + "description": "MotaWord works hard to give you discounts over Translation Memory, content exclusion and such. This is the project price without any of our discounts. This is only for information purposes." + }, + "status": { + "type": "string", + "description": "Project status.", + "enum": [ + "pending", + "started", + "translated", + "completed" + ] + }, + "delivery_at": { + "type": "integer", + "format": "int32", + "description": "Unix timestamp for project deadline we provide to you." + }, + "completed_on": { + "type": "string", + "description": "If the project has been completed, this will tell you when it was completed. Unix timestamp." + }, + "valid_until": { + "type": "integer", + "format": "int32", + "description": "Your projects are available for 30 days before you launch them. Once your quote expires after 30 days, you will need to get a new quote." + }, + "custom": { + "type": "string", + "description": "You can put any custom key-value pair here and we will always accompany project entities with this custom metadata. This is a useful field to improve your workflows with custom data/tracking exchange with MotaWord." + }, + "callback_url": { + "type": "string", + "description": "Callback URL is used to update your flows with MotaWord project status changes. This URL is typically generated from a 'HTTP Request Trigger' connector. You can also use our native Trigger for webhook and status change tracking purposes." + }, + "created_at": { + "type": "integer", + "format": "int32", + "description": "Unix timestamp for when this project was first submitted." + } + } + } + } + }, + "summary": "Get project details", + "description": "Get your project details, including quote price and word count. You can also use this endpoint to get your latest price and word count after uploading new source documents or changing language pairs.", + "operationId": "GetProjectDetails", + "parameters": [ + { + "name": "projectId", + "description": "Project ID for.", + "in": "path", + "required": true, + "type": "integer", + "x-ms-visibility": "important", + "x-ms-url-encoding": "single", + "x-ms-summary": "Project ID" + } + ] + } + }, + "/projects/{projectId}/package": { + "post": { + "responses": { + "200": { + "description": "Binary. ZIP archive of translated documents. If you are uniformly working with single documents, this can also directly return the contents of your single translated document. To configure your API client for this use case, contact us.", + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "operationId": "DownloadTranslations", + "summary": "Download Translations", + "description": "Download translated documents as a ZIP archive from your MotaWord project", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "projectId", + "in": "path", + "required": true, + "type": "integer", + "description": "Project ID that you want to download translations of.", + "x-ms-summary": "Project ID that you want to download translations of.", + "x-ms-visibility": "important", + "x-ms-url-encoding": "single", + "format": "int64" + }, + { + "name": "async", + "in": "query", + "required": false, + "description": "When you download your translations, we recompile them and give you a fresh package. We can do this in the background or foreground. In most cases of integration as a connector, this should be async = 0.", + "x-ms-summary": "For the most fresh package, choose 0/false/no.", + "type": "integer", + "default": 0, + "enum": [ + 0, + 1 + ] + } + ] + } + }, + "/projects/{projectId}/webhooks": { + "x-ms-notification-content": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "type" + }, + "action": { + "type": "string", + "description": "action" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "id" + }, + "source_language": { + "type": "string", + "description": "source_language" + }, + "target_languages": { + "type": "array", + "items": { + "type": "string" + }, + "description": "target_languages" + }, + "word_count": { + "type": "integer", + "format": "int32", + "description": "word_count" + }, + "price": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "format": "float", + "description": "amount" + }, + "currency": { + "type": "string", + "description": "currency" + }, + "usd_amount": { + "type": "number", + "format": "float", + "description": "usd_amount" + } + }, + "description": "price" + }, + "price_without_discount": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "format": "float", + "description": "amount" + }, + "currency": { + "type": "string", + "description": "currency" + }, + "usd_amount": { + "type": "number", + "format": "float", + "description": "usd_amount" + } + }, + "description": "price_without_discount" + }, + "status": { + "type": "string", + "description": "status" + }, + "delivery_at": { + "type": "integer", + "format": "int32", + "description": "delivery_at" + }, + "completed_on": { + "type": "string", + "description": "completed_on" + }, + "subjects": { + "type": "array", + "items": {}, + "description": "subjects" + }, + "budget_code": { + "type": "string", + "description": "budget_code" + }, + "tms_name": { + "type": "string", + "description": "tms_name" + }, + "is_manual": { + "type": "boolean", + "description": "is_manual" + }, + "source": { + "type": "string", + "description": "source" + }, + "custom": { + "type": "string", + "description": "custom" + }, + "callback_url": { + "type": "string", + "description": "callback_url" + }, + "created_at": { + "type": "integer", + "format": "int32", + "description": "created_at" + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "self" + }, + "documents": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "documents" + }, + "glossaries": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "glossaries" + }, + "styleguides": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "styleguides" + }, + "webhooks": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "webhooks" + }, + "invoice": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "invoice" + }, + "activities": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "activities" + }, + "comments": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "comments" + }, + "progress": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "progress" + }, + "package": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "package" + }, + "download": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "href" + } + }, + "description": "download" + } + }, + "description": "links" + } + }, + "description": "project" + } + } + }, + "description": "Project status update response" + }, + "delete": { + "summary": "Delete project webhook", + "description": "Delete project webhook", + "operationId": "DeleteProjectWebhooks", + "x-ms-visibility": "internal", + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "Project ID that you want to delete webhooks of.", + "x-ms-summary": "Project ID that you want to delete webhooks of.", + "x-ms-url-encoding": "single", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "default", + "schema": {} + } + } + }, + "post": { + "responses": { + "200": { + "description": "default", + "schema": {} + } + }, + "summary": "When Translation Project Completed", + "description": "Triggered when your translation project is completed. Register project status webhook here.", + "operationId": "WhenTranslationProjectCompleted", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "projectId", + "description": "Project ID that you want to register webhooks for.", + "in": "path", + "required": true, + "type": "integer", + "x-ms-visibility": "important", + "x-ms-url-encoding": "single", + "x-ms-summary": "Project ID that you want to register webhooks for." + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "callback_url": { + "type": "string", + "description": "Webhook URL is used to update your flows with MotaWord project status changes.", + "x-ms-summary": "Webhook URL is used to update your flows with MotaWord project status changes.", + "x-ms-visibility": "internal", + "x-ms-notification-url": true + } + }, + "required": [ + "callback_url" + ] + }, + "x-ms-visibility": "internal" + } + ] + } + }, + "/projects/{projectID}/launch": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "Launch operation status.", + "enum": [ + "started", + "failed" + ] + } + } + } + } + }, + "summary": "Launch Translation Project", + "description": "Launch your existing project (quote) for translation, we'll get to it right away. Remember to add your documents to a project before you launch it. Once launched, you can also track your translation progress in real-time on our web and mobile platforms.", + "operationId": "LaunchTranslationProject", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "projectID", + "in": "path", + "required": true, + "type": "string", + "description": "Project ID that you want to launch.", + "x-ms-summary": "Project ID that you want to launch.", + "x-ms-url-encoding": "single" + } + ] + } + }, + "/projects/{projectID}/documents": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "documents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "MotaWord ID for the document you just uploaded." + }, + "name": { + "type": "string", + "description": "Document name" + }, + "uploaded_at": { + "type": "integer", + "format": "int32", + "description": "Unix timestamp for when this document was uploaded." + }, + "word_count": { + "type": "integer", + "format": "int32", + "description": "Number of words in the document to be translated. This is the amount we charge you for." + }, + "scheme": { + "type": "object", + "properties": {}, + "description": "Mixed file scheme object. For more information in configuring your source files, refer to our Developer Portal: https://www.motaword.com/developer" + } + } + }, + "description": "List of documents that you have just uploaded. Only returns newly uploaded files, not all of the files in your project." + } + } + } + } + }, + "summary": "Add Document(s) For Translation", + "description": "Add document(s) to your translation project. You can only add a new document to a project that you haven't yet launched.", + "operationId": "AddDocumentsForTranslation", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "projectID", + "in": "path", + "required": true, + "type": "string", + "description": "Project ID that you want to add documents to. This project is typically initialized via InitializeTranslationProject action earlier in the workflow.", + "x-ms-summary": "Project ID that you want to add documents to.", + "x-ms-url-encoding": "single" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "documents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the file that you want translated. MotaWord platform will only know your file by this name.", + "title": "File name", + "x-ms-visibility": "important", + "x-ms-summary": "What do you want to name this file on MotaWord side?" + }, + "data": { + "type": "string", + "format": "byte", + "description": "Base64 encoded content of the file you want translated.", + "x-ms-summary": "Base64 encoded content of the file you want translated.", + "title": "File content", + "x-ms-visibility": "important" + } + }, + "required": [ + "name", + "data" + ] + }, + "description": "List of document objects to be uploaded. Documents are list of objects containing file name and base64 encoded content." + } + } + } + } + ] + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "query", + "name": "access_token" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.motaword.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.motaword.com/legal" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity;Content and Files" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/MotaWordTranslations/apiProperties.json b/certified-connectors/MotaWordTranslations/apiProperties.json new file mode 100644 index 000000000..46dbb8125 --- /dev/null +++ b/certified-connectors/MotaWordTranslations/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for your MotaWord connection", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "publisher": "MotaWord", + "stackOwner": "MotaWord", + "iconBrandColor": "#000000", + "capabilities": ["actions", "triggers"] + } +} diff --git a/certified-connectors/MotaWordTranslations/readme.md b/certified-connectors/MotaWordTranslations/readme.md new file mode 100644 index 000000000..ac953dec0 --- /dev/null +++ b/certified-connectors/MotaWordTranslations/readme.md @@ -0,0 +1,40 @@ + +[MotaWord](https://www.motaword.com) connector enables you to make translation an integral part of your workflow. You can translate [any content, file, document](https://www.motaword.com/formats) from hundreds of connectors into 95+ languages, with our 20K+ professional translators. MotaWord is your modern, technology enabled, professional, human translation partner. + +## Prerequisites + +You must have a MotaWord account and a MotaWord API application (via our [developer portal)](https://www.motaword.com/developer). Then set up your billing preferences; your translation requests can be charged in multiple models, come chat with us 24/7 at our website. + +## Tell me more + +MotaWord Translations connector is based on MotaWord’s Human Translation API, which lets you access the best quality translations in [over 95 languages](https://www.motaword.com/languages), quickly and at great prices. Whether it’s a website, program or application our API can: + +- Provide immediate quotes for translations of your content in more than 95 languages, submitted and then returned in a variety of file formats +- Accept a new translation job +- Upload your style guides, glossaries, or documents to give context to your job and assist in a consistent product +- Monitor the progress of the project in each language +- Grab activity feeds as they happen, and +- Deliver the completed, high-quality translations to where they are needed - with no human interaction + +## How to get started and receive credentials + +All you need to get started with MotaWord Translations connector is a MotaWord account and an API application. Follow the steps below and come chat with us anytime on our website. + +1. Register as a developer in our [Developer Portal](https://www.motaword.com/developer). +2. Create a **new application** in your developer dashboard. +3. Choose "Microsoft Power Automate (Flow)" as your **application type**. +4. Click **"View Keys"** in application sidebar menu. +5. In that page, you will see your **Access Token**. This token is to be used in your MotaWord connector authentication configuration inside Microsoft Power Automate dashboards. You can also reset this token whenever you want and use the new token in your connector configuration. This is an extended access token, exclusive to our Microsoft integrations. + +## Supported operations +- `Initialize Translation Project`: Initialize a new translation project at MotaWord. You can later add document(s) to it, and then launch it. +- `Get project details`: Get your project details, including quote price and word count. You can also use this endpoint to get your latest price and word count after uploading new source documents or changing language pairs. +- `Download Translations`: Download translated documents as a ZIP archive from your MotaWord project +- `Delete project webhook`: Delete project webhook +- `When Translation Project Completed` trigger: Triggered when your translation project is completed. Register project status webhook here. +- `Launch Translation Project`: Launch your existing project (quote) for translation, we''ll get to it right away. Remember to add your documents to a project before you launch it. Once launched, you can also track your translation progress in real-time on our web and mobile platforms. +- `Add Document(s) For Translation`: Add document(s) to your translation project. You can only add a new document to a project that you haven't yet launched. + +## I have a question + +We probably have the answer. Come chat with us on our website or mobile app, we are available 24/7: [https://www.motaword.com](https://www.motaword.com) \ No newline at end of file From 35b45ac5cde812fbf30510916eb74b9d9bd231ec Mon Sep 17 00:00:00 2001 From: amancdk <35783172+amancdk@users.noreply.github.com> Date: Thu, 27 Aug 2020 23:26:50 +0530 Subject: [PATCH 029/347] Update apiDefinition.swagger.json (#408) --- .../CDK Drive Service Vehicles/apiDefinition.swagger.json | 1 + 1 file changed, 1 insertion(+) diff --git a/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json b/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json index bc3d7fb93..92bb502e1 100644 --- a/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json +++ b/certified-connectors/CDK Drive Service Vehicles/apiDefinition.swagger.json @@ -840,6 +840,7 @@ } }, "Dates": { + "type": "object", "properties": { "delivered": { "type": "string", From 6d4eb2874ecf23e1b7df5f1343b9d0018e0a1be8 Mon Sep 17 00:00:00 2001 From: Jasey Waegebaert <38426621+Jwaegebaert@users.noreply.github.com> Date: Thu, 27 Aug 2020 22:45:27 +0200 Subject: [PATCH 030/347] Init GroupMgr connector (#404) * connector init * delimiter missing * Folder change * Request changes * Azure pipeline error fixes Co-authored-by: Jasey Waegebaert --- certified-connectors/GroupMgr/ReadMe.md | 19 ++ .../GroupMgr/apiDefinition.swagger.json | 323 ++++++++++++++++++ .../GroupMgr/apiProperties.json | 23 ++ 3 files changed, 365 insertions(+) create mode 100644 certified-connectors/GroupMgr/ReadMe.md create mode 100644 certified-connectors/GroupMgr/apiDefinition.swagger.json create mode 100644 certified-connectors/GroupMgr/apiProperties.json diff --git a/certified-connectors/GroupMgr/ReadMe.md b/certified-connectors/GroupMgr/ReadMe.md new file mode 100644 index 000000000..266684d82 --- /dev/null +++ b/certified-connectors/GroupMgr/ReadMe.md @@ -0,0 +1,19 @@ +# GroupMgr + +A powerful set of tools, for both IT managers and users, to efficiently create, manage, browse and analyse all groups in your Microsoft 365 environment. People love using Microsoft Teams. However, every time a team is created, a ‘group’ and a lot of underlying assets like mailboxes, SharePoint sites, planners and documents are created as well… Managing all this content is near impossible. GroupMgr is a governance tool which gives you that much needed overview of all existing groups, their users and related assets. + +Our app will manage Microsoft 365 groups within your tenant. It provides users with an overview of all the currently available groups and allows them to easily create new ones. In addition, admins will be able to connect approval flows to the creation of new groups. This is done by connecting an approval flow to a group type. Besides, relationship between groups and group types will give a clearer overview of all available groups and makes it easier for users to filter or search them. If a user creates a new group, linked to a group type with an approval flow, the flow must be completed first, before the group itself will be created. In order to set up such approval flows, our custom connector must be used. + +The connector will place a webhook on the *Creation* and *Update* part of the CRUD which will trigger the connector when needed. The connector consists of two parts, a trigger and an action. The trigger will fire when an group is created or updated. The action is used to send a reply with the approval result. Based on this approval result, the Microsoft 365 group will either be created or declined. + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Automate plan with custom connector feature, +* A GroupMgr license, +* GroupMgr API authentication details. + +## Get the API key for the GroupMgr +- [GroupMgr website](https://groupmgr.com) - Further details on how to get the API key. + +## Support, policies and more infomartion : +You can find these resources [here:](https://groupmgr.com/support) \ No newline at end of file diff --git a/certified-connectors/GroupMgr/apiDefinition.swagger.json b/certified-connectors/GroupMgr/apiDefinition.swagger.json new file mode 100644 index 000000000..bcb0c93c9 --- /dev/null +++ b/certified-connectors/GroupMgr/apiDefinition.swagger.json @@ -0,0 +1,323 @@ +{ + "swagger": "2.0", + "info": { + "title": "GroupMgr", + "description": "A powerful set of tools, for both IT managers and users, to efficiently create, manage, browse and analyse all groups in your Microsoft 365 environment.", + "version": "1.0", + "contact": { + "name": "GroupMgr Helpdesk", + "url": "https://www.vanroey.be/support/", + "email": "support@groupmgr.com" + } + }, + "host": "vragroupmanagerapprovalflow.azurewebsites.net", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/api/webhookrequest": { + "x-ms-notification-content": { + "description": "Caught group creation", + "schema": { + "type": "object", + "properties": { + "DisplayName": { + "type": "string", + "description": "The display name of the group.", + "title": "Display name" + }, + "GroupType": { + "type": "string", + "description": "The group type.", + "title": "Type" + }, + "Email": { + "type": "string", + "description": "The groupmail.", + "title": "Email" + }, + "Owners": { + "type": "array", + "items": { + "type": "string", + "description": "The emails of all the owners.", + "title": "Owners emails" + }, + "description": "Owners" + }, + "Members": { + "type": "array", + "items": { + "type": "string", + "description": "The emails of all the members.", + "title": "Members emails" + }, + "description": "Members" + }, + "isPublic": { + "type": "boolean", + "description": "If the group is public.", + "title": "Is public", + "enum": [ + true, + false + ] + }, + "CreateTeam": { + "type": "boolean", + "description": "If the group should create a Team.", + "title": "Create a Team", + "enum": [ + true, + false + ] + } + } + } + }, + "post": { + "responses": { + "200": { + "description": "default", + "schema": {} + } + }, + "consumes": [ + "application/json" + ], + "summary": "When a group is created", + "description": "This will trigger when a new group is created within GroupMgr.", + "operationId": "GroupMgrGroupTrigger", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name for this approval flow", + "title": "Approval name", + "x-ms-visibility": "important" + }, + "webhook": { + "type": "string", + "description": "The webhook URL", + "title": "Webhook", + "x-ms-visibility": "internal", + "x-ms-notification-url": true + } + }, + "required": [ + "name", + "webhook" + ] + } + } + ] + } + }, + "/api/removeWebhook/{id}": { + "delete": { + "responses": { + "200": { + "description": "default", + "schema": {} + } + }, + "operationId": "GroupMgrGroupTriggerUnsubscribe", + "summary": "Unsubscribe when a group is created", + "description": "This will unsubscribe the trigger for when a new group is created within GroupMgr.", + "x-ms-visibility": "internal", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "The webhook Id", + "x-ms-url-encoding": "single" + } + ] + } + }, + "/api/ConfimationTrigger": { + "post": { + "responses": { + "200": { + "description": "Approved group data", + "schema": { + "type": "object", + "properties": { + "groupId": { + "type": "string", + "description": "Id of the group", + "title": "Group id" + }, + "listItemId": { + "type": "string", + "description": "Id of the group within GroupMgr", + "title": "SharePoint group id", + "x-ms-visibility": "internal" + }, + "displayName": { + "type": "string", + "description": "Display name of the group", + "title": "Display name" + }, + "groupType": { + "type": "string", + "description": "Group type", + "title": "Group type" + }, + "email": { + "type": "string", + "description": "Group email", + "title": "Email" + }, + "owners": { + "type": "array", + "items": { + "type": "string", + "description": "Owners of the group", + "title": "Owners" + }, + "description": "Owners" + }, + "members": { + "type": "array", + "items": { + "type": "string", + "description": "Members of the group", + "title": "Members" + }, + "description": "Members" + }, + "isPublic": { + "type": "boolean", + "description": "Is the group public", + "title": "Is public", + "enum": [ + true, + false + ] + }, + "url": { + "type": "string", + "description": "SharePoint URL", + "title": "URL SharePoint" + }, + "teamsUrl": { + "type": "string", + "description": "Teams URL", + "title": "URL for teams" + }, + "alreadyExists": { + "type": "boolean", + "description": "alreadyExists", + "title": "", + "x-ms-visibility": "internal", + "enum": [ + true, + false + ] + }, + "language": { + "type": "string", + "description": "language", + "title": "", + "x-ms-visibility": "internal" + }, + "createTeam": { + "type": "boolean", + "description": "Create a teams group page", + "title": "Create a team", + "enum": [ + true, + false + ] + }, + "approvalFlows": { + "type": "array", + "items": { + "type": "string", + "title": "", + "x-ms-visibility": "internal" + }, + "description": "approvalFlows" + } + } + } + } + }, + "consumes": [ + "application/json" + ], + "summary": "Group approval", + "operationId": "GroupMgrGroupApproval", + "description": "Will send an approval back to GroupMgr for the created group.", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "Approved": { + "type": "boolean", + "description": "Group approval state.", + "title": "Approved", + "enum": [ + true, + false + ], + "x-ms-visibility": "important" + } + }, + "required": [ + "Approved" + ] + } + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://groupmgr.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://groupmgr.com/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "IT Operations;Productivity" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API-key": { + "type": "apiKey", + "in": "header", + "name": "vra-api-key" + } + }, + "security": [ + { + "API-key": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/GroupMgr/apiProperties.json b/certified-connectors/GroupMgr/apiProperties.json new file mode 100644 index 000000000..e98ca4685 --- /dev/null +++ b/certified-connectors/GroupMgr/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API key", + "description": "API key for your GroupMgr connection", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#757DBB", + "capabilities": [], + "publisher": "GroupMgr", + "stackOwner": "VanRoey.be" + } +} \ No newline at end of file From c424a09e4d8961149115722f01e57423107a2a29 Mon Sep 17 00:00:00 2001 From: Crispin Koech Date: Fri, 28 Aug 2020 00:08:36 +0300 Subject: [PATCH 031/347] Include host policy instances to Africa's Talking payments connector (#406) * Update Africa's Talking Payments connector * Include host policy instances to Africa's Talking payments connector Co-authored-by: Crispin Kipruto --- .../Africa's Talking Payments/apiProperties.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/certified-connectors/Africa's Talking Payments/apiProperties.json b/certified-connectors/Africa's Talking Payments/apiProperties.json index 5629336f6..f18e02d3b 100644 --- a/certified-connectors/Africa's Talking Payments/apiProperties.json +++ b/certified-connectors/Africa's Talking Payments/apiProperties.json @@ -38,6 +38,15 @@ }, "iconBrandColor": "#fc9206", "capabilities": [], + "policyTemplateInstances": [ + { + "templateId": "dynamichosturl", + "title": "Host URL", + "parameters": { + "x-ms-apimTemplateParameter.urlTemplate": "https://@connectionParameters('environment').africastalking.com" + } + } + ], "publisher": "Africa's Talking", "stackOwner": "Africa's Talking" } From 9176f59737878c02212adc3348697dfa0467b13b Mon Sep 17 00:00:00 2001 From: Crispin Koech Date: Sat, 29 Aug 2020 01:52:12 +0300 Subject: [PATCH 032/347] Fix typo in action description. (#413) * Update Africa's Talking Payments connector * Include host policy instances to Africa's Talking payments connector * Fix typo * Add sanbox Athena option in list of providers Co-authored-by: Crispin Kipruto --- .../Africa's Talking Payments/apiDefinition.swagger.json | 6 ++++-- .../Africa's Talking SMS/apiDefinition.swagger.json | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json b/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json index 208bc5fed..8c1037360 100644 --- a/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json +++ b/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json @@ -53,7 +53,8 @@ "x-ms-visibility": "important", "enum": [ "Mpesa", - "TigoTanzania" + "TigoTanzania", + "Athena" ] }, "transferType": { @@ -699,7 +700,8 @@ "Mpesa", "Segovia", "Flutterwave", - "Admin" + "Admin", + "Athena" ], "description": "Transaction provider you would like to consider.", "x-ms-summary": "Provider" diff --git a/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json b/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json index 951ba7077..75f54ca46 100644 --- a/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json +++ b/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json @@ -25,7 +25,7 @@ "/version1/messaging/bulk": { "post": { "summary": "Send SMS", - "description": "Send an sms to multiple numbers.", + "description": "Send an SMS to multiple numbers.", "operationId": "SendSms", "parameters": [ { From a5ab3dd7327a7ea6bfb12556f63c5ab67032b207 Mon Sep 17 00:00:00 2001 From: sgoettsch <40594782+sgoettsch@users.noreply.github.com> Date: Sat, 29 Aug 2020 01:44:38 +0200 Subject: [PATCH 033/347] GetMyInvoices Connector (#409) --- .../GetMyInvoices/apiDefinition.swagger.json | 210 ++++++++++++++++++ .../GetMyInvoices/apiProperties.json | 11 + certified-connectors/GetMyInvoices/readme.md | 33 +++ 3 files changed, 254 insertions(+) create mode 100644 certified-connectors/GetMyInvoices/apiDefinition.swagger.json create mode 100644 certified-connectors/GetMyInvoices/apiProperties.json create mode 100644 certified-connectors/GetMyInvoices/readme.md diff --git a/certified-connectors/GetMyInvoices/apiDefinition.swagger.json b/certified-connectors/GetMyInvoices/apiDefinition.swagger.json new file mode 100644 index 000000000..736f3d4a5 --- /dev/null +++ b/certified-connectors/GetMyInvoices/apiDefinition.swagger.json @@ -0,0 +1,210 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "GetMyInvoices", + "description": "Get invoices one by one from GetMyInvoices.\nIf we run this connector, then we can get last invoice from GetMyInvoices.\nThis means if you run our connector once, then we will get one invoice data, and last invoice id will be increased.\nNext, if you run this connector again, then we will get next invoice data according to last invoice id, and last invoice id will be also increased.\nIf there is no invoice id anymore, then connector will return empty value.", + "contact": { + "name": "GetMyInvoices", + "url": "https://help.getmyinvoices.com/en/", + "email": "support@getmyinvoices.com" + } + }, + "host": "api.getmyinvoices.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/accounts/v2/sendDocumentsToPowerAutomate": { + "post": { + "summary": "Get invoice document from GetMyInvoices", + "description": "Get invoice document data one by one from GetMyInvoices.", + "operationId": "GetInvoiceFromGetMyInvoices", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": " application/json", + "description": "Content type.", + "x-ms-summary": "Content Type" + }, + { + "name": "Accept", + "in": "header", + "required": true, + "type": "string", + "default": " application/json", + "description": "Accept.", + "x-ms-summary": "Accept" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "api_key": { + "type": "string", + "description": "api_key" + } + }, + "required": [ + "api_key" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "", + "schema": { + "type": "object", + "properties": { + "records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Id" + }, + "company_uid": { + "type": "integer", + "format": "int32", + "description": "Company Uid" + }, + "company_name": { + "type": "string", + "description": "Company Name" + }, + "document_type": { + "type": "string", + "description": "Document Type" + }, + "document_number": { + "type": "string", + "description": "Document Number" + }, + "creation_date": { + "type": "string", + "description": "Creation Date" + }, + "document_date": { + "type": "string", + "description": "Document Date" + }, + "document_due_date": { + "type": "string", + "description": "Document Due Date" + }, + "document_payment_method": { + "type": "string", + "description": "Document Payment Method" + }, + "payment_status": { + "type": "string", + "description": "Payment Status" + }, + "net_amount": { + "type": "number", + "format": "float", + "description": "Net Amount" + }, + "vat": { + "type": "integer", + "format": "int32", + "description": "Vat" + }, + "gross_amount": { + "type": "number", + "format": "float", + "description": "Gross Amount" + }, + "currency": { + "type": "string", + "description": "Currency" + }, + "is_archived": { + "type": "boolean", + "description": "Is Archived" + }, + "is_ocr_completed": { + "type": "boolean", + "description": "Is Ocr Completed" + }, + "tags": { + "type": "string", + "description": "Tags" + }, + "note": { + "type": "string", + "description": "Note" + }, + "source": { + "type": "string", + "description": "Source" + }, + "source_user": { + "type": "string", + "description": "Source User" + }, + "document_name": { + "type": "string", + "description": "Document Name" + }, + "file_size": { + "type": "integer", + "format": "int32", + "description": "File Size" + }, + "file_content": { + "type": "string", + "description": "File Content" + }, + "line_items": { + "type": "array", + "items": {}, + "description": "Line Items" + }, + "readable_text": { + "type": "string", + "description": "Readable Text" + } + } + }, + "description": "records" + } + } + } + } + } + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.getmyinvoices.com/en/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.getmyinvoices.com/en/privacy/" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Business Intelligence" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/GetMyInvoices/apiProperties.json b/certified-connectors/GetMyInvoices/apiProperties.json new file mode 100644 index 000000000..dba933b2b --- /dev/null +++ b/certified-connectors/GetMyInvoices/apiProperties.json @@ -0,0 +1,11 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#49b9e7", + "capabilities": [ + "actions" + ], + "publisher": "GetMyInvoices", + "stackOwner": "fino data services GmbH" + } +} \ No newline at end of file diff --git a/certified-connectors/GetMyInvoices/readme.md b/certified-connectors/GetMyInvoices/readme.md new file mode 100644 index 000000000..415a8194a --- /dev/null +++ b/certified-connectors/GetMyInvoices/readme.md @@ -0,0 +1,33 @@ + +# GetMyInvoices +GetMyInvoices makes effective invoices processing easy indeed. + +## Pre-requisites +This is our website url. (https://www.getmyinvoices.com) +You can sign up a new trial account, and can login with that account. +After login, please go to "Documents" menu on the left sidebar. +Here you can see invoice documents of our GetMyInvoices App, and you can see also "UPLOAD DOCUMENT" button in the top. +You can upload a new invoice documents by clicking this button. +After uploading invoice documents, you can get these invoices one by one by using our connector. +(we can get only last invoice by using this connector.) + +## How to get credentials +We don't need any authentication process in our connector. +We will use "api_key" in the post body for connecting to our GetMyInvoices App. +In order to get a "api_key", you can go to this page. (https://login.getmyinvoices.com/api_access.php) +Here you can see existing "api_key" and you can also create a new "api_key". +You can also add a new "api_key" with Permission (for example, Full-permission). + +## API documentation +https://api.getmyinvoices.com/accounts/v2/doc/ + +## Known issues and limitations +As I mentioned above, our connector will be used for getting last invoice from GetMyInvoices. +(We can get the following values of last invoice. +Invoice Id, Company Uid, Company Name, Document Type, Document Date, Payment Status, ...) +This means if you run our connector once, then it will take one invoice data, and last invoice id will be increased. +Next, if you run our connector again, then we will get next invoice data according to last invoice id, and last invoice id will be also increased. +In this way, last invoice id will be increased, if last invoice id is reached to limit, then connector will return empty data. + +## Further Support +For further support, please contact support@getmyinvoices.com From b498904399ca46931d42e93b8f8c78a8c3e62f94 Mon Sep 17 00:00:00 2001 From: gowthamd3 <65020517+gowthamd3@users.noreply.github.com> Date: Fri, 28 Aug 2020 19:45:25 -0400 Subject: [PATCH 034/347] IN-D Payables Connector artifacts (#411) * Create IN-D KYC India * Delete IN-D KYC India * Create apiDefinition.swagger.json * Create apiDefinition.swagger.json * Add files via upload * Create Readme.md * Delete apiDefinition.swagger.json * Add files via upload * Delete apiDefinition.swagger.json * Update apiDefinition.swagger.json * Delete apiDefinition.swagger.json * Create apiDefinition.swagger.json --- certified-connectors/IN-D Payables/Readme.md | 33 ++ .../IN-D Payables/apiDefinition.swagger.json | 365 ++++++++++++++++++ .../IN-D Payables/apiProperties.json | 23 ++ 3 files changed, 421 insertions(+) create mode 100644 certified-connectors/IN-D Payables/Readme.md create mode 100644 certified-connectors/IN-D Payables/apiDefinition.swagger.json create mode 100644 certified-connectors/IN-D Payables/apiProperties.json diff --git a/certified-connectors/IN-D Payables/Readme.md b/certified-connectors/IN-D Payables/Readme.md new file mode 100644 index 000000000..c597ff012 --- /dev/null +++ b/certified-connectors/IN-D Payables/Readme.md @@ -0,0 +1,33 @@ +# IN-D Payables +IN-D Payables process invoices to extract only the useful details like invoice numbers, PO number, vendor name, etc., and the line items in the table automatically without a need to input a template. The IN-D Payables, can process multiple invoices at once directly from the source you choose from, and send the relevant fields to the accounting software connected in the flow for accounting purposes in a matter of seconds. + +The fields IN-D Payables Connector can extract from an invoice are as follows with respective confidence score: +- Invoice number +- Invoice date +- PO number +- Vendor name +- Vendor address +- Total +- Subtotal +- Tax +- CGST +- SGST +- IGST +Apart from these attributes, the table data will also get extracted. The type of data that it understands right now includes the following, +- Description or Item name +- Quantity +- Unit Price +- Amount + +*For any additional DataPoint to be extracted please connect with us on explore@in-d.ai. + +## Prerequisites +You will need the following to proceed
+• Active Microsoft Power Automate, Power Apps, Logic Apps account
+• You need an API key to access the connector which you can get from IN-D One portal. + +### Supported Operations +• invoice Process : This action process invoices to extract only the useful details like invoice numbers, PO number, vendor name, etc., and the line items in the table automatically without a need to input a template. The IN-D Payables, can process multiple invoices at once directly from the source you choose from, and send the relevant fields to the accounting software connected in the flow for accounting purposes in a matter of seconds. + +### How to get credentials +For accessing the connector, you need an API Key which can be obtained from our portal (https://one.in-d.ai). Register your company to create an account. Login and you can always get your API Key generated by clicking Generate button under the Payables product. By default each Key only have 1000 credit points that you can utilize to test the solution. For official implementation drop a mail to explore@in-d.ai. We will connect with you in next 24 hours. diff --git a/certified-connectors/IN-D Payables/apiDefinition.swagger.json b/certified-connectors/IN-D Payables/apiDefinition.swagger.json new file mode 100644 index 000000000..2f96c4d25 --- /dev/null +++ b/certified-connectors/IN-D Payables/apiDefinition.swagger.json @@ -0,0 +1,365 @@ +{ + "swagger": "2.0", + "info": { + "title": "IN-D Payables", + "description": "IN-D Payables process invoices to extract only the useful details like invoice numbers, PO number, vendor name, etc., and the line items in the table automatically without a need to input a template. The IN-D Payables, can process multiple invoices at once directly from the source you choose from, and send the relevant fields to the accounting software connected in the flow for accounting purposes in a matter of seconds.", + "version": "1.0", + "contact": { + "name": "IN-D Support", + "url": "https://one.in-d.ai/developer/", + "email": "explore@in-d.ai" + } + }, + "host": "api.payables.in-d.ai", + "basePath": "/api", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/extract_data": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "type": "object", + "properties": { + "file_name": { + "type": "string", + "description": "file_name" + }, + "invoice_number": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "A reference generated by the supplier which uniquely identifies a document, e.g. INV-1447" + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for invoice number", + "title": "conf_score" + } + }, + "description": "invoice number with confidence score" + }, + "invoice_date": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "The date at which the documentwas released or printed. Generally distinct from the due date for bills and may be presented in a variety of formats,e.g. 11st December, 2018 or 11-12-2018 in invoices. However, thereturned date always follows a stdformat of yyyy-mm-dd." + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for invoice date", + "title": "conf_score" + } + }, + "description": "invoice date with confidence score" + }, + "po_number": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "A reference generated by thebuyer which uniquely identifies aproduct, e.g. PO-112345." + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for po number", + "title": "conf_score" + } + }, + "description": "po number with confidence score" + }, + "vendor_name": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Name of a supplier. A name used to describe a Company or Individual." + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for vendor name", + "title": "conf_score" + } + }, + "description": "vendor name with confidence score" + }, + "vendor_address": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Address of a supplier. It refers to the location where the Vendor\\u2019s office exists. For e.g. XYZ street,Chennai,India" + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for vendor address", + "title": "conf_score" + } + }, + "description": "vendor address with confidence score" + }, + "total_amount": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Total Amount (including taxes)" + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for total amount", + "title": "conf_score" + } + }, + "description": "Total Amount (including taxes) with confidence score" + }, + "subtotal_amount": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Base Amount (excluding taxes)" + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for base amount (excluding taxes)", + "title": "conf_score" + } + }, + "description": "Base Amount (excluding taxes) with confidence score" + }, + "tax_amount": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Total Tax Amount" + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for total tax amount", + "title": "conf_score" + } + }, + "description": "Total Tax Amount with confidence score" + }, + "cgst": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Central GST" + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for Central GST", + "title": "conf_score" + } + }, + "description": "Central GST with confidence score" + }, + "sgst": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "State GST" + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score for State GST", + "title": "conf_score" + } + }, + "description": "State GST with confidence score" + }, + "igst": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Integrated GST" + }, + "conf_score": { + "type": "number", + "format": "float", + "description": "confidence score with Integrated GST", + "title": "conf_score" + } + }, + "description": "Integrated GST with confidence score" + }, + "table_data": { + "type": "object", + "properties": { + "columns": { + "type": "array", + "items": { + "type": "string" + }, + "description": "columns" + }, + "data": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "data" + } + }, + "description": "Quantity of the item, Price of each unit of line item, Total Price that includes all the line- item quantities.Total Price = Quantity * Unit Price" + } + } + }, + "description": "result" + } + } + } + }, + "400": { + "description": "invalid base64 string", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "401": { + "description": "invalid api key", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "403": { + "description": "authorization headers or api key not given", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message" + } + } + } + }, + "500": { + "description": "internal error", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message" + } + } + } + } + }, + "summary": "invoice process", + "operationId": "InvoiceCapture", + "description": "Process invoices to extract only the useful details like invoice numbers, PO number, vendor name, etc., and the line items in the table automatically without a need to input a template.", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "description": "Content-Type of POST request", + "x-ms-summary": "Content-Type of request" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "payload": { + "type": "string", + "description": "payload", + "title": "Base64 content of file", + "format": "byte" + } + }, + "required": [ + "payload" + ] + }, + "required": [ + "items" + ] + } + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.in-d.ai" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.in-d.ai/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;IT Operations" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "x-api-key" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [] +} diff --git a/certified-connectors/IN-D Payables/apiProperties.json b/certified-connectors/IN-D Payables/apiProperties.json new file mode 100644 index 000000000..ef0864622 --- /dev/null +++ b/certified-connectors/IN-D Payables/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#158978", + "capabilities": [], + "publisher": "IN-D by Intain", + "stackOwner": "IN-D by Intain" + } +} \ No newline at end of file From 4c536c302018cc61e92c31a289f71c53f5541bf9 Mon Sep 17 00:00:00 2001 From: Cloudmersive <35204726+Cloudmersive@users.noreply.github.com> Date: Fri, 28 Aug 2020 16:45:45 -0700 Subject: [PATCH 035/347] Added Cloudmersive Video and Media Connector (#412) --- .../Cloudmersive Video and Media/Readme.md | 73 + .../apiDefinition.swagger.json | 1318 +++++++++++++++++ .../apiProperties.json | 23 + 3 files changed, 1414 insertions(+) create mode 100644 certified-connectors/Cloudmersive Video and Media/Readme.md create mode 100644 certified-connectors/Cloudmersive Video and Media/apiDefinition.swagger.json create mode 100644 certified-connectors/Cloudmersive Video and Media/apiProperties.json diff --git a/certified-connectors/Cloudmersive Video and Media/Readme.md b/certified-connectors/Cloudmersive Video and Media/Readme.md new file mode 100644 index 000000000..bd3d577ba --- /dev/null +++ b/certified-connectors/Cloudmersive Video and Media/Readme.md @@ -0,0 +1,73 @@ + +## Cloudmersive Video and Media +[Video and Media API](https://cloudmersive.com/video-and-media-services-api) covers a wide array of common video and audio processing needs, including encoding, decoding, editing, resizing, moderating and extracting metadata. Stateless high-security processing ensures fast performance and strong security. + + +## Pre-requisites +N/A + + +## API documentation +[Video and Media API](https://api.cloudmersive.com/docs/video.asp) is available on the Cloudmersive website + + +## Supported Operations + +### Convert Audio File to MP3 format +Automatically detect audio file format and convert it to MP3 format. Supports many input audio formats, including AAC, FLAC, M4A, MP2, MP3, OGG, WMA, and WAV. + +### Convert Audio File to M4A format +Automatically detect audio file format and convert it to M4A format. Supports many input audio formats, including AAC, FLAC, M4A, MP2, MP3, OGG, WMA, and WAV. + +### Convert Audio File to AAC format +Automatically detect audio file format and convert it to AAC format. Supports many input audio formats, including AAC, FLAC, M4A, MP2, MP3, OGG, WMA, and WAV. + +### Convert Audio File to WAV format +Automatically detect audio file format and convert it to WAV format. Supports many input audio formats, including AAC, FLAC, M4A, MP2, MP3, OGG, WMA, and WAV. + +### Get detailed information about a video or audio file +Retrieve detailed information about a video or audio file, including format, dimensions, file size, bit rate, duration and start time. Compatible with many formats, including: AVI, ASF, FLV, GIF, MP4, MPEG/MPG, Matroska/WEBM, MOV, AIFF, ASF, CAF, MP3, MP2, MP1, Ogg, OMG/OMA, and WAV + +### Convert Video to WEBM format +Automatically detect video file format and convert it to WEBM format. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. + +### Convert Video to MOV format +Automatically detect video file format and convert it to MOV format. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. + +### Convert Video to MP4 format +Automatically detect video file format and convert it to MP4 format. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. + +### Convert Video to Animated GIF format +Automatically detect video file format and convert it to animated GIF format. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. + +### Resizes a Video Preserving the Original Aspect Ratio +Resizes a video, while maintaining the original aspect ratio and encoding. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, MKV, M4V and MOV. + +### Resizes a Video without Preserving Aspect Ratio +Resizes a video without maintaining original aspect ratio, allowing fully customizable dimensions. May cause image skewing. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, MKV, M4V and MOV. + +### Cut a Video to a Shorter Length +Cuts a video to the specified start and end times. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. + +### Split a Video into Two Shorter Videos +Cuts a video into two videos based on the specified start time. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, MKV, M4V and MOV. + +### Convert Video to PNG Still Frames +Automatically detect video file format and convert it to an array of still frame PNG images. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. + +### Scan a Video for NSFW content +Automatically detect video file format and scan it for Not Safe For Work (NSFW)/Porn/Racy content. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. + + +## How to get credentials +- [Register](https://account.cloudmersive.com/signup) for a Cloudmersive Account +- [Sign In](https://account.cloudmersive.com/login) with your Cloudmersive Account and click on API Keys + +Here you can create and see your API key(s) listed on the API Keys page. Simply copy and paste this API Key into the Cloudmersive Video and Media Connector. + +Now you are ready to start using the Cloudmersive Video and Media Connector. + + +## Deployment instructions +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as custom connector in Microsoft Power Automate and Power Apps + diff --git a/certified-connectors/Cloudmersive Video and Media/apiDefinition.swagger.json b/certified-connectors/Cloudmersive Video and Media/apiDefinition.swagger.json new file mode 100644 index 000000000..0afc247f2 --- /dev/null +++ b/certified-connectors/Cloudmersive Video and Media/apiDefinition.swagger.json @@ -0,0 +1,1318 @@ +{ + "swagger": "2.0", + "info": { + "version": "v1", + "title": "Cloudmersive Video and Media", + "description": "Cloudmersive Video and Media Connector is critical for converting, editing, resizing, moderating and processing video, audio and other media. Cloudmersive Video and Media Services covers a wide array of common video and audio processing needs, including encoding, decoding, editing, resizing, moderating and extracting metadata. Stateless high-security processing ensures fast performance and strong security.", + "contact": { + "name": "Cloumdersive Support", + "url": "https://account.cloudmersive.com/contact-support", + "email": "support@cloudmersive.com" + } + }, + "host": "api.cloudmersive.com", + "schemes": [ + "https" + ], + "paths": { + "/video/convert/to/mp3": { + "post": { + "tags": [ + "Audio" + ], + "summary": "Convert Audio File to MP3 format", + "description": "Automatically detect audio file format and convert it to MP3 format. Supports many input audio formats, including AAC, FLAC, M4A, MP2, MP3, OGG, WMA, and WAV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Audio_ConvertToMp3", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on." + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of an audio file being used for conversion. Use this opt...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of an audio file being used for conversion" + }, + { + "name": "bitRate", + "in": "header", + "description": "Optional; Specify the desired bitrate of the converted audio file in k...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the desired bitrate of the converted audio file" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/to/m4a": { + "post": { + "tags": [ + "Audio" + ], + "summary": "Convert Audio File to M4A format", + "description": "Automatically detect audio file format and convert it to M4A format. Supports many input audio formats, including AAC, FLAC, M4A, MP2, MP3, OGG, WMA, and WAV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Audio_ConvertToM4a", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of an audio file being used for conversion. Use this opt...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of an audio file being used for conversion" + }, + { + "name": "bitRate", + "in": "header", + "description": "Optional; Specify the desired bitrate of the converted audio file in k...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the desired bitrate of the converted audio file" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/to/aac": { + "post": { + "tags": [ + "Audio" + ], + "summary": "Convert Audio File to AAC format", + "description": "Automatically detect audio file format and convert it to AAC format. Supports many input audio formats, including AAC, FLAC, M4A, MP2, MP3, OGG, WMA, and WAV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Audio_ConvertToAac", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of an audio file being used for conversion. Use this opt...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of an audio file being used for conversion" + }, + { + "name": "bitRate", + "in": "header", + "description": "Optional; Specify the desired bitrate of the converted audio file in k...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the desired bitrate of the converted audio file" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/to/wav": { + "post": { + "tags": [ + "Audio" + ], + "summary": "Convert Audio File to WAV format", + "description": "Automatically detect audio file format and convert it to WAV format. Supports many input audio formats, including AAC, FLAC, M4A, MP2, MP3, OGG, WMA, and WAV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Audio_ConvertToWav", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of an audio file being used for conversion. Use this opt...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of an audio file being used for conversion" + }, + { + "name": "sampleRate", + "in": "header", + "description": "Optional; Specify the desired sample rate of the converted audio file ...", + "required": false, + "type": "number", + "x-ms-summary": "Optional; Specify the desired sample rate of the converted audio file" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/get-info": { + "post": { + "tags": [ + "Video" + ], + "summary": "Get detailed information about a video or audio file", + "description": "Retrieve detailed information about a video or audio file, including format, dimensions, file size, bit rate, duration and start time. Compatible with many formats, including: AVI, ASF, FLV, GIF, MP4, MPEG/MPG, Matroska/WEBM, MOV, AIFF, ASF, CAF, MP3, MP2, MP1, Ogg, OMG/OMA, and WAV. Uses 1 API call per 10 MB of file size.", + "operationId": "Video_GetInfo", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on." + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/MediaInformation" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/to/webm": { + "post": { + "tags": [ + "Video" + ], + "summary": "Convert Video to WEBM format", + "description": "Automatically detect video file format and convert it to WEBM format. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Video_ConvertToWebm", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "maxWidth", + "in": "header", + "description": "Optional; Maximum width of the output video, up to the original video ...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum width of the output video, up to the original video" + }, + { + "name": "maxHeight", + "in": "header", + "description": "Optional; Maximum height of the output video, up to the original video...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum height of the output video, up to the original video" + }, + { + "name": "preserveAspectRatio", + "in": "header", + "description": "Optional; If false, the original video's aspect ratio will not be pres...", + "required": false, + "type": "boolean", + "x-ms-summary": "Optional; If false, the original video's aspect ratio" + }, + { + "name": "frameRate", + "in": "header", + "description": "Optional; Specify the frame rate of the output video. Defaults to orig...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the frame rate of the output video" + }, + { + "name": "quality", + "in": "header", + "description": "Optional; Specify the quality of the output video, where 100 is lossle...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the quality of the output video" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/to/mov": { + "post": { + "tags": [ + "Video" + ], + "summary": "Convert Video to MOV format", + "description": "Automatically detect video file format and convert it to MOV format. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Video_ConvertToMov", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on." + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "maxWidth", + "in": "header", + "description": "Optional; Maximum width of the output video, up to the original video ...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum width of the output video, up to the original video" + }, + { + "name": "maxHeight", + "in": "header", + "description": "Optional; Maximum height of the output video, up to the original video...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum height of the output video, up to the original video" + }, + { + "name": "preserveAspectRatio", + "in": "header", + "description": "Optional; If false, the original video's aspect ratio will not be pres...", + "required": false, + "type": "boolean", + "x-ms-summary": "Optional; If false, the original video's aspect ratio will not be pres" + }, + { + "name": "frameRate", + "in": "header", + "description": "Optional; Specify the frame rate of the output video. Defaults to orig...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the frame rate of the output video. Defaults to orig" + }, + { + "name": "quality", + "in": "header", + "description": "Optional; Specify the quality of the output video, where 100 is lossle...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the quality of the output video" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/to/mp4": { + "post": { + "tags": [ + "Video" + ], + "summary": "Convert Video to MP4 format", + "description": "Automatically detect video file format and convert it to MP4 format. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Video_ConvertToMp4", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "maxWidth", + "in": "header", + "description": "Optional; Maximum width of the output video, up to the original video ...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum width of the output video, up to the original video" + }, + { + "name": "maxHeight", + "in": "header", + "description": "Optional; Maximum height of the output video, up to the original video...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum height of the output video, up to the original video" + }, + { + "name": "preserveAspectRatio", + "in": "header", + "description": "Optional; If false, the original video's aspect ratio will not be pres...", + "required": false, + "type": "boolean", + "x-ms-summary": "Optional; If false, the original video's aspect ratio" + }, + { + "name": "frameRate", + "in": "header", + "description": "Optional; Specify the frame rate of the output video. Defaults to orig...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the frame rate of the output video" + }, + { + "name": "quality", + "in": "header", + "description": "Optional; Specify the quality of the output video, where 100 is lossle...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the quality of the output video" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/to/gif": { + "post": { + "tags": [ + "Video" + ], + "summary": "Convert Video to Animated GIF format", + "description": "Automatically detect video file format and convert it to animated GIF format. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB. Default height is 250 pixels, while preserving the video's aspect ratio.", + "operationId": "Video_ConvertToGif", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "maxWidth", + "in": "header", + "description": "Optional; Maximum width of the output video, up to the original video ...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum width of the output video" + }, + { + "name": "maxHeight", + "in": "header", + "description": "Optional; Maximum height of the output video, up to the original video...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum height of the output video" + }, + { + "name": "preserveAspectRatio", + "in": "header", + "description": "Optional; If false, the original video's aspect ratio will not be pres...", + "required": false, + "type": "boolean", + "x-ms-summary": "Optional; If false, the original video's aspect ratio" + }, + { + "name": "frameRate", + "in": "header", + "description": "Optional; Specify the frame rate of the output video. Defaults to 24 f...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the frame rate of the output video" + }, + { + "name": "startTime", + "in": "header", + "description": "Optional; Specify the desired starting time of the GIF video in TimeSpan format.", + "required": false, + "type": "string", + "format": "date-time", + "x-ms-summary": "Optional; Specify the desired starting time of the GIF video in TimeSpan format" + }, + { + "name": "timeSpan", + "in": "header", + "description": "Optional; Specify the desired length of the GIF video in TimeSpan form...", + "required": false, + "type": "string", + "format": "date-time", + "x-ms-summary": "Optional; Specify the desired length of the GIF video" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/resize/preserveAspectRatio": { + "post": { + "tags": [ + "Video" + ], + "summary": "Resizes a Video Preserving the Original Aspect Ratio", + "description": "Resizes a video, while maintaining the original aspect ratio and encoding. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Video_ResizeVideo", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "maxWidth", + "in": "header", + "description": "Optional; Maximum width of the output video, up to the original video ...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum width of the output video" + }, + { + "name": "maxHeight", + "in": "header", + "description": "Optional; Maximum height of the output video, up to the original video...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum height of the output video" + }, + { + "name": "frameRate", + "in": "header", + "description": "Optional; Specify the frame rate of the output video. Defaults to orig...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the frame rate of the output video" + }, + { + "name": "quality", + "in": "header", + "description": "Optional; Specify the quality of the output video, where 100 is lossle...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the quality of the output video" + }, + { + "name": "extension", + "in": "header", + "description": "Optional; Specify the file extension of the input video. This is recom...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; Specify the file extension of the input video" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/resize/target": { + "post": { + "tags": [ + "Video" + ], + "summary": "Resizes a Video without Preserving Aspect Ratio", + "description": "Resizes a video without maintaining original aspect ratio, allowing fully customizable dimensions. May cause image skewing. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Video_ResizeVideoSimple", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "maxWidth", + "in": "header", + "description": "Optional; Maximum width of the output video, up to the original video ...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum width of the output video" + }, + { + "name": "maxHeight", + "in": "header", + "description": "Optional; Maximum height of the output video, up to the original video...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum height of the output video" + }, + { + "name": "frameRate", + "in": "header", + "description": "Optional; Specify the frame rate of the output video. Defaults to orig...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the frame rate of the output video" + }, + { + "name": "quality", + "in": "header", + "description": "Optional; Specify the quality of the output video, where 100 is lossle...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Specify the quality of the output video" + }, + { + "name": "extension", + "in": "header", + "description": "Optional; Specify the file extension of the input video. This is recom...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; Specify the file extension of the input video" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/cut": { + "post": { + "tags": [ + "Video" + ], + "summary": "Cut a Video to a Shorter Length", + "description": "Cuts a video to the specified start and end times. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Video_CutVideo", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "startTime", + "in": "header", + "description": "Optional; Specify the desired starting time of the cut video in TimeSpan format.", + "required": false, + "type": "string", + "format": "date-time", + "x-ms-summary": "Optional; Specify the desired starting time of the cut video in TimeSpan format" + }, + { + "name": "timeSpan", + "in": "header", + "description": "Optional; Specify the desired length of the cut video in TimeSpan form...", + "required": false, + "type": "string", + "format": "date-time", + "x-ms-summary": "Optional; Specify the desired length of the cut video in TimeSpan form" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/split": { + "post": { + "tags": [ + "Video" + ], + "summary": "Split a Video into Two Shorter Videos", + "description": "Cuts a video into two videos based on the specified start time. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time. Maximum output file size is 50GB.", + "operationId": "Video_SplitVideo", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/octet-stream" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "splitTime", + "in": "header", + "description": "Specify the desired time at which to split the video in TimeSpan format.", + "required": true, + "type": "string", + "format": "date-time", + "x-ms-summary": "Specify the desired time at which to split the video in TimeSpan format" + }, + { + "name": "timeSpan", + "in": "header", + "description": "Optional; Specify the desired length of the second video in TimeSpan f...", + "required": false, + "type": "string", + "format": "date-time", + "x-ms-summary": "Optional; Specify the desired length of the second video in TimeSpan" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/SplitVideoResult" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/convert/to/still-frames": { + "post": { + "tags": [ + "Video" + ], + "summary": "Convert Video to PNG Still Frames", + "description": "Automatically detect video file format and convert it to an array of still frame PNG images. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per additional minute of processing time over 5 minutes, up to a maximum of 25 minutes total processing time.", + "operationId": "Video_ConvertToStillFrames", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on." + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being used for conversion. Use this opti...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being used for conversion" + }, + { + "name": "maxWidth", + "in": "header", + "description": "Optional; Maximum width of the output video, up to the original video ...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum width of the output video" + }, + { + "name": "maxHeight", + "in": "header", + "description": "Optional; Maximum height of the output video, up to the original video...", + "required": false, + "type": "integer", + "x-ms-summary": "Optional; Maximum height of the output video" + }, + { + "name": "framesPerSecond", + "in": "header", + "description": "Optional; How many video frames per second to be returned as PNG image...", + "required": false, + "type": "number", + "x-ms-summary": "Optional; How many video frames per second to be returned as PNG image" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/StillFramesResult" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + }, + "/video/scan/nsfw": { + "post": { + "tags": [ + "Video" + ], + "summary": "Scan a Video for NSFW content", + "description": "Automatically detect video file format and scan it for Not Safe For Work (NSFW)/Porn/Racy content. Supports many input video formats, including AVI, ASF, FLV, MP4, MPEG/MPG, Matroska/WEBM, 3G2, OGV, MKV, M4V and MOV. Uses 1 API call per 10 MB of file size. Also uses 1 API call per frame scanned.", + "operationId": "Video_ScanForNsfw", + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "inputFile", + "in": "formData", + "description": "Input file to perform the operation on.", + "required": false, + "type": "file", + "x-ms-summary": "Input file to perform the operation on" + }, + { + "name": "fileUrl", + "in": "header", + "description": "Optional; URL of a video file being scanned. Use this option for files...", + "required": false, + "type": "string", + "x-ms-summary": "Optional; URL of a video file being scanned. Use this option for files" + }, + { + "name": "framesPerSecond", + "in": "header", + "description": "Optional; How many video frames per second to be scanned", + "required": false, + "type": "number", + "x-ms-summary": "Optional; How many video frames per second to be scanned" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/NsfwResult" + } + } + }, + "security": [ + { + "Apikey": [] + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.cloudmersive.com/nlp-api" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.cloudmersive.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Content and Files" + } + ], + "definitions": { + "MediaInformation": { + "description": "Result of retrieving information about a video or audio file", + "type": "object", + "properties": { + "Successful": { + "description": "True if the operation was successful, false otherwise", + "type": "boolean" + }, + "FileFormat": { + "description": "The file's short format name", + "type": "string" + }, + "FileFormatFull": { + "description": "The file's full format name", + "type": "string" + }, + "ValidFileFormats": { + "description": "A list of the file's valid formats", + "type": "array", + "items": { + "type": "string" + } + }, + "Width": { + "format": "int32", + "description": "The video's width, if file is a video", + "type": "integer" + }, + "Height": { + "format": "int32", + "description": "The video's height, if file is a video", + "type": "integer" + }, + "Size": { + "format": "int32", + "description": "The file's size in bytes", + "type": "integer" + }, + "BitRate": { + "format": "int32", + "description": "The file's bit rate", + "type": "integer" + }, + "Duration": { + "format": "double", + "description": "The file's duration in seconds", + "type": "number" + }, + "StartTime": { + "format": "double", + "description": "The file's media start time", + "type": "number" + } + } + }, + "SplitVideoResult": { + "description": "The result of splitting a video", + "type": "object", + "properties": { + "Successful": { + "description": "True if the operation was successful, false otherwise", + "type": "boolean" + }, + "Videos": { + "description": "Individual video files resulting from the split operation", + "type": "array", + "items": { + "$ref": "#/definitions/VideoFile" + } + } + } + }, + "VideoFile": { + "description": "A video file", + "type": "object", + "properties": { + "VideoNumber": { + "format": "int32", + "description": "Sequence number of the video", + "type": "integer" + }, + "Content": { + "format": "byte", + "description": "The video file as a byte array", + "type": "string" + } + } + }, + "StillFramesResult": { + "description": "The result of converting a video into still frames", + "type": "object", + "properties": { + "Successful": { + "description": "True if the operation was successful, false otherwise", + "type": "boolean" + }, + "TotalFrames": { + "format": "int32", + "description": "The total number of frames converted", + "type": "integer" + }, + "StillFrames": { + "description": "Individual still frames from the conversion operation", + "type": "array", + "items": { + "$ref": "#/definitions/StillFrame" + } + } + } + }, + "StillFrame": { + "description": "A single still frame from a video", + "type": "object", + "properties": { + "FrameNumber": { + "format": "int32", + "description": "The number of the current frame", + "type": "integer" + }, + "TimeStamp": { + "description": "The playback time of the current frame", + "type": "string" + }, + "Content": { + "format": "byte", + "description": "The still frame in PNG format as a byte array", + "type": "string" + } + } + }, + "NsfwResult": { + "description": "The result of scanning a video file for NSFW content", + "type": "object", + "properties": { + "Successful": { + "description": "True if the operation was successful, false otherwise", + "type": "boolean" + }, + "HighestClassificationResult": { + "description": "The highest NSFW classification of the video", + "type": "string" + }, + "HighestScore": { + "format": "double", + "description": "The highest NSFW score out of all frames scanned", + "type": "number" + }, + "TotalRacyFrames": { + "format": "int32", + "description": "The total number of potentially \"racy\" frames.", + "type": "integer" + }, + "TotalNsfwFrames": { + "format": "int32", + "description": "The total number of frames with high probability of NSFW.", + "type": "integer" + }, + "TotalFrames": { + "format": "int32", + "description": "The total number of frames scanned", + "type": "integer" + }, + "NsfwScannedFrames": { + "description": "The NSFW scanning results for each frame", + "type": "array", + "items": { + "$ref": "#/definitions/NsfwScannedFrame" + } + } + } + }, + "NsfwScannedFrame": { + "description": "An individual frame scanned for NSFW content", + "type": "object", + "properties": { + "FrameNumber": { + "format": "int32", + "description": "The number of the current frame", + "type": "integer" + }, + "TimeStamp": { + "description": "The playback time of the current frame", + "type": "string" + }, + "Content": { + "format": "byte", + "description": "The still frame in PNG format as a byte array", + "type": "string" + }, + "ClassificationResult": { + "description": "The NSFW classification of the still frame", + "type": "string" + }, + "Score": { + "format": "double", + "description": "The NSFW score of the current frame", + "type": "number" + } + } + } + }, + "securityDefinitions": { + "Apikey": { + "type": "apiKey", + "description": "API Key Authentication", + "name": "Apikey", + "in": "header" + } + } +} \ No newline at end of file diff --git a/certified-connectors/Cloudmersive Video and Media/apiProperties.json b/certified-connectors/Cloudmersive Video and Media/apiProperties.json new file mode 100644 index 000000000..b9ab950bb --- /dev/null +++ b/certified-connectors/Cloudmersive Video and Media/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "constraints": { + "clearText": false, + "required": "true", + "tabIndex": 2 + }, + "description": "The Api Key for this API", + "displayName": "API Key (from https://cloudmersive.com)", + "tooltip": "Provide your Api Key - get this key from https://cloudmersive.com" + } + } + }, + "iconBrandColor": "#3a6f99", + "capabilities": [], + "publisher": "Cloudmersive, LLC", + "stackOwner": "Cloudmersive, LLC" + } +} \ No newline at end of file From 1b78b7f8a6f5ba1aeced1149c0cd4e1f213d9a64 Mon Sep 17 00:00:00 2001 From: Aman Date: Mon, 31 Aug 2020 20:47:54 +0530 Subject: [PATCH 036/347] Initial commit for CDK Customer API connector --- .../CDK Drive Customers/Readme.md | 31 + .../apiDefinition.swagger.json | 1042 +++++++++++++++++ .../CDK Drive Customers/apiProperties.json | 9 + 3 files changed, 1082 insertions(+) create mode 100644 certified-connectors/CDK Drive Customers/Readme.md create mode 100644 certified-connectors/CDK Drive Customers/apiDefinition.swagger.json create mode 100644 certified-connectors/CDK Drive Customers/apiProperties.json diff --git a/certified-connectors/CDK Drive Customers/Readme.md b/certified-connectors/CDK Drive Customers/Readme.md new file mode 100644 index 000000000..bee6237ba --- /dev/null +++ b/certified-connectors/CDK Drive Customers/Readme.md @@ -0,0 +1,31 @@ +# CDKDrive CRM Customers + +CDK Drive - CRM - Customers +A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a Customer Relationship Management system. + +What does this API do? +The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record. + +Intended Audience +The customer is required in the Sales Deal or Service Appointment creation workflows as they are customer centric. Customer services helps vehicle salesmen or service advisors provide a positive customer experience by allowing those workflows to be tied to a customer identity. + +## Pre-requisites + +You will need the following to proceed + +• To use the connector, you need to be a Fortellis user. + +• You need to create an solution in Fortellis to generate client id and secret to be used while calling the APIs + +### Potential Use Cases + +Use the CDKDrive CRM Customers API to create solutions to handle situations such as: + +1. Create or update customer information +2. Link a customer to a service vehicle +3. Search for existing customers by ID or filter criteria + +#### Detailed Documentation can be found at + + +https://apidocs.fortellis.io/specs/0d488dd1-c609-4618-9061-68be8b61c2a9 \ No newline at end of file diff --git a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json new file mode 100644 index 000000000..742ef0687 --- /dev/null +++ b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json @@ -0,0 +1,1042 @@ +{ + "swagger": "2.0", + "info": { + "title": "CDK Drive Customer", + "version": "1.0", + "description": "CDK Drive - CRM - Customers - A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a Customer Relationship Management system. The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record. The customer is required in the Sales Deal or Service Appointment creation workflows as they are customer centric. Customer services helps vehicle salesmen or service advisors provide a positive customer experience by allowing those workflows to be tied to a customer identity.", + "contact": { + "name": "CDK Global", + "url": "https://serviceconnect.support.cdk.com/", + "email": "mbd_support@cdk.com" + } + }, + "host": "cdkapi.azure-api.net", + "basePath": "/customer", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/": { + "get": { + "description": "Query customers", + "operationId": "queryCustomers", + "summary": "Query customers", + "tags": [ + "query" + ], + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Filters customers by name", + "type": "string", + "x-ms-summary": "Name" + }, + { + "name": "email", + "in": "query", + "description": "Filters customers by email address", + "type": "string", + "x-ms-summary": "Email" + }, + { + "name": "phone", + "in": "query", + "description": "Filters customers by phone number", + "type": "string", + "x-ms-summary": "Phone" + }, + { + "name": "subscription_id", + "in": "query", + "required": true, + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "required": true, + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "required": true, + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/CustomerCollection" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "post": { + "description": "Create a customer", + "operationId": "createCustomer", + "summary": "Create a customer", + "tags": [ + "create" + ], + "parameters": [ + { + "name": "client_id", + "in": "query", + "required": true, + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "required": true, + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "subscription_id", + "in": "query", + "required": true, + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + }, + { + "name": "createCustomer", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateCustomer" + }, + "description": "The customer definition" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "201": { + "description": "Created", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Customer" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/{customerId}/": { + "get": { + "description": "Query a customer", + "operationId": "queryCustomerById", + "summary": "Query a customer", + "tags": [ + "query" + ], + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "The customer identifier", + "required": true, + "type": "string", + "x-ms-summary": "Customer Id" + }, + { + "name": "subscription_id", + "in": "query", + "required": true, + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "required": true, + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "required": true, + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Customer" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "404 - Not Found", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "post": { + "description": "Update a customer", + "operationId": "updateCustomer", + "summary": "Update a customer", + "tags": [ + "update" + ], + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "The customer identifier", + "required": true, + "type": "string", + "x-ms-summary": "Customer Id" + }, + { + "name": "subscription_id", + "in": "query", + "required": true, + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "required": true, + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "required": true, + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + }, + { + "name": "If-Match", + "in": "header", + "description": "Makes the resource update request conditional. The checksum value \npresented with If-Match must match the current ETag value of the \nresource.\n", + "required": true, + "type": "string", + "x-ms-summary": "eTag" + }, + { + "name": "createCustomer", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateCustomer" + }, + "description": "The customer definition" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Customer" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://apidocs.fortellis.io/specs/0d488dd1-c609-4618-9061-68be8b61c2a9" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "None" + }, + { + "propertyName": "Categories", + "propertyValue": "Data" + } + ], + "definitions": { + "Customer": { + "type": "object", + "properties": { + "customerId": { + "type": "string", + "description": "The idenifier of the customer record" + }, + "name": { + "$ref": "#/definitions/Name", + "description": "The name of the customer" + }, + "contactMethods": { + "$ref": "#/definitions/ContactMethods", + "description": "The contact methods for the customer." + }, + "postalAddress": { + "$ref": "#/definitions/PostalAddress", + "description": "The customer postal address" + }, + "preferredContact": { + "type": "string", + "enum": [ + "ANY", + "WORKFAX", + "PRIMARYEMAIL", + "HOMEFAX", + "MAIL", + "PAGER", + "PRIMARYPHONE", + "DONOTCONTACT" + ], + "description": "The preferred contact method" + }, + "links": { + "$ref": "#/definitions/CustomerLinks", + "description": "The hypermedia links of the customer resource" + } + }, + "required": [ + "customerId", + "name", + "contactMethods", + "postalAddress" + ], + "example": { + "customerId": "ABCDEFGH012345678", + "name": { + "first": "John", + "last": "Doe" + }, + "contactMethods": { + "primaryPhone": "18475555555", + "homePhone": "18473971700", + "mobilePhone": "18475555555", + "pager": "18475555556", + "pagerAccessCode": "1234", + "homeFax": "18475555666", + "workFax": "18475555777", + "email1": "john.doe@example.com", + "emailDesc1": "HOME", + "email2": "johndoe@example.com", + "emailDesc2": "WORK", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + }, + "postalAddress": { + "street": "110 The example road", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + }, + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/crm/v1/customers/ABCDEFGH012345678" + } + } + } + }, + "ContactMethods": { + "type": "object", + "properties": { + "primaryPhone": { + "type": "string", + "description": "The primary phone number of the customer" + }, + "homePhone": { + "type": "string", + "description": "The home phone number of the customer" + }, + "mobilePhone": { + "type": "string", + "description": "The mobile phone number of the customer" + }, + "pager": { + "type": "string", + "description": "The pager number of the customer" + }, + "pagerAccessCode": { + "type": "string", + "description": "The pager access code of the customer" + }, + "homeFax": { + "type": "string", + "description": "The home fax number of the customer" + }, + "workFax": { + "type": "string", + "description": "The work fax number of the customer" + }, + "email1": { + "type": "string", + "description": "Email address 1 of the customer. You can enter NA for Non-Applicable or CD for Customer Declined if no other email address is present" + }, + "emailDesc1": { + "type": "string", + "default": "HOME", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 1 description. Will contain NA or CD if entered on email1." + }, + "email2": { + "type": "string", + "description": "Email address 2 of the customer" + }, + "emailDesc2": { + "type": "string", + "default": "WORK", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 2 description" + }, + "email3": { + "type": "string", + "description": "Email address 3 of the customer" + }, + "emailDesc3": { + "type": "string", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 3 description" + }, + "email4": { + "type": "string", + "description": "Email address 4 of the customer" + }, + "emailDesc4": { + "type": "string", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 4 description" + }, + "email5": { + "type": "string", + "description": "Email address 5 of the customer" + }, + "emailDesc5": { + "type": "string", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 5 description" + }, + "email6": { + "type": "string", + "description": "Email address 6 of the customer" + }, + "emailDesc6": { + "type": "string", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 6 description" + }, + "preferredMethod": { + "type": "string", + "enum": [ + "PRIMARYPHONE", + "PAGER", + "HOMEFAX", + "WORKFAX", + "PRIMARYEMAIL" + ], + "description": "The preferred method of contact for the customer" + }, + "blockPhoneFlag": { + "type": "boolean", + "description": "Indicates whether or not to phone telephone advertising" + }, + "blockEmailFlag": { + "type": "boolean", + "description": "Indicates whether or not to block e-mail advertising" + }, + "blockMailFlag": { + "type": "boolean", + "description": "Indicates whether or not to block mail advertising" + } + }, + "example": { + "primaryPhone": "18475555555", + "homePhone": "18473971700", + "mobilePhone": "18475555555", + "pager": "18475555556", + "pagerAccessCode": "1234", + "homeFax": "18475555666", + "workFax": "18475555777", + "email1": "john.doe@example.com", + "emailDesc1": "HOME", + "email2": "johndoe@example.com", + "emailDesc2": "WORK", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + } + }, + "PostalAddress": { + "type": "object", + "properties": { + "street": { + "type": "string", + "description": "Can be street, avenue, road, etc. This element also includes the house number and room/apartment/flat/floor number." + }, + "city": { + "type": "string", + "description": "Can be city, village, town, borough, etc. This is the postal town and not necessarily the place of residence or place of business." + }, + "county": { + "type": "string", + "description": "Handles administrative districts such as U.S. or U.K. counties that are not used for mail addressing purposes. Subregion is not intended for delivery addresses." + }, + "state": { + "type": "string", + "description": "A state, province, county (in Ireland), Land (in Germany), departement (in France), etc." + }, + "postalCode": { + "type": "string", + "description": "Postal code. Usually country-wide, but sometimes specific to the city (e.g. '2' in 'Dublin 2, Ireland' addresses)." + }, + "country": { + "type": "string", + "description": "The ISO country code of the country" + } + }, + "example": { + "street": "110 The example road", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + } + }, + "CustomerLinks": { + "type": "object", + "properties": { + "self": { + "$ref": "#/definitions/LinkDescriptionObject", + "description": "The cannonical link to the customer resource" + } + }, + "required": [ + "self" + ], + "example": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/crm/v1/customers/ABCDEFGH012345678" + } + } + }, + "CustomerCollection": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/Customer" + } + } + }, + "example": { + "items": [ + { + "customerId": "ABCDEFGH012345678", + "name": { + "first": "John", + "last": "Doe" + }, + "contactMethods": { + "primaryPhone": "18475555555", + "homePhone": "18473971700", + "mobilePhone": "18475555555", + "pager": "18475555556", + "pagerAccessCode": "1234", + "homeFax": "18475555666", + "workFax": "18475555777", + "email1": "john.doe@example.com", + "emailDesc1": "HOME", + "email2": "johndoe@example.com", + "emailDesc2": "WORK", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + }, + "postalAddress": { + "street": "110 The example road", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + }, + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/crm/v1/customers/ABCDEFGH012345678" + } + } + }, + { + "customerId": "RSTUVWXYZ98765432", + "name": null, + "companyName": "ABC Corp", + "contactMethods": { + "primaryPhone": "1-222-333-4444", + "pager": "1-222-333-6666", + "pagerAccessCode": "1234", + "homeFax": "1-222-333-7777", + "workFax": "1-222-333-8888", + "email1": "contactus@abccorp.com", + "email2": "support@abccorp.com", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + }, + "postalAddress": { + "street": "123 Shady Lane", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + }, + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/crm/v1/customers/RSTUVWXYZ98765432" + } + } + } + ] + } + }, + "CreateCustomer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/CreateUpdateName", + "description": "The primary name associated with the customer." + }, + "contactMethods": { + "$ref": "#/definitions/ContactMethods", + "description": "The contact methods for the customer." + }, + "postalAddress": { + "$ref": "#/definitions/PostalAddress", + "minItems": 1, + "description": "The customer postal address" + } + }, + "required": [ + "name", + "contactMethods", + "postalAddress" + ], + "example": { + "name": { + "first": "John", + "last": "Doe" + }, + "contactMethods": { + "primaryPhone": "18475555555", + "homePhone": "18473971700", + "mobilePhone": "18475555555", + "pager": "18475555556", + "pagerAccessCode": "1234", + "homeFax": "18475555666", + "workFax": "18475555777", + "email1": "john.doe@example.com", + "emailDesc1": "HOME", + "email2": "johndoe@example.com", + "emailDesc2": "WORK", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + }, + "postalAddress": { + "street": "110 The example road", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + } + } + }, + "Name": { + "type": "object", + "properties": { + "first": { + "type": "string", + "description": "The first name of the customer" + }, + "middle": { + "type": "string", + "description": "The middle name of the customer" + }, + "last": { + "type": "string", + "description": "The last name of the customer" + }, + "prefix": { + "type": "string", + "description": "The prefix of the customer" + }, + "suffix": { + "type": "string", + "description": "The suffix of the customer" + }, + "companyName": { + "type": "string", + "description": "If the customer represents a company, then company name will be considered" + } + }, + "required": [ + "first", + "last" + ], + "example": { + "first": "John", + "last": "Doe", + "companyName": "ABC Corp" + } + }, + "CreateUpdateName": { + "type": "object", + "properties": { + "first": { + "type": "string", + "description": "The first name of the customer" + }, + "middle": { + "type": "string", + "description": "The middle name of the customer" + }, + "last": { + "type": "string", + "description": "The last name of the customer" + }, + "prefix": { + "type": "string", + "description": "The prefix of the customer" + }, + "suffix": { + "type": "string", + "description": "The suffix of the customer" + } + }, + "required": [ + "first", + "last" + ], + "example": { + "first": "John", + "last": "Doe" + } + }, + "LinkDescriptionObject": { + "title": "Details of a link to a resource", + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "The target URI" + }, + "method": { + "type": "string", + "description": "The HTTP verb that MUST be used to make a request to the target of the link" + }, + "title": { + "type": "string", + "description": "The title property provides a title for the link and is a helpful documentation tool to facilitate understanding by end clients" + } + }, + "required": [ + "href" + ] + }, + "ErrorResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "example": { + "code": 400, + "message": "Bad Request" + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [ + { + "apiKeyHeader": [] + }, + { + "apiKeyQuery": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/CDK Drive Customers/apiProperties.json b/certified-connectors/CDK Drive Customers/apiProperties.json new file mode 100644 index 000000000..b65b3e9b2 --- /dev/null +++ b/certified-connectors/CDK Drive Customers/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#83bd41", + "capabilities": [], + "publisher": "CDK Global", + "stackOwner": "CDK Global" + } +} \ No newline at end of file From 2420a9bc65a8400eef0e63d27789cd25b28b5d64 Mon Sep 17 00:00:00 2001 From: Aman Date: Mon, 31 Aug 2020 20:56:57 +0530 Subject: [PATCH 037/347] Initial commit for CDK Customer API connector --- .../CDK Drive Customers/apiDefinition.swagger.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json index 742ef0687..d96806dd7 100644 --- a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json +++ b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json @@ -6,7 +6,7 @@ "description": "CDK Drive - CRM - Customers - A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a Customer Relationship Management system. The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record. The customer is required in the Sales Deal or Service Appointment creation workflows as they are customer centric. Customer services helps vehicle salesmen or service advisors provide a positive customer experience by allowing those workflows to be tied to a customer identity.", "contact": { "name": "CDK Global", - "url": "https://serviceconnect.support.cdk.com/", + "url": "https://serviceconnect.support.cdk.com", "email": "mbd_support@cdk.com" } }, @@ -476,11 +476,11 @@ "x-ms-connector-metadata": [ { "propertyName": "Website", - "propertyValue": "https://apidocs.fortellis.io/specs/0d488dd1-c609-4618-9061-68be8b61c2a9" + "propertyValue": "https://fortellis.io" }, { "propertyName": "Privacy policy", - "propertyValue": "None" + "propertyValue": "https://fortellis.io/privacy" }, { "propertyName": "Categories", From 4c47634b5eddc41bbf71fac12d305ff60114e884 Mon Sep 17 00:00:00 2001 From: Aman Date: Mon, 31 Aug 2020 21:03:56 +0530 Subject: [PATCH 038/347] Reducing the length of the description --- .../CDK Drive Customers/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json index d96806dd7..a03e28eeb 100644 --- a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json +++ b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json @@ -3,7 +3,7 @@ "info": { "title": "CDK Drive Customer", "version": "1.0", - "description": "CDK Drive - CRM - Customers - A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a Customer Relationship Management system. The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record. The customer is required in the Sales Deal or Service Appointment creation workflows as they are customer centric. Customer services helps vehicle salesmen or service advisors provide a positive customer experience by allowing those workflows to be tied to a customer identity.", + "description": "CDK Drive - CRM - Customers - A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a CRM system. The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record.This helps service advisors provide a positive experience by allowing those workflows to be tied to a customer.", "contact": { "name": "CDK Global", "url": "https://serviceconnect.support.cdk.com", From b66a15e944adc0e778e25c0d11186ddb57fee30a Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Mon, 31 Aug 2020 22:38:15 +0200 Subject: [PATCH 039/347] Tyntec viber (#416) * added tyntec-viber * remove intro * Fix: Brand color --- certified-connectors/tyntec-Viber/README.md | 42 ++++ .../tyntec-Viber/apiDefinition.swagger.json | 193 ++++++++++++++++++ .../tyntec-Viber/apiProperties.json | 9 + 3 files changed, 244 insertions(+) create mode 100644 certified-connectors/tyntec-Viber/README.md create mode 100644 certified-connectors/tyntec-Viber/apiDefinition.swagger.json create mode 100644 certified-connectors/tyntec-Viber/apiProperties.json diff --git a/certified-connectors/tyntec-Viber/README.md b/certified-connectors/tyntec-Viber/README.md new file mode 100644 index 000000000..822b17578 --- /dev/null +++ b/certified-connectors/tyntec-Viber/README.md @@ -0,0 +1,42 @@ +## Tyntec Conversation API - Send Viber + +Tyntec Conversation API allows you to send customized Viber messages. + +### User Cases of this connector +- Use this connector in PowerApps Workflows (great for Marketing, CRM or Sales) +- Send SMS messages using Azure Logic Apps +- Build SMS support in your Microsoft Power Automate automatizations + +And many more! + + +## Pre-requisites +You will need the following to proceed: +- A Microsoft Power Apps or Power Automate plan with custom connector feature +- [tyntec API Key](http://my.tyntec.com/api-settings) +- [Viber Service ID](https://www.tyntec.com/viber-business-messages#contact) + +## Supported requests +- **Send_Viber** using tyntec Conversation API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) + - To make a successful request, please, populate the followings fields: + - **apikey** - your tyntec API key + - **to** - receiver's phone number in _international_ form without leading 00 (_E.g. 4989202451100_) + - **from** - your Viber Service ID + - **contentType** - content type of your message, use **text** + - **channels key item** - used tyntec Conversation API channel, use **viber** + - **text** - text of your Viber message +- **Status_Check** + - To make a successful status check, please, provide the connector with the following values + - **apikey** - your tyntec API key + - **id** - messageID of your message (_returned after each request_) + + +## How to get API key +Please [sign up for a free account](https://www.tyntec.com/create-account). In your account, select the [API settings](http://my.tyntec.com/api-settings) and copy your API key. + +## How to get Viber Service ID +Please, fill our [form](https://www.tyntec.com/viber-business-messages#contact). Tyntec will guide you through the whole process. + +## Deployment instructions +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as a custom connector in Microsoft Power Automate and Power Apps. + diff --git a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json new file mode 100644 index 000000000..20a7b2826 --- /dev/null +++ b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json @@ -0,0 +1,193 @@ +{ + "swagger": "2.0", + "info": { + "title": "tyntec-viber", + "description": "Send a Viber message using the tyntec Conversation API and retrieve its Status (accepted/delivered/failed) using Status_check.", + "contact": { + "name": "tyntec support", + "url": "https://www.tyntec.com/get-help-support", + "email": "support@tyntec.com" + }, + "version": "1.0" + }, + "host": "api.tyntec.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/chat-api/v2/messages/": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "messageId" + } + } + } + } + }, + "summary": "Send Viber Message", + "description": "Send Viber Message", + "operationId": "Send_Viber", + "parameters": [ + { + "name": "apikey", + "in": "header", + "required": true, + "type": "string", + "description": "Your tyntec API key with the Viber Service ID enabled.", + "x-ms-summary": "A tyntec API key" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "to": { + "type": "string", + "description": "Receiver's phone number", + "title": "to" + }, + "channels": { + "type": "array", + "items": { + "type": "string", + "description": "The tyntec conversation API channel. Use Viber", + "title": "Channel", + "default": "viber" + }, + "description": "channels" + }, + "viber": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Your Viber Service ID", + "title": "from" + }, + "components": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The type of your message. Use default text.", + "title": "type", + "default": "text" + }, + "text": { + "type": "string", + "description": "Your custom text for Viber message", + "title": "text" + } + }, + "required": [ + "text", + "type" + ] + }, + "description": "components" + } + }, + "description": "viber", + "required": [ + "components", + "from" + ] + } + }, + "required": [ + "to", + "channels", + "viber" + ] + } + } + ] + } + }, + "/chat-api/v2/messages/{id}/status": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "messageId" + }, + "deliveryChannel": { + "type": "string", + "description": "deliveryChannel" + }, + "status": { + "type": "string", + "description": "status" + }, + "timestamp": { + "type": "string", + "description": "timestamp" + } + } + } + } + }, + "summary": "Status Check", + "description": "Check for status of your message", + "operationId": "Status_Check", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "Message ID", + "x-ms-summary": "ID of the checked Message" + }, + { + "name": "apikey", + "in": "header", + "required": true, + "type": "string", + "description": "Your tyntec API key", + "x-ms-summary": "Your tyntec API key" + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.tyntec.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.tyntec.com/data-privacy-statement" + }, + { + "propertyName": "Categories", + "propertyValue": "Communication;Marketing" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/tyntec-Viber/apiProperties.json b/certified-connectors/tyntec-Viber/apiProperties.json new file mode 100644 index 000000000..4972b42d6 --- /dev/null +++ b/certified-connectors/tyntec-Viber/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#F99831", + "capabilities": [], + "publisher": "tyntec GmbH", + "stackOwner": "tyntec GmbH" + } +} \ No newline at end of file From 9a0e0596b3eca6e7ef411edde6efdbdba5716d62 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Mon, 31 Aug 2020 22:38:32 +0200 Subject: [PATCH 040/347] Tyntec sms (#417) * added tyntec-sms * remove intro * Fix: Brand color * Fix: summary alphanumeric char --- certified-connectors/tyntec-SMS/README.md | 38 ++++ .../tyntec-SMS/apiDefinition.swagger.json | 184 ++++++++++++++++++ .../tyntec-SMS/apiProperties.json | 9 + 3 files changed, 231 insertions(+) create mode 100644 certified-connectors/tyntec-SMS/README.md create mode 100644 certified-connectors/tyntec-SMS/apiDefinition.swagger.json create mode 100644 certified-connectors/tyntec-SMS/apiProperties.json diff --git a/certified-connectors/tyntec-SMS/README.md b/certified-connectors/tyntec-SMS/README.md new file mode 100644 index 000000000..2fd8e032c --- /dev/null +++ b/certified-connectors/tyntec-SMS/README.md @@ -0,0 +1,38 @@ +## Tyntec Conversation API - Send SMS + +Tyntec Conversation API allows you to send customized SMS messages. + +### User Cases of this connector +- Use this connector in PowerApps Workflows (great for Marketing, CRM or Sales) +- Send SMS messages using Azure Logic Apps +- Build SMS support in your Microsoft Power Automate automatizations + +And many more! + + +## Pre-requisites +You will need the following to proceed: +- A Microsoft Power Apps or Power Automate plan with custom connector feature +- [tyntec API Key](http://my.tyntec.com/api-settings) +- _If you are using a free account, be sure to whitelist your phone number in [SMS's first steps](https://my.tyntec.com/products/sms#first-steps)._ + +## Supported requests +- **Send_SMS** using tyntec Conversation API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) + - To make a successful request, please, populate the followings fields: + - **apikey** - your tyntec API key + - **to** - receiver's phone number in _international_ form without leading 00 (_E.g. 4989202451100_) + - **from** - sender's phone number + - **contentType** - content type of your message, use **text** + - **channels key item** - used tyntec Conversation API channel, use **sms** + - **text** - text of your SMS +- **Status_Check** + - To make a successful status check, please, provide the connector with the following values + - **apikey** - your tyntec API key + - **id** - messageID of your message (_returned after each Send_SMS request_) + + +## How to get API key +Please [sign up for a free account](https://www.tyntec.com/create-account). In your account, select the [API settings](http://my.tyntec.com/api-settings) and copy your API key. + +## Deployment instructions +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as a custom connector in Microsoft Power Automate and Power Apps. diff --git a/certified-connectors/tyntec-SMS/apiDefinition.swagger.json b/certified-connectors/tyntec-SMS/apiDefinition.swagger.json new file mode 100644 index 000000000..c9d9d67c5 --- /dev/null +++ b/certified-connectors/tyntec-SMS/apiDefinition.swagger.json @@ -0,0 +1,184 @@ +{ + "swagger": "2.0", + "info": { + "title": "tyntec-SMS", + "description": "Send a custom SMS message using the tyntec conversation API. You can also use Status_check to check status (accepted/delivered/failed)", + "contact": { + "name": "tyntec support", + "url": "https://www.tyntec.com/get-help-support", + "email": "support@tyntec.com" + }, + "version": "1.0" + }, + "host": "api.tyntec.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/chat-api/v2/messages": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "messageId" + } + } + } + } + }, + "summary": "Send a custom SMS using tyntec Conversation API", + "description": "To send a custom SMS, you need to populate the body of your request. Set contentType to text, channels-key-item to sms, from holds the value of your phone number, to populate with receivers phone number, and text holds the text of your message.", + "operationId": "Send_SMS", + "parameters": [ + { + "name": "apikey", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "This field holds the value of your tyntec Conversation API key received from https://my.tyntec.com/api-settings.", + "x-ms-summary": "The API key for Conversation API" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "to": { + "type": "string", + "description": "Receiver's phone number", + "title": "to" + }, + "channels": { + "type": "array", + "items": { + "type": "string", + "title": "channels key item", + "description": "Connector channel (sms)", + "default": "sms" + }, + "description": "channels" + }, + "sms": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Your phone number", + "title": "from" + }, + "contentType": { + "type": "string", + "description": "contentType", + "title": "contentType", + "default": "text" + }, + "text": { + "type": "string", + "description": "Your SMS message text", + "title": "text" + } + }, + "description": "sms", + "required": [ + "from", + "text", + "contentType" + ] + } + }, + "required": [ + "channels", + "sms", + "to" + ] + } + } + ] + } + }, + "/api.tyntec.com/v2/messages/{id}/status": {}, + "/chat-api/v2/messages/{id}/status": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "messageId" + }, + "deliveryChannel": { + "type": "string", + "description": "deliveryChannel" + }, + "status": { + "type": "string", + "description": "status" + }, + "timestamp": { + "type": "string", + "description": "timestamp" + } + } + } + } + }, + "summary": "Status_Check", + "description": "Check for status of your Message for given MessageID. Returned response holds the status (delivered/accepted/failed) in the status field.", + "operationId": "Status_Check", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "To check the status of your message, you need to provide tyntec Conversation API with ID", + "x-ms-summary": "ID of your message", + "x-ms-url-encoding":"single" + }, + { + "name": "apikey", + "in": "header", + "required": true, + "type": "string", + "x-ms-summary": "Your tyntec API key", + "description": "Your tyntec Conversation API key received from https://my.tyntec.com/api-settings." + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.tyntec.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.tyntec.com/data-privacy-statement" + }, + { + "propertyName": "Categories", + "propertyValue": "Communication;Marketing" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/tyntec-SMS/apiProperties.json b/certified-connectors/tyntec-SMS/apiProperties.json new file mode 100644 index 000000000..4972b42d6 --- /dev/null +++ b/certified-connectors/tyntec-SMS/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#F99831", + "capabilities": [], + "publisher": "tyntec GmbH", + "stackOwner": "tyntec GmbH" + } +} \ No newline at end of file From 415f1176e714084fdc795aeed89bf85f2cce8353 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Mon, 31 Aug 2020 22:38:48 +0200 Subject: [PATCH 041/347] Tyntec wa (#418) * added tyntec-WA * remove intro * add icon.png * replaced icon.png * Delete icon.png * Add icon.png * Delete icon.png * Add Icon.png * Delete Icon.png * Fix: Brand color --- certified-connectors/tyntec-WA/README.md | 46 ++++ .../tyntec-WA/apiDefinition.swagger.json | 251 ++++++++++++++++++ .../tyntec-WA/apiProperties.json | 9 + 3 files changed, 306 insertions(+) create mode 100644 certified-connectors/tyntec-WA/README.md create mode 100644 certified-connectors/tyntec-WA/apiDefinition.swagger.json create mode 100644 certified-connectors/tyntec-WA/apiProperties.json diff --git a/certified-connectors/tyntec-WA/README.md b/certified-connectors/tyntec-WA/README.md new file mode 100644 index 000000000..e1a10aefe --- /dev/null +++ b/certified-connectors/tyntec-WA/README.md @@ -0,0 +1,46 @@ +## Tyntec Conversation API - Send template WhatsApp message + +Tyntec Conversation API allows you to send template WhatsApp messages. + +### User Cases of this connector +- Use this connector in PowerApps Workflows (great for Marketing, CRM or Sales) +- Send SMS messages using Azure Logic Apps +- Build SMS support in your Microsoft Power Automate automatizations + +And many more! + + +## Pre-requisites +You will need the following to proceed: +- A Microsoft Power Apps or Power Automate plan with custom connector feature +- [tyntec API Key](http://my.tyntec.com/api-settings) +- [WhatsApp Business account number](https://www.tyntec.com/docs/whatsapp-business-api-account-information-get-started#toc--whatsapp-business-account-) provide by tyntec +- [WhatsApp Message Template](https://www.tyntec.com/docs/whatsapp-business-api-account-information-get-started#toc-message-templates) approved by WhatsApp + + +## Supported requests +- **Send_WhatsApp** using tyntec Conversation API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) + - To make a successful request, please, populate the followings fields: + - **apikey** - your tyntec API key + - **to** - receiver's phone number in _international_ form without leading 00 (_E.g. 4989202451100_) + - **from** - your WhatsApp Business account number number + - **templateId** - the name of your approved template + - **contentType** - content type of your message, use **body** + - **language-policy** - language policy of your template + - **language-code** - language code of your template + - **channels key item** - used tyntec Conversation API channel, use **whatsapp** + - **parameter-type** - use **text** + - **parameter-text** - input your parameter + - _if your template uses more parameters, repeat **parameter-type** and **parameter-text** for each parameter your template requires_ + +- **Status_Check** + - To make a successful status check, please, provide the connector with the following values + - **apikey** - your tyntec API key + - **id** - messageID of your message (_returned after each request_) + + +## How to get API key +Please [sign up for a free account](https://www.tyntec.com/create-account). In your account, select the [API settings](http://my.tyntec.com/api-settings) and copy your API key. + +## Deployment instructions +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as a custom connector in Microsoft Power Automate and Power Apps. diff --git a/certified-connectors/tyntec-WA/apiDefinition.swagger.json b/certified-connectors/tyntec-WA/apiDefinition.swagger.json new file mode 100644 index 000000000..5220b65c7 --- /dev/null +++ b/certified-connectors/tyntec-WA/apiDefinition.swagger.json @@ -0,0 +1,251 @@ +{ + "swagger": "2.0", + "info": { + "title": "tyntec-wa", + "description": "Send a WhatsApp template message using the tyntec conversation API. You can also use Status_check to check status (accepted/delivered/failed)", + "contact": { + "name": "tyntec support", + "url": "https://www.tyntec.com/get-help-support", + "email": "support@tyntec.com" + }, + "version": "1.0" + }, + "host": "api.tyntec.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/chat-api/v2/messages/": {}, + "/chat-api/v2/messages/{id}/status": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "messageId" + }, + "deliveryChannel": { + "type": "string", + "description": "deliveryChannel" + }, + "status": { + "type": "string", + "description": "status" + }, + "timestamp": { + "type": "string", + "description": "timestamp" + } + } + } + } + }, + "summary": "Status_Check", + "description": "Check for status of your Message on given MessageID. Returned response holds the status (delivered/accepted/failed) in the status field.", + "operationId": "Status_Check", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "To check status of your message, you need to provide tyntec Conversation API with ID", + "x-ms-summary": "ID of your message" + }, + { + "name": "apikey", + "in": "header", + "required": true, + "type": "string", + "description": "Your tyntec Conversation API key received from https://my.tyntec.com/api-settings.", + "x-ms-summary": "Your tyntec API key" + } + ] + } + }, + "/api.tyntec.com/chat-api/v2/messages": {}, + "/chat-api/v2/messages": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "messageId" + } + } + } + } + }, + "summary": "Send WhatsApp Template message", + "description": "Send WhatsApp Template message", + "operationId": "Send_WhatsApp", + "parameters": [ + { + "name": "apikey", + "in": "header", + "required": true, + "type": "string", + "description": "Your tyntec Conversation API key received from https://my.tyntec.com/api-settings.", + "x-ms-summary": "Your tyntec API key" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "to": { + "type": "string", + "description": "Receiver's phone number", + "title": "to" + }, + "channels": { + "type": "array", + "items": { + "type": "string", + "description": "tyntec Conversation API channel", + "title": "Channel", + "default": "whatsapp" + }, + "description": "channels" + }, + "whatsapp": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Your WhatsApp Business Account Number", + "title": "from" + }, + "template": { + "type": "object", + "properties": { + "templateId": { + "type": "string", + "description": "Your template id", + "title": "templateId" + }, + "language": { + "type": "object", + "properties": { + "policy": { + "type": "string", + "description": "policy (use deterministic)", + "title": "language-policy", + "default": "deterministic" + }, + "code": { + "type": "string", + "description": "code", + "title": "language-code", + "default": "en" + } + }, + "description": "language", + "required": [ + "code", + "policy" + ] + }, + "components": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "type (use body)", + "title": "type", + "default": "body" + }, + "parameters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "type" + }, + "text": { + "type": "string", + "description": "text" + } + } + }, + "description": "parameters" + } + }, + "required": [ + "type" + ] + }, + "description": "components" + } + }, + "description": "template", + "required": [ + "components", + "language", + "templateId" + ] + }, + "contentType": { + "type": "string", + "description": "contentType (use template)", + "title": "contentType", + "default": "template" + } + }, + "description": "whatsapp", + "required": [ + "contentType", + "from", + "template" + ] + } + }, + "required": [ + "to", + "channels", + "whatsapp" + ] + } + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.tyntec.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.tyntec.com/data-privacy-statement" + }, + { + "propertyName": "Categories", + "propertyValue": "Communication;Commerce" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/tyntec-WA/apiProperties.json b/certified-connectors/tyntec-WA/apiProperties.json new file mode 100644 index 000000000..4972b42d6 --- /dev/null +++ b/certified-connectors/tyntec-WA/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#F99831", + "capabilities": [], + "publisher": "tyntec GmbH", + "stackOwner": "tyntec GmbH" + } +} \ No newline at end of file From c4919dc76db7d3a1d51730568c60dbca2ff20ef5 Mon Sep 17 00:00:00 2001 From: amancdk <35783172+amancdk@users.noreply.github.com> Date: Tue, 1 Sep 2020 02:31:34 +0530 Subject: [PATCH 042/347] Initial commit for CDK Customer API connector (#422) * Initial commit for CDK Customer API connector * Initial commit for CDK Customer API connector * Reducing the length of the description --- .../CDK Drive Customers/Readme.md | 31 + .../apiDefinition.swagger.json | 1042 +++++++++++++++++ .../CDK Drive Customers/apiProperties.json | 9 + 3 files changed, 1082 insertions(+) create mode 100644 certified-connectors/CDK Drive Customers/Readme.md create mode 100644 certified-connectors/CDK Drive Customers/apiDefinition.swagger.json create mode 100644 certified-connectors/CDK Drive Customers/apiProperties.json diff --git a/certified-connectors/CDK Drive Customers/Readme.md b/certified-connectors/CDK Drive Customers/Readme.md new file mode 100644 index 000000000..bee6237ba --- /dev/null +++ b/certified-connectors/CDK Drive Customers/Readme.md @@ -0,0 +1,31 @@ +# CDKDrive CRM Customers + +CDK Drive - CRM - Customers +A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a Customer Relationship Management system. + +What does this API do? +The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record. + +Intended Audience +The customer is required in the Sales Deal or Service Appointment creation workflows as they are customer centric. Customer services helps vehicle salesmen or service advisors provide a positive customer experience by allowing those workflows to be tied to a customer identity. + +## Pre-requisites + +You will need the following to proceed + +• To use the connector, you need to be a Fortellis user. + +• You need to create an solution in Fortellis to generate client id and secret to be used while calling the APIs + +### Potential Use Cases + +Use the CDKDrive CRM Customers API to create solutions to handle situations such as: + +1. Create or update customer information +2. Link a customer to a service vehicle +3. Search for existing customers by ID or filter criteria + +#### Detailed Documentation can be found at + + +https://apidocs.fortellis.io/specs/0d488dd1-c609-4618-9061-68be8b61c2a9 \ No newline at end of file diff --git a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json new file mode 100644 index 000000000..a03e28eeb --- /dev/null +++ b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json @@ -0,0 +1,1042 @@ +{ + "swagger": "2.0", + "info": { + "title": "CDK Drive Customer", + "version": "1.0", + "description": "CDK Drive - CRM - Customers - A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a CRM system. The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record.This helps service advisors provide a positive experience by allowing those workflows to be tied to a customer.", + "contact": { + "name": "CDK Global", + "url": "https://serviceconnect.support.cdk.com", + "email": "mbd_support@cdk.com" + } + }, + "host": "cdkapi.azure-api.net", + "basePath": "/customer", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/": { + "get": { + "description": "Query customers", + "operationId": "queryCustomers", + "summary": "Query customers", + "tags": [ + "query" + ], + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Filters customers by name", + "type": "string", + "x-ms-summary": "Name" + }, + { + "name": "email", + "in": "query", + "description": "Filters customers by email address", + "type": "string", + "x-ms-summary": "Email" + }, + { + "name": "phone", + "in": "query", + "description": "Filters customers by phone number", + "type": "string", + "x-ms-summary": "Phone" + }, + { + "name": "subscription_id", + "in": "query", + "required": true, + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "required": true, + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "required": true, + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/CustomerCollection" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "post": { + "description": "Create a customer", + "operationId": "createCustomer", + "summary": "Create a customer", + "tags": [ + "create" + ], + "parameters": [ + { + "name": "client_id", + "in": "query", + "required": true, + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "required": true, + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "subscription_id", + "in": "query", + "required": true, + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + }, + { + "name": "createCustomer", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateCustomer" + }, + "description": "The customer definition" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "201": { + "description": "Created", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Customer" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/{customerId}/": { + "get": { + "description": "Query a customer", + "operationId": "queryCustomerById", + "summary": "Query a customer", + "tags": [ + "query" + ], + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "The customer identifier", + "required": true, + "type": "string", + "x-ms-summary": "Customer Id" + }, + { + "name": "subscription_id", + "in": "query", + "required": true, + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "required": true, + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "required": true, + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Customer" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "404 - Not Found", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "post": { + "description": "Update a customer", + "operationId": "updateCustomer", + "summary": "Update a customer", + "tags": [ + "update" + ], + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "The customer identifier", + "required": true, + "type": "string", + "x-ms-summary": "Customer Id" + }, + { + "name": "subscription_id", + "in": "query", + "required": true, + "description": "A correlation ID that should be returned back to the caller to indicate the return of the given request.", + "type": "string", + "x-ms-summary": "Subscription Id" + }, + { + "name": "client_id", + "in": "query", + "required": true, + "description": "A client ID that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Id" + }, + { + "name": "client_secret", + "in": "query", + "required": true, + "description": "A client secret that should be unique to developer/solution provider building the solution.", + "type": "string", + "x-ms-summary": "Client Secret" + }, + { + "name": "Request-Id", + "in": "header", + "description": "Format - guid. A correlation ID that should be returned back to the caller to indicate the return of the given request", + "type": "string", + "x-ms-summary": "Request Id" + }, + { + "name": "If-Match", + "in": "header", + "description": "Makes the resource update request conditional. The checksum value \npresented with If-Match must match the current ETag value of the \nresource.\n", + "required": true, + "type": "string", + "x-ms-summary": "eTag" + }, + { + "name": "createCustomer", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateCustomer" + }, + "description": "The customer definition" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Request-Id": { + "type": "string" + }, + "ETag": { + "type": "string", + "description": "The computed checksum of the resource" + } + }, + "schema": { + "$ref": "#/definitions/Customer" + } + }, + "400": { + "description": "400 - Bad Request", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "401 - Unauthorized", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "403 - Forbidden", + "headers": { + "Request-Id": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://fortellis.io" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://fortellis.io/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Data" + } + ], + "definitions": { + "Customer": { + "type": "object", + "properties": { + "customerId": { + "type": "string", + "description": "The idenifier of the customer record" + }, + "name": { + "$ref": "#/definitions/Name", + "description": "The name of the customer" + }, + "contactMethods": { + "$ref": "#/definitions/ContactMethods", + "description": "The contact methods for the customer." + }, + "postalAddress": { + "$ref": "#/definitions/PostalAddress", + "description": "The customer postal address" + }, + "preferredContact": { + "type": "string", + "enum": [ + "ANY", + "WORKFAX", + "PRIMARYEMAIL", + "HOMEFAX", + "MAIL", + "PAGER", + "PRIMARYPHONE", + "DONOTCONTACT" + ], + "description": "The preferred contact method" + }, + "links": { + "$ref": "#/definitions/CustomerLinks", + "description": "The hypermedia links of the customer resource" + } + }, + "required": [ + "customerId", + "name", + "contactMethods", + "postalAddress" + ], + "example": { + "customerId": "ABCDEFGH012345678", + "name": { + "first": "John", + "last": "Doe" + }, + "contactMethods": { + "primaryPhone": "18475555555", + "homePhone": "18473971700", + "mobilePhone": "18475555555", + "pager": "18475555556", + "pagerAccessCode": "1234", + "homeFax": "18475555666", + "workFax": "18475555777", + "email1": "john.doe@example.com", + "emailDesc1": "HOME", + "email2": "johndoe@example.com", + "emailDesc2": "WORK", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + }, + "postalAddress": { + "street": "110 The example road", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + }, + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/crm/v1/customers/ABCDEFGH012345678" + } + } + } + }, + "ContactMethods": { + "type": "object", + "properties": { + "primaryPhone": { + "type": "string", + "description": "The primary phone number of the customer" + }, + "homePhone": { + "type": "string", + "description": "The home phone number of the customer" + }, + "mobilePhone": { + "type": "string", + "description": "The mobile phone number of the customer" + }, + "pager": { + "type": "string", + "description": "The pager number of the customer" + }, + "pagerAccessCode": { + "type": "string", + "description": "The pager access code of the customer" + }, + "homeFax": { + "type": "string", + "description": "The home fax number of the customer" + }, + "workFax": { + "type": "string", + "description": "The work fax number of the customer" + }, + "email1": { + "type": "string", + "description": "Email address 1 of the customer. You can enter NA for Non-Applicable or CD for Customer Declined if no other email address is present" + }, + "emailDesc1": { + "type": "string", + "default": "HOME", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 1 description. Will contain NA or CD if entered on email1." + }, + "email2": { + "type": "string", + "description": "Email address 2 of the customer" + }, + "emailDesc2": { + "type": "string", + "default": "WORK", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 2 description" + }, + "email3": { + "type": "string", + "description": "Email address 3 of the customer" + }, + "emailDesc3": { + "type": "string", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 3 description" + }, + "email4": { + "type": "string", + "description": "Email address 4 of the customer" + }, + "emailDesc4": { + "type": "string", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 4 description" + }, + "email5": { + "type": "string", + "description": "Email address 5 of the customer" + }, + "emailDesc5": { + "type": "string", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 5 description" + }, + "email6": { + "type": "string", + "description": "Email address 6 of the customer" + }, + "emailDesc6": { + "type": "string", + "enum": [ + "HOME", + "WORK", + "OTHER" + ], + "description": "Email address 6 description" + }, + "preferredMethod": { + "type": "string", + "enum": [ + "PRIMARYPHONE", + "PAGER", + "HOMEFAX", + "WORKFAX", + "PRIMARYEMAIL" + ], + "description": "The preferred method of contact for the customer" + }, + "blockPhoneFlag": { + "type": "boolean", + "description": "Indicates whether or not to phone telephone advertising" + }, + "blockEmailFlag": { + "type": "boolean", + "description": "Indicates whether or not to block e-mail advertising" + }, + "blockMailFlag": { + "type": "boolean", + "description": "Indicates whether or not to block mail advertising" + } + }, + "example": { + "primaryPhone": "18475555555", + "homePhone": "18473971700", + "mobilePhone": "18475555555", + "pager": "18475555556", + "pagerAccessCode": "1234", + "homeFax": "18475555666", + "workFax": "18475555777", + "email1": "john.doe@example.com", + "emailDesc1": "HOME", + "email2": "johndoe@example.com", + "emailDesc2": "WORK", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + } + }, + "PostalAddress": { + "type": "object", + "properties": { + "street": { + "type": "string", + "description": "Can be street, avenue, road, etc. This element also includes the house number and room/apartment/flat/floor number." + }, + "city": { + "type": "string", + "description": "Can be city, village, town, borough, etc. This is the postal town and not necessarily the place of residence or place of business." + }, + "county": { + "type": "string", + "description": "Handles administrative districts such as U.S. or U.K. counties that are not used for mail addressing purposes. Subregion is not intended for delivery addresses." + }, + "state": { + "type": "string", + "description": "A state, province, county (in Ireland), Land (in Germany), departement (in France), etc." + }, + "postalCode": { + "type": "string", + "description": "Postal code. Usually country-wide, but sometimes specific to the city (e.g. '2' in 'Dublin 2, Ireland' addresses)." + }, + "country": { + "type": "string", + "description": "The ISO country code of the country" + } + }, + "example": { + "street": "110 The example road", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + } + }, + "CustomerLinks": { + "type": "object", + "properties": { + "self": { + "$ref": "#/definitions/LinkDescriptionObject", + "description": "The cannonical link to the customer resource" + } + }, + "required": [ + "self" + ], + "example": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/crm/v1/customers/ABCDEFGH012345678" + } + } + }, + "CustomerCollection": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/Customer" + } + } + }, + "example": { + "items": [ + { + "customerId": "ABCDEFGH012345678", + "name": { + "first": "John", + "last": "Doe" + }, + "contactMethods": { + "primaryPhone": "18475555555", + "homePhone": "18473971700", + "mobilePhone": "18475555555", + "pager": "18475555556", + "pagerAccessCode": "1234", + "homeFax": "18475555666", + "workFax": "18475555777", + "email1": "john.doe@example.com", + "emailDesc1": "HOME", + "email2": "johndoe@example.com", + "emailDesc2": "WORK", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + }, + "postalAddress": { + "street": "110 The example road", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + }, + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/crm/v1/customers/ABCDEFGH012345678" + } + } + }, + { + "customerId": "RSTUVWXYZ98765432", + "name": null, + "companyName": "ABC Corp", + "contactMethods": { + "primaryPhone": "1-222-333-4444", + "pager": "1-222-333-6666", + "pagerAccessCode": "1234", + "homeFax": "1-222-333-7777", + "workFax": "1-222-333-8888", + "email1": "contactus@abccorp.com", + "email2": "support@abccorp.com", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + }, + "postalAddress": { + "street": "123 Shady Lane", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + }, + "links": { + "self": { + "href": "https://api.fortellis.io/cdkdrive/crm/v1/customers/RSTUVWXYZ98765432" + } + } + } + ] + } + }, + "CreateCustomer": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/CreateUpdateName", + "description": "The primary name associated with the customer." + }, + "contactMethods": { + "$ref": "#/definitions/ContactMethods", + "description": "The contact methods for the customer." + }, + "postalAddress": { + "$ref": "#/definitions/PostalAddress", + "minItems": 1, + "description": "The customer postal address" + } + }, + "required": [ + "name", + "contactMethods", + "postalAddress" + ], + "example": { + "name": { + "first": "John", + "last": "Doe" + }, + "contactMethods": { + "primaryPhone": "18475555555", + "homePhone": "18473971700", + "mobilePhone": "18475555555", + "pager": "18475555556", + "pagerAccessCode": "1234", + "homeFax": "18475555666", + "workFax": "18475555777", + "email1": "john.doe@example.com", + "emailDesc1": "HOME", + "email2": "johndoe@example.com", + "emailDesc2": "WORK", + "preferredMethod": "PRIMARYEMAIL", + "blockPhoneFlag": true, + "blockEmailFlag": true, + "blockMailFlag": true + }, + "postalAddress": { + "street": "110 The example road", + "city": "This City", + "county": "Outside The City", + "state": "IL", + "postalCode": "12234", + "country": "US" + } + } + }, + "Name": { + "type": "object", + "properties": { + "first": { + "type": "string", + "description": "The first name of the customer" + }, + "middle": { + "type": "string", + "description": "The middle name of the customer" + }, + "last": { + "type": "string", + "description": "The last name of the customer" + }, + "prefix": { + "type": "string", + "description": "The prefix of the customer" + }, + "suffix": { + "type": "string", + "description": "The suffix of the customer" + }, + "companyName": { + "type": "string", + "description": "If the customer represents a company, then company name will be considered" + } + }, + "required": [ + "first", + "last" + ], + "example": { + "first": "John", + "last": "Doe", + "companyName": "ABC Corp" + } + }, + "CreateUpdateName": { + "type": "object", + "properties": { + "first": { + "type": "string", + "description": "The first name of the customer" + }, + "middle": { + "type": "string", + "description": "The middle name of the customer" + }, + "last": { + "type": "string", + "description": "The last name of the customer" + }, + "prefix": { + "type": "string", + "description": "The prefix of the customer" + }, + "suffix": { + "type": "string", + "description": "The suffix of the customer" + } + }, + "required": [ + "first", + "last" + ], + "example": { + "first": "John", + "last": "Doe" + } + }, + "LinkDescriptionObject": { + "title": "Details of a link to a resource", + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "The target URI" + }, + "method": { + "type": "string", + "description": "The HTTP verb that MUST be used to make a request to the target of the link" + }, + "title": { + "type": "string", + "description": "The title property provides a title for the link and is a helpful documentation tool to facilitate understanding by end clients" + } + }, + "required": [ + "href" + ] + }, + "ErrorResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "example": { + "code": 400, + "message": "Bad Request" + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [ + { + "apiKeyHeader": [] + }, + { + "apiKeyQuery": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/CDK Drive Customers/apiProperties.json b/certified-connectors/CDK Drive Customers/apiProperties.json new file mode 100644 index 000000000..b65b3e9b2 --- /dev/null +++ b/certified-connectors/CDK Drive Customers/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#83bd41", + "capabilities": [], + "publisher": "CDK Global", + "stackOwner": "CDK Global" + } +} \ No newline at end of file From b2e00dcd1877a1db0e112b9d197884e94e7f0207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Vr=C3=A5lstad?= Date: Mon, 31 Aug 2020 23:18:26 +0200 Subject: [PATCH 043/347] Peltarion (#419) * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * Initial commit * Updated description * Update apiDefinition.swagger.json Co-authored-by: Marc Co-authored-by: Marc Hochleutner --- certified-connectors/Peltarion/README.md | 39 ++++++ .../Peltarion/apiDefinition.swagger.json | 111 ++++++++++++++++++ .../Peltarion/apiProperties.json | 24 ++++ certified-connectors/Peltarion/screenshot.png | Bin 0 -> 176404 bytes .../timeghost/apiProperties.json | 4 +- 5 files changed, 176 insertions(+), 2 deletions(-) create mode 100644 certified-connectors/Peltarion/README.md create mode 100644 certified-connectors/Peltarion/apiDefinition.swagger.json create mode 100644 certified-connectors/Peltarion/apiProperties.json create mode 100644 certified-connectors/Peltarion/screenshot.png diff --git a/certified-connectors/Peltarion/README.md b/certified-connectors/Peltarion/README.md new file mode 100644 index 000000000..9fc96a150 --- /dev/null +++ b/certified-connectors/Peltarion/README.md @@ -0,0 +1,39 @@ +# Peltarion Connector +Add artificial intelligence to your apps! With Peltarion’s plugin, it has never been easier to create smart applications. + +With this Peltarion integration, you can build and deploy AI models, and through the API connect to your Bubble app. + +Some cool things that you can do, amongst others. Use the Peltarion plugin to build an app that: + +- Can tell the difference between music genres and classify them accordingly ([link](https://bit.ly/34K98Sm)) +- Understands the semantic meaning of words and use it to classify movie reviews or customer support messages ([link](https://bit.ly/3jrkZsP)) +- Label images as per the clothing category they belong to (say in an e-commerce catalog) ([link](https://bit.ly/3lqyiLD)) +- Predict the value and price of houses you’re looking to buy ([link](https://bit.ly/3b6CTht)) + +## Getting started + +1. Sign up for free on the Peltarion Platform ([link](https://bit.ly/3llPmTf)) +1. Build and train your AI model on the Peltarion platform +1. Add the Peltarion plugin to your Bubble app +1. Connect the Peltarion action to your workflow + +The connector only support one operation, called *callapi*. To use the connector and store the value into a variable *res*, you can call the API like this: + +``` +ClearCollect(dd, { : TextInput1.Text}); +Set(jdata,JSON(dd,JSONFormat.IncludeBinaryData)); +Set(res, PeltarionConnectorTest.callapi("https://a.gcp-eu-west-1.platform.peltarion.com/deployment//forward","",jdata)) +``` + +The *res* is an object with three values: + +- *key* is the name of the predicted class. For regression problems, the *key* is always "value" +- *val* is the probability of the class +- *errorMessage* holds the error message, if any + +Your URL, token and input name is found on the Deployment view on the Peltarion Platform. See screenshot below. +![URL, token and input](screenshot.png) + + + +For information on how to build and train an AI model on the Peltarion platform, visit our knowledge center (link: https://bit.ly/3gC6XCN) \ No newline at end of file diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json new file mode 100644 index 000000000..92efa83ab --- /dev/null +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -0,0 +1,111 @@ +{ + "swagger": "2.0", + "info": { + "title": "Peltarion", + "description": "Using this connector, you can connect your your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data.", + "version": "1.0", + "contact": { + "name": "Peltarion", + "url": "https://peltarion.com/", + "email": "contact@peltarion.com" + } + }, + "host": "peltarionforwardtest.azurewebsites.net", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/api/forwardcall": { + "post": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "key" + }, + "val": { + "type": "string", + "description": "val" + }, + "errorMessage": { + "type": "string", + "description": "errorMessage" + } + } + } + } + }, + "summary": "Call Peltarion API", + "description": "This function calls your model deployed on the Peltarion Platform.", + "operationId": "callapi", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "code", + "in": "query", + "required": true, + "type": "string", + "default": "FHWJvOJnrrBz8v7DOWoABLS1K2e9Im6q7YalAthQMGkqTa57jDYm/w==", + "x-ms-visibility": "internal", + "description": "Authentication for the API proxy", + "x-ms-summary": "This is a key required by the API proxy" + }, + { + "name": "peltarionurl", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Peltarion URL", + "x-ms-summary": "URL to identify your Peltarion API" + }, + { + "name": "peltariontoken", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Peltarion token", + "x-ms-summary": "Token to identify your Peltarion API" + }, + { + "name": "peltarionbody", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Peltarion body", + "x-ms-summary": "Call body in JSON format." + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://peltarion.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://peltarion.com/privacy-policies" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Data" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [], + "tags": [] +} diff --git a/certified-connectors/Peltarion/apiProperties.json b/certified-connectors/Peltarion/apiProperties.json new file mode 100644 index 000000000..6b23fb129 --- /dev/null +++ b/certified-connectors/Peltarion/apiProperties.json @@ -0,0 +1,24 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#061b22", + "capabilities": [], + "publisher": "Peltarion", + "stackOwner": "Peltarion", + "policyTemplateInstances": [ + { + "templateId": "setheader", + "title": "Content-type header", + "parameters": { + "x-ms-apimTemplateParameter.name": "content-type", + "x-ms-apimTemplateParameter.value": "application/json", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplate-policySection": "Request", + "x-ms-apimTemplate-operationName": [ + "callapi" + ] + } + } + ] + } +} \ No newline at end of file diff --git a/certified-connectors/Peltarion/screenshot.png b/certified-connectors/Peltarion/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2e35b1a7f34a047fcfd38160602042b5abcd5d GIT binary patch literal 176404 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

n+A0MdKmiII8>uBp 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 literal 0 HcmV?d00001 diff --git a/certified-connectors/timeghost/apiProperties.json b/certified-connectors/timeghost/apiProperties.json index 29baa0ee4..112ed35e5 100644 --- a/certified-connectors/timeghost/apiProperties.json +++ b/certified-connectors/timeghost/apiProperties.json @@ -84,7 +84,7 @@ } } ], - "publisher": "Koellisch Gesellschaft für Prozessmanagement mbH", - "stackOwner": "Koellisch Gesellschaft für Prozessmanagement mbH" + "publisher": "Koellisch Gesellschaft fuer Prozessmanagement mbH", + "stackOwner": "Koellisch Gesellschaft fuer Prozessmanagement mbH" } } From 9216c345e205acc9daddf5777cec4db94685cbaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Vr=C3=A5lstad?= Date: Tue, 1 Sep 2020 21:41:04 +0200 Subject: [PATCH 044/347] Update README.md (#428) --- certified-connectors/Peltarion/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/Peltarion/README.md b/certified-connectors/Peltarion/README.md index 9fc96a150..62a040e10 100644 --- a/certified-connectors/Peltarion/README.md +++ b/certified-connectors/Peltarion/README.md @@ -1,7 +1,7 @@ # Peltarion Connector Add artificial intelligence to your apps! With Peltarion’s plugin, it has never been easier to create smart applications. -With this Peltarion integration, you can build and deploy AI models, and through the API connect to your Bubble app. +With this Peltarion integration, you can build and deploy AI models, and through the API connect to your app. Some cool things that you can do, amongst others. Use the Peltarion plugin to build an app that: @@ -36,4 +36,4 @@ Your URL, token and input name is found on the Deployment view on the Peltarion -For information on how to build and train an AI model on the Peltarion platform, visit our knowledge center (link: https://bit.ly/3gC6XCN) \ No newline at end of file +For information on how to build and train an AI model on the Peltarion platform, visit our knowledge center (link: https://bit.ly/3gC6XCN) From 20a132f3473c8ede2a2246ec38c709260c9ed286 Mon Sep 17 00:00:00 2001 From: Matt Beard Date: Tue, 1 Sep 2020 23:42:24 +0100 Subject: [PATCH 045/347] Updated Data8 connector (#426) --- .../Data8/apiDefinition.swagger.json | 1817 +++++++++++------ certified-connectors/Data8/apiProperties.json | 22 +- certified-connectors/Data8/readme.md | 23 + 3 files changed, 1189 insertions(+), 673 deletions(-) create mode 100644 certified-connectors/Data8/readme.md diff --git a/certified-connectors/Data8/apiDefinition.swagger.json b/certified-connectors/Data8/apiDefinition.swagger.json index 21ff004a6..5b4992d7b 100644 --- a/certified-connectors/Data8/apiDefinition.swagger.json +++ b/certified-connectors/Data8/apiDefinition.swagger.json @@ -1,756 +1,1249 @@ { - "basePath": "/", - "consumes": [], - "definitions": {}, - "host": "webservices.data-8.co.uk", + "swagger": "2.0", "info": { - "description": "Data8 helps you build confidence in your data. We can save you money by cleaning and enriching both your existing data, as well as ensuring only the highest quality data goes in at the point of entry, leaving you to concentrate on targeting and communicating to the right customers.\n\nFor more information about Data8 and how to get started, please visit https://www.data-8.co.uk/flow.", + "version": "1.0.0", "title": "Data8 Data Enrichment", - "version": "1.0.0" + "description": "Data8 helps you build confidence in your data. We can save you money by cleaning and enriching both your existing data, as well as ensuring only the highest quality data goes in at the point of entry, leaving you to concentrate on targeting and communicating to the right customers.", + "contact": { + "name" : "Technical Helpdesk", + "url" : "https://www.data-8.co.uk", + "email" : "helpdesk@data-8.co.uk" + } }, - "parameters": {}, + "host": "webservices.data-8.co.uk", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], "paths": { - "/BankAccountValidation/IsValid.json": { - "post": { - "description": "Check if a sort code and bank account number are valid.", - "operationId": "IsValidBankAccount", - "parameters": [ - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "properties": { - "bankAccountNumber": { - "description": "The bank account number you wish to validate", - "title": "Bank Account Number", - "type": "string" - }, - "sortCode": { - "description": "The sort code you wish to validate", - "title": "Sort Code", - "type": "string" - } - }, - "required": [ - "sortCode" - ], - "type": "object" - } - } - ], - "responses": { - "200": { - "description": "default", - "schema": { - "properties": { - "AcceptsBACSPayments": { - "description": "Indicates if the bank branch can accept payments made through the BACS system.", - "title": "Accepts BACS Payments", - "type": "boolean" - }, - "AcceptsBuildingSocietyCreditTransactions": { - "description": "Indicates if the bank branch can accept credits from building societies.", - "title": "Accepts Building Society Credit Transactions", - "type": "boolean" - }, - "AcceptsCHAPSPayments": { - "description": "Indicates if the bank branch can accept payments made through the CHAPS system.", - "title": "Accepts CHAPS Payments", - "type": "boolean" - }, - "AcceptsCheques": { - "description": "Indicates if the bank branch can accept payments made by cheque.", - "title": "Accepts Cheques", - "type": "boolean" - }, - "AcceptsDirectCreditTransactions": { - "description": "Indicates if the bank branch can accept direct credit payments.", - "title": "Accepts Direct Credit Transactions", - "type": "boolean" - }, - "AcceptsDirectDebitInstructionTransactions": { - "description": "Indicates if the bank branch can accept direct debit instructions.", - "title": "Accepts Direct Debit Instruction Transactions", - "type": "boolean" - }, - "AcceptsDirectDebitTransactions": { - "description": "Indicates if the bank branch can accept direct debit payments.", - "title": "Accepts Direct Debit Transactions", - "type": "boolean" - }, - "AcceptsDividendInterestPaymentTransactions": { - "description": "Indicates if the bank branch can accept dividend interest payments.", - "title": "Accepts Dividend Interest Payment Transactions", - "type": "boolean" - }, - "AcceptsFasterPayments": { - "description": "Indicates if the bank branch can accept payments made through the Faster Payments system.", - "title": "Accepts Faster Payments", - "type": "boolean" - }, - "AcceptsUnpaidChequeClaimTransactions": { - "description": "Indicates if the bank branch can accept claims for unpaid cheques.", - "title": "Accepts Unpaid Cheque Claim Transactions", - "type": "boolean" - }, - "AccountNumber": { - "description": "The account number that has been validated.", - "title": "Account Number", - "type": "string" - }, - "Address": { - "description": "Address", - "properties": { - "Address": { - "description": "The address of the bank branch indicated by the sort code.", - "properties": { - "Lines": { - "description": "Lines", - "items": { - "title": "Address Lines", - "type": "string" - }, - "type": "array" - } - }, - "title": "Address", - "type": "object" - } - }, - "type": "object" - }, - "BICCode": { - "description": "The BIC code of the bank branch indicated by the sort code.", - "title": "BIC Code", - "type": "string" - }, - "BranchName": { - "description": "The name of the bank branch indicated by the sort code.", - "title": "Branch Name", - "type": "string" - }, - "FullBankName": { - "description": "The full name for the bank indicated by the sort code.", - "title": "Full Bank Name", - "type": "string" - }, - "IBAN": { - "description": "The IBAN code of the bank account indicated by the sort code and account number.", - "title": "IBAN", - "type": "string" - }, - "ShortBankName": { - "description": "A short name for the bank indicated by the sort code.", - "title": "Short Bank Name", - "type": "string" - }, - "SortCode": { - "description": "The sort code that has been validated.", - "title": "Sort Code", - "type": "string" - }, - "Status": { - "description": "Status", - "properties": { - "CreditsRemaining": { - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "type": "integer" - }, - "ErrorMessage": { - "description": "Returned Error Message, if any", - "title": "Error Message", - "type": "string" - }, - "Success": { - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "type": "boolean" - } - }, - "type": "object" - }, - "Valid": { - "description": "Indicates if the incoming sort code and bank account number could be validated.", - "title": "Valid", - "type": "string" - } - }, - "type": "object" - } - } - }, - "summary": "Validate Bank Account Information" - } - }, - "/CTPS/IsCallable.json": { - "post": { - "description": "Checks if a telephone number is registered on the CTPS or not.", - "operationId": "IsCallableCTPS", - "parameters": [ - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "properties": { - "number": { - "description": "The telephone number you wish to CTPS check", - "title": "Telephone Number", - "type": "string" - } - }, - "required": [ - "number" - ], - "type": "object" - } - } - ], - "responses": { - "200": { - "description": "default", - "schema": { - "properties": { - "Callable": { - "description": "Returns a boolean value letting you know if it's callable. If false, the number is currently on the CTPS.", - "title": "Is Callable", - "type": "boolean" - }, - "Status": { - "description": "Status", - "properties": { - "CreditsRemaining": { - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "type": "integer" - }, - "ErrorMessage": { - "description": "Returned Error Message, if any", - "title": "Error Message", - "type": "string" - }, - "Success": { - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "type": "boolean" - } - }, - "type": "object" - }, - "TelephoneNumber": { - "description": "If populated, the telephone number is callable and null if not", - "title": "Telephone Number", - "type": "string" - } - }, - "type": "object" - } - } - }, - "summary": "CTPS Check" - } - }, - "/EmailValidation/IsValid.json": { - "post": { - "description": "Checks to see if an inputted email address is valid to receive email", - "operationId": "IsValidEmail", - "parameters": [ - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "properties": { - "email": { - "description": "The email address you wish to validate", - "title": "Email Address", - "type": "string" - }, - "level": { - "description": "The level to which you wish to validate - please check https://www.data-8.co.uk/resources/support/service-documentation/email-validation/reference/isvalid for more information", - "enum": [ - "Syntax", - "MX", - "Server", - "Address" - ], - "title": "Validation Level", - "type": "string" - } - }, - "required": [ - "email", - "level" - ], - "type": "object" - } - } - ], - "responses": { - "200": { - "description": "default", - "schema": { - "properties": { - "Result": { - "description": "Contains a status code indicating if the email address could be validated. For more information on the possible status code, please read https://www.data-8.co.uk/resources/support/service-documentation/email-validation/reference/isvalid", - "title": "Result", - "type": "string" - }, - "Status": { - "properties": { - "CreditsRemaining": { - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "type": "integer" - }, - "ErrorMessage": { - "description": "Returned Error Message, if any", - "title": "Error Message", - "type": "string" - }, - "Success": { - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "type": "boolean" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - }, - "summary": "Validate Email Address" - } - }, - "/InternationalTelephoneValidation/IsValid.json": { - "post": { - "description": "Checks to see if an inputted email address is valid to receive email", - "operationId": "IsValidTelephone", - "parameters": [ - { - "in": "body", - "name": "body", - "required": true, - "schema": { - "properties": { - "defaultCountry": { - "description": "Formatted as numbers i.e. 44 for UK", - "title": "Default Country Code", - "type": "string" - }, - "options": { - "description": "options", - "properties": { - "UseLineValidation": { - "description": "If set to true then the service will use Data8 LandlineValidation on any number it recognises as a UK landline number and InternationalTelephoneValidation on all other numbers. Any validation call will be debited either an InternationalTelephoneValidation credit or a LandlineValidation credit accordingly so please ensure you have LandlineValidation credits available before using this option. The option defaults to false.", - "title": "Use Line Validation", - "type": "boolean" - }, - "UseMobileValidation": { - "description": "If set to true then the service will use Data8 MobileValidation on any number it recognises as a mobile number and InternationalTelephoneValidation on all other numbers. Any validation call will be debited either an InternationalTelephoneValidation credit or a MobileValidation credit accordingly so please ensure you have MobileValidation credits available before using this option. The option defaults to false.", - "title": "Use Mobile Validation", - "type": "boolean" - } - }, - "type": "object" - }, - "telephoneNumber": { - "description": "The number you want to validate", - "title": "Telephone Number", - "type": "string" - } - }, - "required": [ - "telephoneNumber", - "defaultCountry" - ], - "type": "object" - } - } - ], - "responses": { - "200": { - "description": "default", - "schema": { - "properties": { - "Result": { - "description": "Result", - "properties": { - "CountryCode": { - "description": "Country ISO2 code of the telephone number", - "title": "Country Code", - "type": "string" - }, - "CountryName": { - "description": "Country name of the telephone number", - "title": "Country Name", - "type": "string" - }, - "Location": { - "description": "Current location of the telephone number if available", - "title": "Location", - "type": "string" - }, - "NumberType": { - "description": "Specifies the type of the number provided i.e. Landline or Mobile", - "title": "Number Type", - "type": "string" - }, - "Provider": { - "description": "The network provider of the telephone number", - "title": "Provider", - "type": "string" - }, - "TelephoneNumber": { - "description": "The inputted telephone number formatted", - "title": "Telephone Number", - "type": "string" - }, - "ValidationLevel": { - "description": "The level of validation found for the phone number.", - "title": "Validation Level", - "type": "string" - }, - "ValidationResult": { - "description": "The simple result for the validation of the telephone number", - "title": "Validation Result", - "type": "string" - } - }, - "type": "object" - }, - "Status": { - "description": "Status", - "properties": { - "CreditsRemaining": { - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "type": "integer" - }, - "ErrorMessage": { - "description": "Returned Error Message, if any", - "title": "Error Message", - "type": "string" - }, - "Success": { - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "type": "boolean" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - }, - "summary": "Validate Telephone Number" - } - }, - "/Postcoder/CleanAddress.json": { - "post": { - "description": "Formats, verifies and corrects a given address into a full formatted address.", - "operationId": "CleanAddress", - "parameters": [ - { - "in": "body", - "name": "body", - "required": false, - "schema": { - "properties": { - "address": { - "description": "address", - "properties": { - "Lines": { - "description": "Lines", - "items": { - "description": "", - "title": "Address Lines", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "Lines" - ], - "type": "object" - }, - "options": { - "description": "options", - "properties": { - "Country": { - "description": "If DetectCountry is set to true, this is taken as additional user input alongside the address to influence the country detection function. The format of this is not enforced, so could be provided as \"US\", \"USA\" or \"United States\"", - "title": "Country", - "type": "string" - }, - "DefaultCountryCode": { - "description": "an ISO 2 character code for the country to assume the address is in unless otherwise specified. This defaults to GB.", - "title": "Default Country Code", - "type": "string" - }, - "DetectCountry": { - "description": "Set to true to attempt to automatically detect the country from the provided address information, possibly overriding the default country", - "title": "Auto Detect Country", - "type": "boolean" - }, - "IncludeCountry": { - "description": "Includes the CountryName field in the main part of the result", - "title": "Include Country", - "type": "boolean" - } - }, - "type": "object" - } - }, - "required": [ - "address" - ], - "type": "object" - } - } - ], - "responses": { - "200": { - "description": "default", - "schema": { - "properties": { - "CountryName": { - "description": "Contains the name of the country the address is in.", - "title": "Country Name", - "type": "string" - }, - "MatchLevel": { - "description": "Contains a MatchLevel to indicate how well the address matched to PAF. Possible values are OK_Unchanged, OK_Corrected, NOK_Building, NOK_Street, NOK_Town, NOK_NoMatch", - "title": "Match Level", - "type": "string" - }, - "Result": { - "description": "Result", - "properties": { - "Address": { - "description": "Address", - "properties": { - "Lines": { - "description": "Lines", - "items": { - "title": "Address Lines", - "type": "string" - }, - "type": "array" - } - }, - "title": "Address Lines", - "type": "object" - } - }, - "type": "object" - }, - "Status": { - "description": "Status", - "properties": { - "CreditsRemaining": { - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "type": "integer" - }, - "ErrorMessage": { - "description": "Returned Error Message, if any", - "title": "Error Message", - "type": "string" - }, - "Success": { - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "type": "boolean" - } - }, - "type": "object" - } - }, - "type": "object" - } - } - }, - "summary": "Clean Address" - } - }, "/SalaciousName/IsUnusableName.json": { "post": { + "consumes" : [ + "application/json" + ], + "summary": "Check Usable Name", "description": "Using this action, you can check if a name is a real usable name or whether it is salacious, random or blank.", "operationId": "IsUsableName", "parameters": [ { - "in": "body", "name": "body", + "in": "body", "required": true, "schema": { + "type": "object", "properties": { "name": { - "description": "name", + "type": "object", "properties": { + "Title": { + "type": "string", + "description": "The title of the name", + "title": "Title" + }, "Forename": { + "type": "string", "description": "The first name of the full name", "title": "First name", - "type": "string" + "x-ms-visibility": "" }, "MiddleName": { + "type": "string", "description": "The middle name of the full name", - "title": "Middle name", - "type": "string" + "title": "Middle name" }, "Surname": { - "description": "The last name of the full name", + "type": "string", "title": "Last name", - "type": "string" - }, - "Title": { - "description": "The title of the name", - "title": "Title", - "type": "string" + "description": "The last name of the full name" } }, - "type": "object" + "description": "name" } - }, - "type": "object" + } } } ], "responses": { - "200": { + "default": { "description": "default", "schema": { + "type": "object", "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success", + "x-ms-visibility": "" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message", + "x-ms-visibility": "" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining", + "x-ms-visibility": "" + } + }, + "description": "Status" + }, "Result": { + "type": "string", "description": "A blank value indiciates the name is a usable name. If a value is returned it will be one of the following: \"IncompleteName\", \"RandomName\" or \"SalaciousName\"", + "title": "Result", + "x-ms-visibility": "", "enum": [ "", "IncompleteName", "RandomName", "SalaciousName" - ], - "title": "Result", - "type": "string" - }, - "Status": { - "description": "Status", - "properties": { - "CreditsRemaining": { - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "type": "integer" - }, - "ErrorMessage": { - "description": "Returned Error Message, if any", - "title": "Error Message", - "type": "string" - }, - "Success": { - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "type": "boolean" - } - }, - "type": "object" + ] } - }, - "type": "object" + } } } - }, - "summary": "Check Usable Name" + } } }, "/TPS/IsCallable.json": { "post": { + "consumes" : [ + "application/json" + ], + "summary": "TPS Check", "description": "Checks if a telephone number is registered on the TPS or not.", "operationId": "IsCallableTPS", "parameters": [ { - "in": "body", "name": "body", - "required": true, + "in": "body", "schema": { + "type": "object", "properties": { "number": { + "type": "string", "description": "The telephone number you want to TPS check", "title": "Telephone Number", - "type": "string" + "x-ms-visibility": "" } }, "required": [ "number" - ], - "type": "object" + ] + }, + "required": true + } + ], + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "string", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success", + "x-ms-visibility": "" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message", + "x-ms-visibility": "" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining", + "x-ms-visibility": "" + } + }, + "description": "Status" + }, + "Callable": { + "type": "boolean", + "description": "Returns a boolean value letting you know if it's callable. If false, the number is currently on the TPS.", + "title": "Is Callable", + "x-ms-visibility": "" + }, + "TelephoneNumber": { + "type": "string", + "description": "Returns the telephone number if callable, null if not.", + "title": "Telephone Number", + "x-ms-visibility": "" + } + } + } + } + } + } + }, + "/CTPS/IsCallable.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "CTPS Check", + "description": "Checks if a telephone number is registered on the CTPS or not.", + "operationId": "IsCallableCTPS", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The telephone number you wish to CTPS check", + "title": "Telephone Number", + "x-ms-visibility": "" + } + }, + "required": [ + "number" + ] + }, + "required": true + } + ], + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "string", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success", + "x-ms-visibility": "" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message", + "x-ms-visibility": "" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining", + "x-ms-visibility": "" + } + }, + "description": "Status" + }, + "Callable": { + "type": "boolean", + "description": "Returns a boolean value letting you know if it's callable. If false, the number is currently on the CTPS.", + "title": "Is Callable", + "x-ms-visibility": "" + }, + "TelephoneNumber": { + "type": "string", + "description": "If populated, the telephone number is callable and null if not", + "title": "Telephone Number", + "x-ms-visibility": "" + } + } + } + } + } + } + }, + "/BankAccountValidation/IsValid.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Validate Bank Account Information", + "description": "Check if a sort code and bank account number are valid.", + "operationId": "IsValidBankAccount", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "sortCode": { + "type": "string", + "description": "The sort code you wish to validate", + "title": "Sort Code", + "x-ms-visibility": "" + }, + "bankAccountNumber": { + "type": "string", + "description": "The bank account number you wish to validate", + "title": "Bank Account Number", + "x-ms-visibility": "" + } + }, + "required": [ + "sortCode" + ] + }, + "required": true + } + ], + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "string", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success", + "x-ms-visibility": "" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message", + "x-ms-visibility": "" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining", + "x-ms-visibility": "" + } + }, + "description": "Status" + }, + "Valid": { + "type": "string", + "title": "Valid", + "description": "Indicates if the incoming sort code and bank account number could be validated." + }, + "SortCode": { + "type": "string", + "description": "The sort code that has been validated.", + "title": "Sort Code", + "x-ms-visibility": "" + }, + "AccountNumber": { + "type": "string", + "description": "The account number that has been validated.", + "title": "Account Number", + "x-ms-visibility": "" + }, + "BICCode": { + "type": "string", + "description": "The BIC code of the bank branch indicated by the sort code.", + "title": "BIC Code", + "x-ms-visibility": "" + }, + "IBAN": { + "type": "string", + "title": "IBAN", + "description": "The IBAN code of the bank account indicated by the sort code and account number." + }, + "BranchName": { + "type": "string", + "description": "The name of the bank branch indicated by the sort code.", + "title": "Branch Name", + "x-ms-visibility": "" + }, + "ShortBankName": { + "type": "string", + "description": "A short name for the bank indicated by the sort code.", + "title": "Short Bank Name", + "x-ms-visibility": "" + }, + "FullBankName": { + "type": "string", + "description": "The full name for the bank indicated by the sort code.", + "title": "Full Bank Name", + "x-ms-visibility": "" + }, + "Address": { + "type": "object", + "properties": { + "Address": { + "type": "object", + "properties": { + "Lines": { + "type": "array", + "items": { + "type": "string", + "title": "Address Lines", + "x-ms-visibility": "" + }, + "description": "Lines" + } + }, + "title": "Address", + "description": "The address of the bank branch indicated by the sort code." + } + }, + "description": "Address" + }, + "AcceptsBACSPayments": { + "type": "boolean", + "description": "Indicates if the bank branch can accept payments made through the BACS system.", + "title": "Accepts BACS Payments", + "x-ms-visibility": "" + }, + "AcceptsDirectDebitTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept direct debit payments.", + "title": "Accepts Direct Debit Transactions", + "x-ms-visibility": "" + }, + "AcceptsDirectCreditTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept direct credit payments.", + "title": "Accepts Direct Credit Transactions", + "x-ms-visibility": "" + }, + "AcceptsUnpaidChequeClaimTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept claims for unpaid cheques.", + "title": "Accepts Unpaid Cheque Claim Transactions", + "x-ms-visibility": "" + }, + "AcceptsBuildingSocietyCreditTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept credits from building societies.", + "title": "Accepts Building Society Credit Transactions", + "x-ms-visibility": "" + }, + "AcceptsDividendInterestPaymentTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept dividend interest payments.", + "title": "Accepts Dividend Interest Payment Transactions", + "x-ms-visibility": "" + }, + "AcceptsDirectDebitInstructionTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept direct debit instructions.", + "title": "Accepts Direct Debit Instruction Transactions", + "x-ms-visibility": "" + }, + "AcceptsCHAPSPayments": { + "type": "boolean", + "description": "Indicates if the bank branch can accept payments made through the CHAPS system.", + "title": "Accepts CHAPS Payments", + "x-ms-visibility": "" + }, + "AcceptsCheques": { + "type": "boolean", + "description": "Indicates if the bank branch can accept payments made by cheque.", + "title": "Accepts Cheques", + "x-ms-visibility": "" + }, + "AcceptsFasterPayments": { + "type": "boolean", + "description": "", + "title": "Accepts Faster Payments" + } + } + } + } + } + } + }, + "/EmailValidation/IsValid.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Validate Email Address", + "description": "Checks to see if an inputted email address is valid to receive email", + "operationId": "IsValidEmail", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "The email address you wish to validate", + "title": "Email Address", + "x-ms-visibility": "" + }, + "level": { + "type": "string", + "description": "The level to which you wish to validate - please check https://www.data-8.co.uk/resources/support/service-documentation/email-validation/reference/isvalid for more information", + "title": "Validation Level", + "x-ms-visibility": "", + "enum": [ + "Syntax", + "MX", + "Server", + "Address" + ] + } + }, + "required": [ + "email", + "level" + ] } } ], "responses": { - "200": { + "default": { "description": "default", "schema": { + "type": "object", "properties": { - "Callable": { - "description": "Returns a boolean value letting you know if it's callable. If false, the number is currently on the TPS.", - "title": "Is Callable", - "type": "boolean" - }, "Status": { - "description": "Status", + "type": "object", "properties": { - "CreditsRemaining": { - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "type": "integer" - }, - "ErrorMessage": { - "description": "Returned Error Message, if any", - "title": "Error Message", - "type": "string" - }, "Success": { + "type": "string", "description": "Flag to determine if the request to Data8 succeeded, regardless of result", "title": "Success", - "type": "boolean" + "x-ms-visibility": "" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message", + "x-ms-visibility": "" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining", + "x-ms-visibility": "" + } + } + }, + "Result": { + "type": "string", + "description": "Contains a status code indicating if the email address could be validated. For more information on the possible status code, please read https://www.data-8.co.uk/resources/support/service-documentation/email-validation/reference/isvalid", + "title": "Result", + "x-ms-visibility": "" + } + } + } + } + } + } + }, + "/InternationalTelephoneValidation/IsValid.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Validate Telephone Number", + "description": "Checks to see if an inputted email address is valid to receive email", + "operationId": "IsValidTelephone", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "telephoneNumber": { + "type": "string", + "description": "The number you want to validate", + "title": "Telephone Number", + "x-ms-visibility": "" + }, + "defaultCountry": { + "type": "string", + "description": "Formatted as numbers i.e. 44 for UK", + "title": "Default Country Code", + "x-ms-visibility": "" + }, + "options": { + "type": "object", + "properties": { + "UseLineValidation": { + "type": "boolean", + "description": "If set to true then the service will use Data8 LandlineValidation on any number it recognises as a UK landline number and InternationalTelephoneValidation on all other numbers. Any validation call will be debited either an InternationalTelephoneValidation credit or a LandlineValidation credit accordingly so please ensure you have LandlineValidation credits available before using this option. The option defaults to false.", + "title": "Use Line Validation", + "x-ms-visibility": "" + }, + "UseMobileValidation": { + "type": "boolean", + "description": "If set to true then the service will use Data8 MobileValidation on any number it recognises as a mobile number and InternationalTelephoneValidation on all other numbers. Any validation call will be debited either an InternationalTelephoneValidation credit or a MobileValidation credit accordingly so please ensure you have MobileValidation credits available before using this option. The option defaults to false.", + "title": "Use Mobile Validation", + "x-ms-visibility": "" } }, - "type": "object" - }, - "TelephoneNumber": { - "description": "Returns the telephone number if callable, null if not.", - "title": "Telephone Number", - "type": "string" + "description": "options" } }, - "type": "object" + "required": [ + "telephoneNumber", + "defaultCountry" + ] + } + } + ], + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "string", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success", + "x-ms-visibility": "" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message", + "x-ms-visibility": "" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining", + "x-ms-visibility": "" + } + }, + "description": "Status" + }, + "Result": { + "type": "object", + "properties": { + "TelephoneNumber": { + "type": "string", + "description": "The inputted telephone number formatted", + "title": "Telephone Number", + "x-ms-visibility": "" + }, + "ValidationResult": { + "type": "string", + "description": "The simple result for the validation of the telephone number", + "title": "Validation Result", + "x-ms-visibility": "" + }, + "ValidationLevel": { + "type": "string", + "description": "The level of validation found for the phone number.", + "title": "Validation Level", + "x-ms-visibility": "" + }, + "NumberType": { + "type": "string", + "description": "Specifies the type of the number provided i.e. Landline or Mobile", + "title": "Number Type", + "x-ms-visibility": "" + }, + "Location": { + "type": "string", + "description": "Current location of the telephone number if available", + "title": "Location", + "x-ms-visibility": "" + }, + "Provider": { + "type": "string", + "description": "The network provider of the telephone number", + "title": "Provider", + "x-ms-visibility": "" + }, + "CountryCode": { + "type": "string", + "description": "Country ISO2 code of the telephone number", + "title": "Country Code", + "x-ms-visibility": "" + }, + "CountryName": { + "type": "string", + "description": "Country name of the telephone number", + "title": "Country Name", + "x-ms-visibility": "" + } + }, + "description": "Result" + } + } + } + } + } + } + }, + "/Postcoder/CleanAddress.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Clean Address", + "description": "Formats, verifies and corrects a given address into a full formatted address.", + "operationId": "CleanAddress", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "address": { + "type": "object", + "properties": { + "Lines": { + "type": "array", + "items": { + "type": "string", + "description": "", + "title": "Address Lines", + "x-ms-visibility": "" + }, + "description": "Lines" + } + }, + "description": "address", + "required": [ + "Lines" + ] + }, + "options": { + "type": "object", + "properties": { + "DefaultCountryCode": { + "type": "string", + "description": "an ISO 2 character code for the country to assume the address is in unless otherwise specified. This defaults to GB.", + "title": "Default Country Code", + "x-ms-visibility": "" + }, + "DetectCountry": { + "type": "boolean", + "description": "Set to true to attempt to automatically detect the country from the provided address information, possibly overriding the default country", + "title": "Auto Detect Country", + "x-ms-visibility": "" + }, + "Country": { + "type": "string", + "description": "If DetectCountry is set to true, this is taken as additional user input alongside the address to influence the country detection function. The format of this is not enforced, so could be provided as \"US\", \"USA\" or \"United States\"", + "title": "Country", + "x-ms-visibility": "" + }, + "IncludeCountry": { + "type": "boolean", + "description": "Includes the CountryName field in the main part of the result", + "title": "Include Country", + "x-ms-visibility": "" + } + }, + "description": "options" + } + }, + "required": [ + "address" + ] + } + } + ], + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "string", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success", + "x-ms-visibility": "" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message", + "x-ms-visibility": "" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining", + "x-ms-visibility": "" + } + }, + "description": "Status" + }, + "Result": { + "type": "object", + "properties": { + "Address": { + "type": "object", + "properties": { + "Lines": { + "type": "array", + "items": { + "type": "string", + "title": "Address Lines", + "x-ms-visibility": "" + }, + "description": "Lines" + } + }, + "description": "Address", + "title": "Address Lines" + } + }, + "description": "Result" + }, + "MatchLevel": { + "type": "string", + "description": "Contains a MatchLevel to indicate how well the address matched to PAF. Possible values are OK_Unchanged, OK_Corrected, NOK_Building, NOK_Street, NOK_Town, NOK_NoMatch", + "title": "Match Level", + "x-ms-visibility": "" + }, + "CountryName": { + "type": "string", + "description": "Contains the name of the country the address is in.", + "title": "Country Name", + "x-ms-visibility": "" + } + } + } + } + } + } + }, + "/AddressCapture/GetFullAddress.json": { + "post": { + "consumes" : [ + "application/json" + ], + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Success" + }, + "ErrorMessage": { + "type": "string", + "description": "Error Message (if applicable)" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Credits Remaining", + "title": "" + } + }, + "description": "Status" + }, + "ResultCount": { + "type": "integer", + "format": "int32", + "description": "", + "title": "Contains the number of addresses in the Results field. This field is only populated if the ReturnResultCount option is set to true" + }, + "Results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Address": { + "type": "object", + "properties": { + "Lines": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Formatted Address Lines" + } + }, + "description": "Formatted Address" + }, + "RawAddress": { + "type": "object", + "properties": { + "Organisation": { + "type": "string", + "description": "Organisation" + }, + "Department": { + "type": "string", + "description": "Department" + }, + "AddressKey": { + "type": "integer", + "format": "int32", + "description": "Address Key" + }, + "OrganisationKey": { + "type": "integer", + "format": "int32", + "description": "Organisation Key" + }, + "PostcodeType": { + "type": "string", + "description": "Postcode Type" + }, + "BuildingNumber": { + "type": "integer", + "format": "int32", + "description": "Building Number" + }, + "SubBuildingName": { + "type": "string", + "description": "Sub Building Name" + }, + "BuildingName": { + "type": "string", + "description": "Building Name" + }, + "DependentThoroughfareName": { + "type": "string", + "description": "Dependent Thoroughfare Name" + }, + "DependentThoroughfareDesc": { + "type": "string", + "description": "Dependent Thoroughfare Desc" + }, + "ThoroughfareName": { + "type": "string", + "description": "Thoroughfare Name" + }, + "ThoroughfareDesc": { + "type": "string", + "description": "Thoroughfare Desc" + }, + "DoubleDependentLocality": { + "type": "string", + "description": "Double Dependent Locality" + }, + "DependentLocality": { + "type": "string", + "description": "Dependent Locality" + }, + "Locality": { + "type": "string", + "description": "Locality" + }, + "Postcode": { + "type": "string", + "description": "Postcode" + }, + "Dps": { + "type": "string", + "description": "DPS" + }, + "PoBox": { + "type": "string", + "description": "PO Box" + }, + "PostalCounty": { + "type": "string", + "description": "Postal County" + }, + "TraditionalCounty": { + "type": "string", + "description": "Traditional County" + }, + "AdministrativeCounty": { + "type": "string", + "description": "Administrative County" + }, + "CountryISO2": { + "type": "string", + "description": "Country ISO2" + }, + "UniqueReference": { + "type": "string", + "description": "Unique Reference" + }, + "Location": { + "type": "object", + "properties": { + "Easting": { + "type": "integer", + "format": "int32", + "description": "Easting" + }, + "Northing": { + "type": "integer", + "format": "int32", + "description": "Northing" + }, + "GridReference": { + "type": "string", + "description": "GridReference" + }, + "Longitude": { + "type": "number", + "format": "float", + "description": "Longitude" + }, + "Latitude": { + "type": "number", + "format": "float", + "description": "Latitude" + }, + "CountyCode": { + "type": "string", + "description": "CountyCode" + }, + "County": { + "type": "string", + "description": "County" + }, + "DistrictCode": { + "type": "string", + "description": "DistrictCode" + }, + "District": { + "type": "string", + "description": "District" + }, + "WardCode": { + "type": "string", + "description": "WardCode" + }, + "Ward": { + "type": "string", + "description": "Ward" + }, + "Country": { + "type": "string", + "description": "Country" + } + }, + "description": "Location" + } + }, + "description": "Raw Address" + } + } + }, + "description": "Results" + } + } } } }, - "summary": "TPS Check" + "summary": "Get Full Address", + "operationId": "GetFullAddress", + "description": "Searches for an addresses based on input data such as building number and postcode", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "licence": { + "type": "string", + "description": "As the Royal Mail PAF database can be licensed in multiple ways, this parameter indicates under which license you are accessing the data. This must match the variant you have a license or credits for - if you are unsure which option to choose, please contact your account manager", + "title": "License", + "enum": [ + "InternalUserFull", + "InternalUserFullArea", + "SmallUserFull", + "WebClickFull", + "WebServerFull", + "Lookup", + "InternalServerFull", + "FreeTrial" + ] + }, + "postcode": { + "type": "string", + "description": "The full postcode to get addresses for. Formatting of the postcode does not matter so \"ch24ne\", \"CH2 4NE\", \"ch02 4Ne\" are all accepted.", + "title": "Postcode" + }, + "building": { + "type": "string", + "description": "An optional value to filter the returned addresses by building name, number, sub-premise (e.g. flat number) or company name. If null or \"\" are supplied, all addresses on the postcode are included in the result.", + "title": "Building", + "x-ms-visibility": "advanced" + }, + "options": { + "type": "object", + "properties": { + "FixTownCounty": { + "type": "boolean", + "description": "true to ensure the town and county are returned in the last two address lines, or false if they should appear in the first available line.", + "title": "FixTownCounty", + "x-ms-visibility": "advanced" + }, + "MaxLines": { + "type": "integer", + "description": "The number of lines to format the address over. An additional line will be included in the result for the postcode.", + "title": "MaxLines", + "format": "int32", + "default": 6 + }, + "MaxLineLength": { + "type": "integer", + "description": "The maximum number of characters that can appear in each address line.", + "title": "MaxLineLength", + "format": "int32", + "x-ms-visibility": "advanced" + }, + "NormalizeCase": { + "type": "boolean", + "description": "Converts all text in the address except the town name to proper case.", + "title": "NormalizeCase", + "x-ms-visibility": "advanced" + }, + "NormalizeTownCase": { + "type": "boolean", + "description": "Converts the town name to proper case", + "title": "NormalizeTownCase", + "x-ms-visibility": "advanced" + }, + "ExcludeCounty": { + "type": "boolean", + "description": "Excludes the county, if any, from the formatted address", + "title": "ExcludeCounty", + "x-ms-visibility": "advanced" + }, + "UseAnyAvailableCounty": { + "type": "boolean", + "description": "Uses any available county to populate the formatted address, not just the postal county", + "title": "UseAnyAvailableCounty", + "x-ms-visibility": "advanced" + }, + "UnwantedPunctuation": { + "type": "boolean", + "description": "A string containing any punctuation characters to be removed from the formatted address", + "title": "UnwantedPunctuation", + "x-ms-visibility": "advanced" + }, + "FixBuilding": { + "type": "boolean", + "description": "Ensures the building name/number is always placed in the first line", + "title": "FixBuilding", + "x-ms-visibility": "advanced" + }, + "IncludeUDPRN": { + "type": "boolean", + "description": "Set to true to have the UniqueReference field of each returned address populated with the UDPRN", + "title": "IncludeUDPRN", + "x-ms-visibility": "advanced" + }, + "IncludeLocation": { + "type": "boolean", + "description": "Set to true to have the Location field of each returned address populated with the geocoding details for the address", + "title": "IncludeLocation", + "default": true + }, + "ReturnResultCount": { + "type": "boolean", + "description": "Indicates if the ResultCount field in the result should be populated with the total number of addresses returned.", + "title": "ReturnResultCount", + "x-ms-visibility": "advanced" + }, + "IncludeNYB": { + "type": "boolean", + "description": "Set to true to include addresses from the Not Yet Built database in the results (requires additional licensing)", + "title": "IncludeNYB", + "x-ms-visibility": "advanced" + }, + "IncludeMR": { + "type": "boolean", + "description": "Set to true to include addresses from the Multiple Residency database in the results (requires additional licensing)", + "title": "IncludeMR", + "x-ms-visibility": "advanced" + }, + "Formatter": { + "type": "string", + "description": "Pick from one of the available formatters to control how the raw address is converted into a human-readable address", + "title": "Formatter", + "enum": [ + "DefaultFormatter", + "PAFStandardFormatter", + "NoOrganisationFormatter" + ], + "x-ms-visibility": "advanced" + } + }, + "description": "options" + } + }, + "required": [ + "licence", + "postcode" + ] + } + } + ] } } }, - "produces": [ - "application/json" + "x-ms-connector-metadata" : [ + { + "propertyName" : "Website", + "propertyValue" : "https://www.data-8.co.uk" + }, + { + "propertyName" : "Privacy Policy", + "propertyValue" : "https://www.data-8.co.uk/privacy-policy/" + }, + { + "propertyName" : "Categories", + "propertyValue" : "AI;Website" + } ], + "definitions": {}, + "parameters": {}, "responses": {}, - "schemes": [ - "https" - ], - "security": [], "securityDefinitions": { - "api_key": { + "API Key": { + "type": "apiKey", "in": "query", - "name": "key", - "type": "apiKey" + "name": "key" } }, - "swagger": "2.0", + "security": [ + { + "API Key": [] + } + ], "tags": [] } \ No newline at end of file diff --git a/certified-connectors/Data8/apiProperties.json b/certified-connectors/Data8/apiProperties.json index d14037daa..c0631eacb 100644 --- a/certified-connectors/Data8/apiProperties.json +++ b/certified-connectors/Data8/apiProperties.json @@ -1,23 +1,23 @@ { "properties": { - "capabilities": [ - "actions" - ], "connectionParameters": { "api_key": { "type": "securestring", "uiDefinition": { - "constraints": { - "clearText": false, - "required": "true", - "tabIndex": 2 - }, - "description": "The API Key for this api", "displayName": "API Key", - "tooltip": "Provide your API Key" + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } } } }, - "iconBrandColor": "#1973ae" + "iconBrandColor": "#1973AE", + "capabilities": [], + "publisher": "Data8 Ltd", + "stackOwner": "Data8 Ltd" } } \ No newline at end of file diff --git a/certified-connectors/Data8/readme.md b/certified-connectors/Data8/readme.md new file mode 100644 index 000000000..692020224 --- /dev/null +++ b/certified-connectors/Data8/readme.md @@ -0,0 +1,23 @@ +# Data8 Data Enrichment Connector + +Data8 helps you build confidence in your data. + +We can save you money by cleaning and enriching both your existing data, as well as ensuring only the highest quality data goes in at the point of entry, leaving you to concentrate on targeting and communicating to the right customers. + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Automate plan with premium connector feature +* A Data8 account +* A Data8 API key +* Credits for the application Data8 service + +## Getting a Data8 account +[Register](https://www.data-8.co.uk/register/) for a new Data8 account +Once you have a Data8 account, please contact us and let us know which services you like to trial +[Sign In](https://www.data-8.co.uk/dashboard/api-keys/) to get your API key and create a "Server Side" API key + +## Supported Operations +Details of all the supported operations, inputs and outputs are available [here](https://docs.microsoft.com/en-gb/connectors/data8/). + +## Support and documentation: +For all the support requests and general queries you can contact helpdesk@data-8.co.uk or visit [contact-us]https://www.data-8.co.uk/contact/) \ No newline at end of file From 712b655aff3b3892b3c8f8664fcb9c0296f2a89f Mon Sep 17 00:00:00 2001 From: Aman Date: Wed, 2 Sep 2020 13:23:40 +0530 Subject: [PATCH 046/347] Correcting the description --- .../CDK Drive Customers/apiDefinition.swagger.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json index a03e28eeb..f956a033b 100644 --- a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json +++ b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json @@ -3,7 +3,7 @@ "info": { "title": "CDK Drive Customer", "version": "1.0", - "description": "CDK Drive - CRM - Customers - A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a CRM system. The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record.This helps service advisors provide a positive experience by allowing those workflows to be tied to a customer.", + "description": "The API will allow you to find, retrieve, and filter service customers in CDK Drive. Within CDK Drive, a customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts, or has had their vehicle repaired or serviced through the dealership and exists in a CRM system. In addition, this connector will allow you to create a basic customer record. This helps service advisers provide a positive experience by allowing those workflows to be tied to a customer.", "contact": { "name": "CDK Global", "url": "https://serviceconnect.support.cdk.com", @@ -493,7 +493,7 @@ "properties": { "customerId": { "type": "string", - "description": "The idenifier of the customer record" + "description": "The identifier of the customer record" }, "name": { "$ref": "#/definitions/Name", From 14379749444d2e0bfcb552a43682c95fae1ca0cd Mon Sep 17 00:00:00 2001 From: amancdk <35783172+amancdk@users.noreply.github.com> Date: Thu, 3 Sep 2020 00:14:33 +0530 Subject: [PATCH 047/347] Cdk drive customers api (#430) * Initial commit for CDK Customer API connector * Initial commit for CDK Customer API connector * Reducing the length of the description * Correcting the description --- .../CDK Drive Customers/apiDefinition.swagger.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json index a03e28eeb..f956a033b 100644 --- a/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json +++ b/certified-connectors/CDK Drive Customers/apiDefinition.swagger.json @@ -3,7 +3,7 @@ "info": { "title": "CDK Drive Customer", "version": "1.0", - "description": "CDK Drive - CRM - Customers - A customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts or has had their vehicle repaired or serviced through the dealership and exists in a CRM system. The API will allow you to find, retrieve, and filter service customers in CDK Drive. In addition, it will allow you to create a basic customer record.This helps service advisors provide a positive experience by allowing those workflows to be tied to a customer.", + "description": "The API will allow you to find, retrieve, and filter service customers in CDK Drive. Within CDK Drive, a customer is an individual who has been sold a vehicle, is a prospect on a vehicle, has bought parts, or has had their vehicle repaired or serviced through the dealership and exists in a CRM system. In addition, this connector will allow you to create a basic customer record. This helps service advisers provide a positive experience by allowing those workflows to be tied to a customer.", "contact": { "name": "CDK Global", "url": "https://serviceconnect.support.cdk.com", @@ -493,7 +493,7 @@ "properties": { "customerId": { "type": "string", - "description": "The idenifier of the customer record" + "description": "The identifier of the customer record" }, "name": { "$ref": "#/definitions/Name", From e71ca9426038b4dc405cb82a4897fc75cfdc68cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Vr=C3=A5lstad?= Date: Wed, 2 Sep 2020 22:22:54 +0200 Subject: [PATCH 048/347] Peltarion (#431) * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * Initial commit * Updated description * Update apiDefinition.swagger.json * Updated readme Co-authored-by: Marc Co-authored-by: Marc Hochleutner --- certified-connectors/Peltarion/README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/certified-connectors/Peltarion/README.md b/certified-connectors/Peltarion/README.md index 62a040e10..7ef2724d5 100644 --- a/certified-connectors/Peltarion/README.md +++ b/certified-connectors/Peltarion/README.md @@ -1,9 +1,8 @@ # Peltarion Connector -Add artificial intelligence to your apps! With Peltarion’s plugin, it has never been easier to create smart applications. -With this Peltarion integration, you can build and deploy AI models, and through the API connect to your app. +Use deep learning in your apps! Peltarion’s plugin is the simplest and fastest way to create smart applications. With this Peltarion integration, you can build and deploy AI models, and through the API connect to your app. -Some cool things that you can do, amongst others. Use the Peltarion plugin to build an app that: +See below for some of the things you can build. - Can tell the difference between music genres and classify them accordingly ([link](https://bit.ly/34K98Sm)) - Understands the semantic meaning of words and use it to classify movie reviews or customer support messages ([link](https://bit.ly/3jrkZsP)) @@ -14,7 +13,7 @@ Some cool things that you can do, amongst others. Use the Peltarion plugin to bu 1. Sign up for free on the Peltarion Platform ([link](https://bit.ly/3llPmTf)) 1. Build and train your AI model on the Peltarion platform -1. Add the Peltarion plugin to your Bubble app +1. Add the Peltarion plugin to your app 1. Connect the Peltarion action to your workflow The connector only support one operation, called *callapi*. To use the connector and store the value into a variable *res*, you can call the API like this: @@ -34,6 +33,4 @@ The *res* is an object with three values: Your URL, token and input name is found on the Deployment view on the Peltarion Platform. See screenshot below. ![URL, token and input](screenshot.png) - - For information on how to build and train an AI model on the Peltarion platform, visit our knowledge center (link: https://bit.ly/3gC6XCN) From 538755be956c50395c6e1dc5d34171faa36720db Mon Sep 17 00:00:00 2001 From: Crispin Koech Date: Thu, 3 Sep 2020 04:03:40 +0300 Subject: [PATCH 049/347] Update Africa's Talking Payments & SMS connector. (#429) * Update Africa's Talking Payments connector * Include host policy instances to Africa's Talking payments connector * Fix typo * Add sanbox Athena option in list of providers * Update SendSMS parameters; remove empty paths in payments connector Co-authored-by: Crispin Kipruto --- .../apiDefinition.swagger.json | 30 ++++++++----------- .../apiDefinition.swagger.json | 6 ++++ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json b/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json index 8c1037360..746e23f4f 100644 --- a/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json +++ b/certified-connectors/Africa's Talking Payments/apiDefinition.swagger.json @@ -42,7 +42,7 @@ }, "productName": { "type": "string", - "description": "Your Africa\u2019s Talking Payment Product to initiate this transaction.", + "description": "Your Africa's Talking Payment Product to initiate this transaction.", "title": "Product Name", "x-ms-visibility": "important" }, @@ -205,7 +205,7 @@ "/transfer/wallet": { "post": { "summary": "Wallet transfer", - "description": "Transfer money from one Payment Product to another Payment Product hosted on Africa\u2019s Talking.", + "description": "Transfer money from one Payment Product to another Payment Product hosted on Africa's Talking.", "operationId": "WalletTransfer", "parameters": [ { @@ -222,14 +222,14 @@ }, "productName": { "type": "string", - "description": "Your Africa\u2019s Talking Payment product to initiate this transaction.", + "description": "Your Africa's Talking Payment product to initiate this transaction.", "title": "Product Name", "x-ms-visibility": "important" }, "targetProductCode": { "type": "integer", "format": "int32", - "description": "Unique product code of the Africa\u2019s Talking Payment Product to transfer the funds to.", + "description": "Unique product code of the Africa's Talking Payment Product to transfer the funds to.", "title": "Target Product Code", "x-ms-visibility": "important" }, @@ -306,10 +306,6 @@ "x-ms-visibility": "important" } }, - "/card/checkout/charge": {}, - "/card/checkout/validate": {}, - "/bank/checkout/validate": {}, - "/bank/checkout/charge": {}, "/query/wallet/fetch": { "get": { "summary": "Fetch Wallet Transactions", @@ -333,7 +329,7 @@ "required": true, "format": "int32", "x-ms-visibility": "advanced", - "description": "The number of the page you\u2019d like to read results from", + "description": "The number of the page you'd like to read results from", "x-ms-summary": "Page Number" }, { @@ -510,11 +506,10 @@ } } }, - "/bank/transfer": {}, "/topup/stash": { "post": { "summary": "Top Up Stash", - "description": "Move money from a Payment Product to an Africa\u2019s Talking application stash.", + "description": "Move money from a Payment Product to an Africa's Talking application stash.", "operationId": "TopUpStash", "parameters": [ { @@ -531,7 +526,7 @@ }, "productName": { "type": "string", - "description": "Africa\u2019s Talking Payment product to initiate this transaction.", + "description": "Africa's Talking Payment product to initiate this transaction.", "title": "Product Name", "x-ms-visibility": "important" }, @@ -627,7 +622,7 @@ "type": "string", "required": true, "x-ms-visibility": "important", - "description": "The name of the payment product whose transactions you\u2019d like to fetch.", + "description": "The name of the payment product whose transactions you'd like to fetch.", "x-ms-summary": "Product Name" }, { @@ -637,7 +632,7 @@ "type": "integer", "required": true, "x-ms-visibility": "advanced", - "description": "The number of the page you\u2019d like to read results from.", + "description": "The number of the page you'd like to read results from.", "x-ms-summary": "Page Number", "format": "int32" }, @@ -877,11 +872,10 @@ "x-ms-visibility": "important" } }, - "/query/transaction/find": {}, "/mobile/checkout/request": { "post": { "summary": "Mobile Checkout", - "description": "Initiate a Customer to Business (C2B) payments on a mobile subscriber\u2019s device.", + "description": "Initiate a Customer to Business (C2B) payments on a mobile subscriber's device.", "operationId": "MobileCheckout", "parameters": [ { @@ -898,7 +892,7 @@ }, "productName": { "type": "string", - "description": "Your Africa\u2019s Talking Payment product to initiate this transaction.", + "description": "Your Africa's Talking Payment product to initiate this transaction.", "title": "Product Name", "x-ms-visibility": "important" }, @@ -1012,7 +1006,7 @@ }, "productName": { "type": "string", - "description": "Africa\u2019s Talking Payment Product to initiate this transaction.", + "description": "Africa's Talking Payment Product to initiate this transaction.", "title": "Product Name", "x-ms-visibility": "important" }, diff --git a/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json b/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json index 75f54ca46..9c3255947 100644 --- a/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json +++ b/certified-connectors/Africa's Talking SMS/apiDefinition.swagger.json @@ -74,6 +74,12 @@ false ], "x-ms-visibility": "advanced" + }, + "from": { + "type": "string", + "description": "Your registered short code or alphanumeric; defaults to AFRICASTKNG.", + "title": "From", + "x-ms-visibility": "advanced" } }, "default": {}, From 1718790e20500b4ddff908a4c17aee85a99ec1fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Vr=C3=A5lstad?= Date: Thu, 3 Sep 2020 19:36:12 +0200 Subject: [PATCH 050/347] Updated readme (#433) --- certified-connectors/Peltarion/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Peltarion/README.md b/certified-connectors/Peltarion/README.md index 7ef2724d5..7497a7527 100644 --- a/certified-connectors/Peltarion/README.md +++ b/certified-connectors/Peltarion/README.md @@ -21,7 +21,7 @@ The connector only support one operation, called *callapi*. To use the connector ``` ClearCollect(dd, { : TextInput1.Text}); Set(jdata,JSON(dd,JSONFormat.IncludeBinaryData)); -Set(res, PeltarionConnectorTest.callapi("https://a.gcp-eu-west-1.platform.peltarion.com/deployment//forward","",jdata)) +Set(res, PeltarionConnector.callapi("https://a.gcp-eu-west-1.platform.peltarion.com/deployment//forward","",jdata)) ``` The *res* is an object with three values: From c292645c7306e71f90dec566dc3c7d4f44adcdf8 Mon Sep 17 00:00:00 2001 From: Marc Date: Fri, 4 Sep 2020 02:32:28 +0200 Subject: [PATCH 051/347] [timeghost] bugfix filter-date-range (#424) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * bugfix date range query * fix $filter-date-range Co-authored-by: Marc Hochleutner --- certified-connectors/timeghost/apiDefinition.swagger.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/certified-connectors/timeghost/apiDefinition.swagger.json b/certified-connectors/timeghost/apiDefinition.swagger.json index e98c45b6e..442a1e00a 100644 --- a/certified-connectors/timeghost/apiDefinition.swagger.json +++ b/certified-connectors/timeghost/apiDefinition.swagger.json @@ -443,7 +443,7 @@ "x-ms-summary": "Workspace" }, { - "name": "$filter-Date range", + "name": "$filter-date-range", "in": "query", "required": true, "type": "string", @@ -637,7 +637,7 @@ } }, { - "name": "$filter-Date range", + "name": "$filter-date-range", "in": "query", "required": true, "type": "string", @@ -797,7 +797,7 @@ } }, { - "name": "$filter-Date range", + "name": "$filter-date-range", "in": "query", "required": true, "type": "string", @@ -1614,7 +1614,7 @@ "x-ms-summary": "Workspace" }, { - "name": "$filter-Date range", + "name": "$filter-date-range", "in": "query", "required": true, "type": "string", From 29f9bc417acc18f384d4bf797a7bf9e98d820c74 Mon Sep 17 00:00:00 2001 From: Diego Bernardes Date: Fri, 4 Sep 2020 23:27:22 +0100 Subject: [PATCH 052/347] Add Nitro connector (#415) --- .../Nitro/apiDefinition.swagger.json | 317 ++++++++++++++++++ certified-connectors/Nitro/apiProperties.json | 34 ++ certified-connectors/Nitro/readme.md | 7 + 3 files changed, 358 insertions(+) create mode 100644 certified-connectors/Nitro/apiDefinition.swagger.json create mode 100644 certified-connectors/Nitro/apiProperties.json create mode 100644 certified-connectors/Nitro/readme.md diff --git a/certified-connectors/Nitro/apiDefinition.swagger.json b/certified-connectors/Nitro/apiDefinition.swagger.json new file mode 100644 index 000000000..5c5420da6 --- /dev/null +++ b/certified-connectors/Nitro/apiDefinition.swagger.json @@ -0,0 +1,317 @@ +{ + "swagger": "2.0", + "info": { + "title": "Nitro", + "description": "Get your documents signed smarter, faster and more securely with Nitro Sign - without the need for paper or pen.", + "version": "1.0", + "contact": { + "name": "Nitro Support", + "url": "https://www.gonitro.com/support", + "email": "feedback@gonitro.com" + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.gonitro.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.gonitro.com/legal/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity" + } + ], + "host": "api.gonitro.com", + "basePath": "/v1/integration/power-automate", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/templates/summaries": { + "get": { + "tags": [ + "Template" + ], + "x-ms-visibility": "internal", + "summary": "List the template summaries", + "description": "List the current user template summaries.", + "operationId": "TemplateSummaries", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + } + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, + "/templates/{id}/signature-requests/schema": { + "get": { + "tags": [ + "Template" + ], + "x-ms-visibility": "internal", + "summary": "Get the dynamic schema for a template", + "description": "Get the dynamic schema to perform a signature request for a template.", + "operationId": "TemplateSignatureRequestSchema", + "parameters": [ + { + "name": "id", + "in": "path", + "type": "string", + "x-ms-url-encoding": "single", + "required": true, + "x-ms-summary": "Template ID" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "object", + "required": [ + "type", + "required", + "properties" + ], + "properties": { + "type": { + "type": "string" + }, + "required": { + "type": "array", + "items": { + "type": "string" + } + }, + "properties": { + "type": "object", + "required": [ + "subject", + "message" + ], + "properties": { + "subject": { + "type": "object", + "required": [ + "type", + "description" + ], + "properties": { + "type": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "message": { + "type": "object", + "required": [ + "type", + "description" + ], + "properties": { + "type": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, + "/templates/{id}/signature-requests": { + "post": { + "tags": [ + "Template" + ], + "description": "Send a signature request using an existing template.", + "summary": "Send a signature request using a template", + "operationId": "TemplateSignatureRequest", + "parameters": [ + { + "name": "id", + "type": "string", + "in": "path", + "required": true, + "x-ms-summary": "Template", + "description": "Use this option to select the template to be used for the signature request.", + "x-ms-url-encoding": "single", + "x-ms-dynamic-values": { + "operationId": "TemplateSummaries", + "value-path": "id", + "value-title": "name", + "value-collection": "items" + } + }, + { + "name": "dynamicSchema", + "in": "body", + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "TemplateSignatureRequestSchema", + "parameters": { + "id": { + "parameter": "id" + } + }, + "value-path": "items" + } + } + } + ], + "responses": { + "201": { + "description": "Created" + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, + "/webhooks": { + "x-ms-notification-content": { + "schema": { + "properties": { + "document": { + "format": "byte", + "title": "Signed document", + "type": "string" + } + }, + "required": [ + "document" + ], + "type": "object" + } + }, + "post": { + "description": "Triggers when a signature request is completed by all parties", + "summary": "When a signature request is completed", + "operationId": "webhookDocumentSignedTriggetr", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "request", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "endpoint", + "event" + ], + "properties": { + "endpoint": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + }, + "event": { + "type": "string", + "x-ms-visibility": "internal", + "default": "esign.request.completed" + } + } + } + } + ], + "responses": { + "201": { + "description": "Created" + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + } + }, + "definitions": { + "error": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } +} \ No newline at end of file diff --git a/certified-connectors/Nitro/apiProperties.json b/certified-connectors/Nitro/apiProperties.json new file mode 100644 index 000000000..311b93c73 --- /dev/null +++ b/certified-connectors/Nitro/apiProperties.json @@ -0,0 +1,34 @@ +{ + "properties": { + "publisher": "Nitro Software, Inc.", + "stackOwner": "Nitro Software, Inc.", + "connectionParameters": { + "token": { + "type": "oauthSetting", + "oAuthSettings": { + "identityProvider": "oauth2", + "clientId": "MicrosoftPowerAutomate", + "scopes": [], + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "properties": { + "IsFirstParty": "False" + }, + "customParameters": { + "authorizationUrl": { + "value": "https://sso.gonitro.com/authorize" + }, + "tokenUrl": { + "value": "https://sso.gonitro.com/token" + }, + "refreshUrl": { + "value": "https://sso.gonitro.com/token" + } + } + } + } + }, + "iconBrandColor": "#EE5B21", + "capabilities": [] + } +} \ No newline at end of file diff --git a/certified-connectors/Nitro/readme.md b/certified-connectors/Nitro/readme.md new file mode 100644 index 000000000..8e623ba0b --- /dev/null +++ b/certified-connectors/Nitro/readme.md @@ -0,0 +1,7 @@ +# Nitro +Nitro Sign enables you to get your documents signed smarter, faster and more securely, without the need for paper or pen. With the Nitro Sign connector you can automatically trigger signature requests, and automatically save signed documents to your preferred file storage system. + +## Prerequisites +You need an existing Nitro Sign account to use the Nitro Sign connector. +How to get credentials? +To sign up for a Nitro Sign account, visit nitrosign.com and click SignUp Now. From 888fb39254c1da2cd5a380d02b07f259c30484e7 Mon Sep 17 00:00:00 2001 From: Jasey Waegebaert <38426621+Jwaegebaert@users.noreply.github.com> Date: Wed, 9 Sep 2020 20:46:53 +0200 Subject: [PATCH 053/347] GroupMgr update array to internal (#441) * connector init * delimiter missing * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * Folder change * Request changes * Azure pipeline error fixes * Change approval array to internal Co-authored-by: Jasey Waegebaert Co-authored-by: Marc Co-authored-by: Marc Hochleutner --- certified-connectors/GroupMgr/apiDefinition.swagger.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/certified-connectors/GroupMgr/apiDefinition.swagger.json b/certified-connectors/GroupMgr/apiDefinition.swagger.json index bcb0c93c9..4b386b68d 100644 --- a/certified-connectors/GroupMgr/apiDefinition.swagger.json +++ b/certified-connectors/GroupMgr/apiDefinition.swagger.json @@ -250,7 +250,8 @@ "title": "", "x-ms-visibility": "internal" }, - "description": "approvalFlows" + "description": "approvalFlows", + "x-ms-visibility": "internal" } } } From e213fb3361e85f533212ce4294f13149731d1b2a Mon Sep 17 00:00:00 2001 From: jackihann <54574999+jackihann@users.noreply.github.com> Date: Thu, 10 Sep 2020 08:49:44 +1000 Subject: [PATCH 054/347] iAuditor PA connector files (#423) * iAuditor PA connector files * Updated authentication labels Updated to the authentication label, description, and tooltip. This is to instruct users more clearly on how to input the API token in the accepted format of 'Bearer '. * Update certified-connectors/iAuditor/apiProperties.json Co-authored-by: Brandon Cook * Updated connector action labels Updated the label to some of the actions in the iAuditor PA connector. Co-authored-by: Jack Han Co-authored-by: Brandon Cook --- .../iAuditor/apiDefinition.swagger.json | 57 ++++++++++--------- .../iAuditor/apiProperties.json | 8 +-- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/certified-connectors/iAuditor/apiDefinition.swagger.json b/certified-connectors/iAuditor/apiDefinition.swagger.json index 0fd00fdd5..432b8e1a1 100644 --- a/certified-connectors/iAuditor/apiDefinition.swagger.json +++ b/certified-connectors/iAuditor/apiDefinition.swagger.json @@ -100,7 +100,7 @@ ], "responses": { "200": { - "description": "Successfully retrieved the data for the specified inspection.", + "description": "Successfully retrieved the data of the specified inspection.", "schema": { "$ref": "#/definitions/GetAuditByIdResponse" } @@ -114,7 +114,7 @@ "audits" ], "summary": "Set the archived state of an inspection", - "description": "Choose 'Yes' to archive an inspection and 'No' to restore an archived inspection.", + "description": "Choose 'Yes' to archive the inspection and 'No' to restore the archived inspection.", "operationId": "ArchiveRestoreAudit", "parameters": [ { @@ -424,8 +424,8 @@ } } }, - "summary": "Create an Action", - "description": "Create a new Action", + "summary": "Create an action", + "description": "Create a new action", "operationId": "CreateAction", "x-ms-visibility": "advanced", "parameters": [ @@ -452,8 +452,8 @@ } } }, - "summary": "Delete an Action", - "description": "Delete an existing Action", + "summary": "Delete an action", + "description": "Delete an existing action", "operationId": "DeleteAction", "x-ms-visibility": "advanced", "parameters": [ @@ -471,8 +471,8 @@ } } }, - "summary": "Update an Action", - "description": "Update an existing Action", + "summary": "Update an action", + "description": "Update an existing action", "operationId": "UpdateAction", "x-ms-visibility": "advanced", "parameters": [ @@ -524,7 +524,7 @@ "preferences" ], "summary": "Search global preferences", - "description": "Retrieve the list of report preferences available to all templates.", + "description": "Retrieve the list of Report Preferences available to all templates.", "operationId": "SearchPreferences", "parameters": [], "responses": { @@ -545,7 +545,7 @@ "audits" ], "summary": "Export an inspection report", - "description": "Submit an export request for an inspection report into the selected format.", + "description": "Submit an export request for an inspection report in the selected format.", "operationId": "InitiateInspectionExport", "parameters": [ { @@ -605,12 +605,12 @@ "x-ms-summary": "Action ID" }, "count": { - "description": "The number of matching results returned in the current search run.", + "description": "The number of actions returned.", "type": "number", "x-ms-summary": "Count" }, "total": { - "description": "The overall total number of matching results for the search.", + "description": "The total number of actions found in the search parameters.", "type": "number", "x-ms-summary": "Total" }, @@ -775,11 +775,11 @@ "id": { "type": "string", "x-ms-summary": "Preference ID", - "description": "The unique identifier of the report preference." + "description": "The unique identifier of the Report Preference." }, "label": { "type": "string", - "x-ms-summary": "Preference Label", + "x-ms-summary": "Preference Name", "description": "The Report Preference name." } } @@ -879,7 +879,7 @@ }, "duration": { "type": "number", - "x-ms-summary": "Duration (s)", + "x-ms-summary": "Duration", "description": "The duration of the inspection in seconds." }, "authorship": { @@ -1008,15 +1008,15 @@ "audit_id": { "type": "string", "description": "The unique identifier of the inspection.", - "x-ms-summary": "ID" + "x-ms-summary": "Audit ID" }, "name": { "type": "string", - "description": "The name of the inspection.", - "x-ms-summary": "Name" + "description": "The name/title of the inspection.", + "x-ms-summary": "Inspection Title" } }, - "description": "The inspection the action was created for.", + "description": "The inspection that the action is associated with.", "x-ms-summary": "Inspection" }, "item": { @@ -1025,15 +1025,15 @@ "item_id": { "type": "string", "description": "The question/item's unique identifier.", - "x-ms-summary": "ID" + "x-ms-summary": "Item ID" }, "label": { "type": "string", "description": "The question/item's label.", - "x-ms-summary": "Label" + "x-ms-summary": "Item Label" } }, - "description": "The question/item the action was created against.", + "description": "The inspection question/item that the action is associated with.", "x-ms-summary": "Item" }, "description": { @@ -1071,12 +1071,12 @@ "id": { "type": "string", "description": "The assignee's user ID or email (external).", - "x-ms-summary": "ID" + "x-ms-summary": " Assignee ID" }, "name": { "type": "string", "description": "The action assignee's name or email (external).", - "x-ms-summary": "Name" + "x-ms-summary": "Assignee Name" }, "type": { "type": "string", @@ -1094,12 +1094,12 @@ "user_id": { "type": "string", "description": "The unique identifier of the user who created the action.", - "x-ms-summary": "Creator's ID" + "x-ms-summary": "Creator ID" }, "name": { "type": "string", "description": "The name of the user who created the action.", - "x-ms-summary": "Creator's Name" + "x-ms-summary": "Creator Name" } }, "description": "The user who created the action.", @@ -1150,7 +1150,8 @@ "id": { "type": "string", "description": "The assignee's user ID or email (external).", - "x-ms-summary": "ID" + + "x-ms-summary": "Assignee ID" }, "type": { "type": "string", @@ -1604,4 +1605,4 @@ "operationId": "SearchExportProfiles" } } -} \ No newline at end of file +} diff --git a/certified-connectors/iAuditor/apiProperties.json b/certified-connectors/iAuditor/apiProperties.json index 7d55a2823..cfc615437 100644 --- a/certified-connectors/iAuditor/apiProperties.json +++ b/certified-connectors/iAuditor/apiProperties.json @@ -4,9 +4,9 @@ "api_key": { "type": "securestring", "uiDefinition": { - "displayName": "API Key", - "description": "The API Key for this api", - "tooltip": "Provide your API Key", + "displayName": "API token", + "description": "Input format: 'Bearer ", + "tooltip": "Provide your API token in the format: 'Bearer '. e.g., 'Bearer your_api_token'", "constraints": { "tabIndex": 2, "clearText": false, @@ -22,4 +22,4 @@ "publisher": "SafetyCulture Pty Ltd", "stackOwner": "SafetyCulture Pty Ltd" } -} \ No newline at end of file +} From 889148a9f8b53b4c27fdfb65cca63ce7cc91326d Mon Sep 17 00:00:00 2001 From: Rambatla Venkat Rao <68921481+RamboV@users.noreply.github.com> Date: Thu, 10 Sep 2020 07:54:13 +0530 Subject: [PATCH 055/347] HYAS Insight Connector Submission for Review (#436) * Added HYAS Insight in Certified Connectors Folder * Readded HYAS Insight * Added HYAS Insight to Dev Branch * Added HYAS Insight to Dev Branch * Add files via upload * Add files via upload * Delete icon.png * Delete settings.json * Delete apiDefinition.swagger.json * Delete apiProperties.json * Add files via upload * Delete apiDefinition.swagger.json * Delete apiProperties.json * Delete icon.png * Delete settings.json * Added HYAS Insight to Certified Connectors Folder * Update apiProperties.json * Delete apiDefinition.swagger.json * Delete apiProperties.json * Delete icon.png * Delete settings.json * Added new set of files * Update apiProperties.json * Delete icon.png * Delete settings.json Co-authored-by: Rambatza Venkat Rao --- .../HYAS Insight/apiDefinition.swagger.json | 1843 +++++++++++++++++ .../HYAS Insight/apiProperties.json | 91 + 2 files changed, 1934 insertions(+) create mode 100644 certified-connectors/HYAS Insight/apiDefinition.swagger.json create mode 100644 certified-connectors/HYAS Insight/apiProperties.json diff --git a/certified-connectors/HYAS Insight/apiDefinition.swagger.json b/certified-connectors/HYAS Insight/apiDefinition.swagger.json new file mode 100644 index 000000000..b14b6799a --- /dev/null +++ b/certified-connectors/HYAS Insight/apiDefinition.swagger.json @@ -0,0 +1,1843 @@ +{ + "swagger": "2.0", + "info": { + "title": "HYAS Insight", + "description": "HYAS Insight integration to Microsoft Azure Sentinel provides direct, high volume access to HYAS Insight data. It enables investigators and analysts to understand and defend against cyber adversaries and their infrastructure.", + "contact":{ + "name": "HYAS Infosec", + "url": "https://www.hyas.com/contact", + "email": "support@hyas.com" + }, + "version": "1.0" + }, + "host": "insight.hyas.com", + "basePath": "/api/ext/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/sinkhole": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "Sinkhole information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32", + "description": "The sinkhole count." + }, + "country_name": { + "type": "string", + "description": "The country of the ip." + }, + "data_port": { + "type": "integer", + "format": "int32", + "description": "The data port." + }, + "datetime": { + "type": "string", + "description": "The first seen date of the sinkhole." + }, + "ipv4": { + "type": "string", + "description": "The ipv4 of the sinkhole." + }, + "last_seen": { + "type": "string", + "description": "The last seen date of the sinkhole." + }, + "organization_name": { + "type": "string", + "description": "The isp organization for the ip." + }, + "sink_source": { + "type": "string", + "description": "The ipv4 of the sink source." + } + } + } + } + } + }, + "summary": "Retrieve Sinkhole information for IP address", + "description": "Retrieve Sinkhole enrichment data for IP address.", + "operationId": "SINKHOLE", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "ipv4": { + "type": "string", + "description": "IPv4 address you want to enrich.", + "title": "IPv4 address" + } + }, + "description": "Request body (application/json).", + "required": [ + "ipv4" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/device_geo": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "A list of mobile geolocation information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "datetime": { + "type": "string", + "description": "A date-time string in RFC 3339 format." + }, + "device_geo_id": { + "type": "string", + "description": "Internal record ID." + }, + "device_user_agent": { + "type": "string", + "description": "The user agent string for the device." + }, + "geo_country_alpha_2": { + "type": "string", + "description": "The ISO 3316 alpha-2 code for the country associated with the lat/long reported." + }, + "geo_horizontal_accuracy": { + "type": "number", + "format": "float", + "description": "The GPS horizontal accuracy.", + "title": "" + }, + "ipv4": { + "type": "string", + "description": "The ipv4 address assigned to the device. A device may have either or ipv4 and ipv6." + }, + "ipv6": { + "type": "string", + "description": "The ipv6 address assigned to the device. A device may have either or ipv4 and ipv6." + }, + "latitude": { + "type": "number", + "format": "float", + "description": "Units are degrees on the WGS 84 spheroid." + }, + "longitude": { + "type": "number", + "format": "float", + "description": "Units are degrees on the WGS 84 spheroid." + }, + "wifi_bssid": { + "type": "string", + "description": "The BSSID (MAC address) of the wifi router that the device communicated through." + }, + "wifi_ssid": { + "type": "string", + "description": "The SSID (name) of the wifi network that the device communicated through." + } + } + } + } + } + }, + "summary": "Retrieve Device Geo information for IPv4 address", + "description": "Retrieve Device Geo enrichment data for IPv4 address.", + "operationId": "IPV4_DEVICE_GEO", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "ipv4": { + "type": "string", + "description": "IPv4 address you want to enrich.", + "title": "IPv4 address" + } + }, + "description": "Request body (application/json).", + "required": [ + "ipv4" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/passivedns": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "Passive DNS information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cert_name": { + "type": "string", + "description": "The certificate provider name." + }, + "count": { + "type": "integer", + "format": "int32", + "description": "The passive dns count." + }, + "domain": { + "type": "string", + "description": "The domain of the passive dns information requested." + }, + "first_seen": { + "type": "string", + "description": "The first time this domain was seen." + }, + "ip": { + "type": "object", + "properties": { + "geo": { + "type": "object", + "properties": { + "city_name": { + "type": "string", + "description": "City of the ip organization." + }, + "country_iso_code": { + "type": "string", + "description": "Country ISO code of the ip organization." + }, + "country_name": { + "type": "string", + "description": "Country name of the ip organization." + }, + "location_latitude": { + "type": "string", + "description": "The latitude of the ip organization." + }, + "location_longitude": { + "type": "string", + "description": "The longitude of the ip organization." + }, + "postal_code": { + "type": "string", + "description": "The postalcode of the ip organization." + } + }, + "description": "The geo object." + }, + "ip": { + "type": "string", + "description": "IP of the organization." + }, + "isp": { + "type": "object", + "properties": { + "autonomous_system_number": { + "type": "string", + "description": "The ASN of the ip." + }, + "autonomous_system_organization": { + "type": "string", + "description": "The ASO of the ip." + }, + "ip_address": { + "type": "string", + "description": "The IP." + }, + "isp": { + "type": "string", + "description": "The Internet Service Provider." + }, + "organization": { + "type": "string", + "description": "The ISP organization." + } + }, + "description": "The isp object." + } + }, + "description": "The ip object." + }, + "ipv4": { + "type": "string", + "description": "The ipv4 address of the passive dns record." + }, + "ipv6": { + "type": "string", + "description": "The ipv6 address of the passive dns record." + }, + "last_seen": { + "type": "string", + "description": "The last time this domain was seen." + }, + "sha1": { + "type": "string", + "description": "The sha1." + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of pDNS providers which the data came from." + } + } + } + } + } + }, + "summary": "Retrieve Passive DNS information for domain", + "description": "Retrieve Passive DNS enrichment data for domain.", + "operationId": "DOMAIN_PASSIVE_DNS", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "description": "Domain you want to enrich.", + "title": "Domain" + } + }, + "description": "Request body (application/json).", + "required": [ + "domain" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/dynamicdns": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "Dynamic DNS information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "a_record": { + "type": "string", + "description": "The A record for the domain." + }, + "account": { + "type": "string", + "description": "The account holder name." + }, + "created": { + "type": "string", + "description": "The date which the domain was created." + }, + "created_ip": { + "type": "string", + "description": "The ip address of the account holder." + }, + "domain": { + "type": "string", + "description": "The domain associated with the dynamic dns information." + }, + "domain_creator_ip": { + "type": "string", + "description": "The ip address of the domain creator." + }, + "email": { + "type": "string", + "description": "The email address connected to the domain." + } + } + } + } + } + }, + "summary": "Retrieve Dynamic DNS information for IP address", + "description": "Retrieve Dynamic DNS enrichment data for IP address.", + "operationId": "IP_DYNAMIC_DNS", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "ip": { + "type": "string", + "description": "IPv4 address you want to enrich.", + "title": "IPv4 address" + } + }, + "description": "Request body (application/json).", + "required": [ + "ip" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/passivehash": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "Passive hash information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "description": "The domain of the passive hash information requested." + }, + "md5_count": { + "type": "integer", + "format": "int32", + "description": "The passive dns count." + } + } + } + } + } + }, + "description": "Retrieve Passive Hash enrichment data for IP address.", + "summary": "Retrieve Passive Hash information for IP address", + "operationId": "PASSIVE_HASH", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "ipv4": { + "type": "string", + "description": "IPv4 address you want to enrich.", + "title": "IPv4 address" + } + }, + "description": "Request body (application/json).", + "required": [ + "ipv4" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/ssl_certificate": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "SSL certificate information.", + "schema": { + "type": "object", + "properties": { + "related_count": { + "type": "integer", + "format": "int32", + "description": "The number of ip addresses connected to this certificate." + }, + "ssl_certs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ip": { + "type": "string", + "description": "The ip address associated with certificate." + }, + "ssl_cert": { + "type": "object", + "properties": { + "cert_key": { + "type": "string", + "description": "The certificate key (sha1)." + }, + "expire_date": { + "type": "string", + "description": "The expiry date of the certificate." + }, + "issue_date": { + "type": "string", + "description": "The issue date of the certificate." + }, + "issuer_commonName": { + "type": "string", + "description": "The common name that the certificate was issued from." + }, + "issuer_countryName": { + "type": "string", + "description": "The country ISO the certificate was issued from." + }, + "issuer_localityName": { + "type": "string", + "description": "The city where the issuer company is legally located." + }, + "issuer_organizationName": { + "type": "string", + "description": "The organization name that issued the certificate." + }, + "issuer_organizationalUnitName": { + "type": "string", + "description": "The organization unit name that issued the certificate." + }, + "issuer_stateOrProvinceName": { + "type": "string", + "description": "The issuer state or province." + }, + "md5": { + "type": "string", + "description": "The certificate MD5." + }, + "serial_number": { + "type": "number", + "format": "float", + "description": "The certificate serial number." + }, + "sha1": { + "type": "string", + "description": "The certificate sha1." + }, + "sha_256": { + "type": "string", + "description": "The certificate sha256." + }, + "sig_algo": { + "type": "string", + "description": "The certificate signature algorithm." + }, + "signature": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Signature split into multiple lines." + }, + "ssl_version": { + "type": "integer", + "format": "int32", + "description": "The SSL version." + }, + "subject_commonName": { + "type": "string", + "description": "The subject name that the certificate was issued to." + }, + "subject_countryName": { + "type": "string", + "description": "The country the certificate was issued to." + }, + "subject_localityName": { + "type": "string", + "description": "The city where the subject company is legally located." + }, + "subject_organizationName": { + "type": "string", + "description": "The organization name that recieved the certificate." + }, + "subject_organizationalUnitName": { + "type": "string", + "description": "The organization unit name that recieved the certificate." + }, + "subject_stateOrProvinceName": { + "type": "string", + "description": "The state or province name where the subject company is located." + }, + "timestamp": { + "type": "string", + "description": "The certificate date and time." + } + }, + "description": "The ssl_cert object." + } + } + }, + "description": "The ssl_certs object." + } + } + } + } + }, + "summary": "Retrieve SSL certificate information for IP address", + "description": "Retrieve SSL certificate enrichment data for IP address.", + "operationId": "SSL_CERTIFICATE", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "ip": { + "type": "string", + "description": "IPv4 address you want to enrich.", + "title": "IPv4 address" + } + }, + "description": "Request body (application/json).", + "required": [ + "ip" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/whois": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "Whois information.", + "schema": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "abuse_emails": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The abuse emails information." + }, + "address": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The address information." + }, + "city": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The city of the registrant." + }, + "country": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The country of the registrant." + }, + "data": { + "type": "string", + "description": "The data information." + }, + "datetime": { + "type": "string", + "description": "The datetime information." + }, + "domain": { + "type": "string", + "description": "The domain of the registrant." + }, + "domain_2tld": { + "type": "string", + "description": "The second-level domain of the registrant." + }, + "domain_created_datetime": { + "type": "string", + "description": "The date and time when the Whois record was created." + }, + "domain_expires_datetime": { + "type": "string", + "description": "The date and time when the Whois record expires." + }, + "domain_updated_datetime": { + "type": "string", + "description": "The date and time when the Whois record was last updated." + }, + "email": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The email information." + }, + "idn_name": { + "type": "string", + "description": "The international domain name information." + }, + "meta_data": { + "type": "string", + "description": "The metadata information." + }, + "name": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The contact name (registrant contact, administrative contact, technical contact, or abuse contact.)" + }, + "nameserver": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The nameserver domain." + }, + "organization": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The organization information." + }, + "phone": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The phone number of the registrant in e164 format." + }, + "registrar": { + "type": "string", + "description": "The domain registrar." + }, + "state": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The state where domain was registered." + }, + "whois_hash": { + "type": "string", + "description": "The hash information." + }, + "whois_id": { + "type": "string", + "description": "The whois id information." + }, + "whois_nameserver": { + "type": "array", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "description": "The nameserver\u2019s domain information." + }, + "domain_2tld": { + "type": "string", + "description": "The nameserver\u2019s domain_2tld information." + }, + "whois_related_nameserver_id": { + "type": "string", + "description": "The nameserver\u2019s Id Information." + } + } + }, + "description": "The whois_nameserver object." + }, + "whois_pii": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "The personal identity address information." + }, + "city": { + "type": "string", + "description": "The personal identity city information." + }, + "data": { + "type": "string", + "description": "The personal identity data information." + }, + "email": { + "type": "string", + "description": "The personal identity email information." + }, + "geo_country_alpha_2": { + "type": "string", + "description": "The personal identity country information." + }, + "name": { + "type": "string", + "description": "The personal identity name information." + }, + "organization": { + "type": "string", + "description": "The personal identity organization information." + }, + "phone_e164": { + "type": "string", + "description": "The personal identity Phone_e164 information." + }, + "state": { + "type": "string", + "description": "The personal identity state information." + }, + "whois_related_pii_id": { + "type": "string", + "description": "The personal identity Id information." + }, + "whois_related_type": { + "type": "string", + "description": "The personal identity related information." + } + } + }, + "description": "The whois_pii object." + } + } + }, + "description": "The items object." + }, + "source": { + "type": "string", + "description": "The source information." + }, + "total_count": { + "type": "integer", + "format": "int32", + "description": "The total count information." + } + } + } + } + }, + "summary": "Retrieve Current WHOIS information for domain", + "description": "Retrieve Current WHOIS enrichment data for domain.", + "operationId": "DOMAIN_WHOIS_CURRENT", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "description": "Domain you want to enrich.", + "title": "Domain" + }, + "current": { + "type": "boolean", + "description": "current.", + "title": "", + "x-ms-visibility": "internal", + "default": true + } + }, + "description": "Request body (application/json).", + "required": [ + "domain", + "current" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/device_geo/ipv6": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "A list of mobile geolocation information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "datetime": { + "type": "string", + "description": "A date-time string in RFC 3339 format." + }, + "device_geo_id": { + "type": "string", + "description": "Internal record ID." + }, + "device_user_agent": { + "type": "string", + "description": "The user agent string for the device." + }, + "geo_country_alpha_2": { + "type": "string", + "description": "The ISO 3316 alpha-2 code for the country associated with the lat/long reported." + }, + "geo_horizontal_accuracy": { + "type": "number", + "format": "float", + "description": "The GPS horizontal accuracy.", + "title": "" + }, + "ipv4": { + "type": "string", + "description": "The ipv4 address assigned to the device. A device may have either or ipv4 and ipv6." + }, + "ipv6": { + "type": "string", + "description": "The ipv6 address assigned to the device. A device may have either or ipv4 and ipv6." + }, + "latitude": { + "type": "number", + "format": "float", + "description": "Units are degrees on the WGS 84 spheroid." + }, + "longitude": { + "type": "number", + "format": "float", + "description": "Units are degrees on the WGS 84 spheroid." + }, + "wifi_bssid": { + "type": "string", + "description": "The BSSID (MAC address) of the wifi router that the device communicated through." + }, + "wifi_ssid": { + "type": "string", + "description": "The SSID (name) of the wifi network that the device communicated through." + } + } + } + } + } + }, + "summary": "Retrieve Device Geo information for IPv6 address", + "description": "Retrieve Device Geo enrichment data for IPv6 address.", + "operationId": "IPV6_DEVICE_GEO", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "ipv6": { + "type": "string", + "description": "IPv6 address you want to enrich.", + "title": "IPv6 address" + } + }, + "description": "Request body (application/json).", + "required": [ + "ipv6" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/passivedns/ip": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "Passive DNS information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cert_name": { + "type": "string", + "description": "The certificate provider name." + }, + "count": { + "type": "integer", + "format": "int32", + "description": "The passive dns count." + }, + "domain": { + "type": "string", + "description": "The domain of the passive dns information requested." + }, + "first_seen": { + "type": "string", + "description": "The first time this domain was seen." + }, + "ip": { + "type": "object", + "properties": { + "geo": { + "type": "object", + "properties": { + "city_name": { + "type": "string", + "description": "City of the ip organization." + }, + "country_iso_code": { + "type": "string", + "description": "Country ISO code of the ip organization." + }, + "country_name": { + "type": "string", + "description": "Country name of the ip organization." + }, + "location_latitude": { + "type": "string", + "description": "The latitude of the ip organization." + }, + "location_longitude": { + "type": "string", + "description": "The longitude of the ip organization." + }, + "postal_code": { + "type": "string", + "description": "The postalcode of the ip organization." + } + }, + "description": "The geo object." + }, + "ip": { + "type": "string", + "description": "IP of the organization." + }, + "isp": { + "type": "object", + "properties": { + "autonomous_system_number": { + "type": "string", + "description": "The ASN of the ip." + }, + "autonomous_system_organization": { + "type": "string", + "description": "The ASO of the ip." + }, + "ip_address": { + "type": "string", + "description": "The IP." + }, + "isp": { + "type": "string", + "description": "The Internet Service Provider." + }, + "organization": { + "type": "string", + "description": "The ISP organization." + } + }, + "description": "The isp object." + } + }, + "description": "The ip object." + }, + "ipv4": { + "type": "string", + "description": "The ipv4 address of the passive dns record." + }, + "ipv6": { + "type": "string", + "description": "The ipv6 address of the passive dns record." + }, + "last_seen": { + "type": "string", + "description": "The last time this domain was seen." + }, + "sha1": { + "type": "string", + "description": "The sha1." + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of pDNS providers which the data came from." + } + } + } + } + } + }, + "summary": "Retrieve Passive DNS information for IP address", + "description": "Retrieve Passive DNS enrichment data for IP address.", + "operationId": "IP_PASSIVE_DNS", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "ipv4": { + "type": "string", + "description": "IPv4 address you want to enrich.", + "title": "IPv4 address" + } + }, + "description": "Request body (application/json).", + "required": [ + "ipv4" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/dynamicdns/email": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "Dynamic DNS information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "a_record": { + "type": "string", + "description": "The A record for the domain." + }, + "account": { + "type": "string", + "description": "The account holder name." + }, + "created": { + "type": "string", + "description": "The date which the domain was created." + }, + "created_ip": { + "type": "string", + "description": "The ip address of the account holder." + }, + "domain": { + "type": "string", + "description": "The domain associated with the dynamic dns information." + }, + "domain_creator_ip": { + "type": "string", + "description": "The ip address of the domain creator." + }, + "email": { + "type": "string", + "description": "The email address connected to the domain." + } + } + } + } + } + }, + "summary": "Retrieve Dynamic DNS information for email address", + "description": "Retrieve Dynamic DNS enrichment data for email address.", + "operationId": "EMAIL_DYNAMIC_DNS", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email address you want to enrich.", + "title": "Email address" + } + }, + "description": "Request body (application/json).", + "required": [ + "email" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/whois/domain": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "The whois historic information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The address information." + }, + "city": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The city information." + }, + "country": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The country information." + }, + "data": { + "type": "string", + "description": "The data information." + }, + "datetime": { + "type": "string", + "description": "The datetime information." + }, + "domain": { + "type": "string", + "description": "The domain of the registrant." + }, + "domain_2tld": { + "type": "string", + "description": "The second-level domain of the registrant." + }, + "domain_created_datetime": { + "type": "string", + "description": "The date and time when the whois record was created." + }, + "domain_expires_datetime": { + "type": "string", + "description": "The date and time when the whois record expires." + }, + "domain_updated_datetime": { + "type": "string", + "description": "The date and time when the whois record was last updated." + }, + "email": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The email information." + }, + "idn_name": { + "type": "string", + "description": "The international domain name." + }, + "meta_data": { + "type": "string", + "description": "The metadata information." + }, + "name": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The name information." + }, + "nameserver": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The nameserver information." + }, + "phone": { + "type": "array", + "items": { + "type": "object", + "properties": { + "phone": { + "type": "string", + "description": "The phone number registrant contact in e164 format." + }, + "phone_info": { + "type": "object", + "properties": { + "carrier": { + "type": "string", + "description": "Phone number carrier." + }, + "country": { + "type": "string", + "description": "Phone number country." + }, + "geo": { + "type": "string", + "description": "Phone number geo Can be city or province or region or country." + } + }, + "description": "The phone_info object." + } + } + }, + "description": "Array of object, The phone number registrant contact in e164 format along with geo info." + }, + "privacy_punch": { + "type": "boolean", + "description": "True if this record has additional information bypassing privacy protect." + }, + "registrar": { + "type": "string", + "description": "The domain registrar." + }, + "whois_hash": { + "type": "string", + "description": "The hash information." + }, + "whois_id": { + "type": "string", + "description": "The whois id information." + } + } + } + } + } + }, + "summary": "Retrieve Historic WHOIS information for domain", + "description": "Retrieve Historic WHOIS enrichment data for domain.", + "operationId": "DOMAIN_WHOIS_HISTORIC", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "description": "Domain you want to enrich.", + "title": "Domain" + } + }, + "description": "Request body (application/json).", + "required": [ + "domain" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/whois/email": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "The whois historic information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The address information." + }, + "city": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The city information." + }, + "country": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The country information." + }, + "data": { + "type": "string", + "description": "The data information." + }, + "datetime": { + "type": "string", + "description": "The datetime information." + }, + "domain": { + "type": "string", + "description": "The domain of the registrant." + }, + "domain_2tld": { + "type": "string", + "description": "The second-level domain of the registrant." + }, + "domain_created_datetime": { + "type": "string", + "description": "The date and time when the whois record was created." + }, + "domain_expires_datetime": { + "type": "string", + "description": "The date and time when the whois record expires." + }, + "domain_updated_datetime": { + "type": "string", + "description": "The date and time when the whois record was last updated." + }, + "email": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The email information." + }, + "idn_name": { + "type": "string", + "description": "The international domain name." + }, + "meta_data": { + "type": "string", + "description": "The metadata information." + }, + "name": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The name information." + }, + "nameserver": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The nameserver information." + }, + "phone": { + "type": "array", + "items": { + "type": "object", + "properties": { + "phone": { + "type": "string", + "description": "The phone number registrant contact in e164 format." + }, + "phone_info": { + "type": "object", + "properties": { + "carrier": { + "type": "string", + "description": "Phone number carrier." + }, + "country": { + "type": "string", + "description": "Phone number country." + }, + "geo": { + "type": "string", + "description": "Phone number geo Can be city or province or region or country." + } + }, + "description": "The phone_info object." + } + } + }, + "description": "Array of object, The phone number registrant contact in e164 format along with geo info." + }, + "privacy_punch": { + "type": "boolean", + "description": "True if this record has additional information bypassing privacy protect." + }, + "registrar": { + "type": "string", + "description": "The domain registrar." + }, + "whois_hash": { + "type": "string", + "description": "The hash information." + }, + "whois_id": { + "type": "string", + "description": "The whois id information." + } + } + } + } + } + }, + "summary": "Retrieve Historic WHOIS information for email address", + "description": "Retrieve Historic WHOIS enrichment data for email address.", + "operationId": "EMAIL_WHOIS_HISTORIC", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email address you want to enrich.", + "title": "Email address" + } + }, + "description": "Request body (application/json).", + "required": [ + "email" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + }, + "/whois/phone": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "The whois historic information.", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The address information." + }, + "city": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The city information." + }, + "country": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The country information." + }, + "data": { + "type": "string", + "description": "The data information." + }, + "datetime": { + "type": "string", + "description": "The datetime information." + }, + "domain": { + "type": "string", + "description": "The domain of the registrant." + }, + "domain_2tld": { + "type": "string", + "description": "The second-level domain of the registrant." + }, + "domain_created_datetime": { + "type": "string", + "description": "The date and time when the whois record was created." + }, + "domain_expires_datetime": { + "type": "string", + "description": "The date and time when the whois record expires." + }, + "domain_updated_datetime": { + "type": "string", + "description": "The date and time when the whois record was last updated." + }, + "email": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The email information" + }, + "idn_name": { + "type": "string", + "description": "The international domain name." + }, + "meta_data": { + "type": "string", + "description": "The metadata information." + }, + "name": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The name information." + }, + "nameserver": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The nameserver information." + }, + "phone": { + "type": "array", + "items": { + "type": "object", + "properties": { + "phone": { + "type": "string", + "description": "The phone number registrant contact in e164 format." + }, + "phone_info": { + "type": "object", + "properties": { + "carrier": { + "type": "string", + "description": "Phone number carrier." + }, + "country": { + "type": "string", + "description": "Phone number country." + }, + "geo": { + "type": "string", + "description": "Phone number geo Can be city or province or region or country." + } + }, + "description": "The phone_info object." + } + } + }, + "description": "Array of object, The phone number registrant contact in e164 format along with geo info." + }, + "privacy_punch": { + "type": "boolean", + "description": "True if this record has additional information bypassing privacy protect." + }, + "registrar": { + "type": "string", + "description": "The domain registrar." + }, + "whois_hash": { + "type": "string", + "description": "The hash information." + }, + "whois_id": { + "type": "string", + "description": "The whois id information." + } + } + } + } + } + }, + "summary": "Retrieve Historic WHOIS information for phone number", + "description": "Retrieve Historic WHOIS enrichment data for phone number.", + "operationId": "PHONE_WHOIS_HISTORIC", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "applied_filters": { + "type": "object", + "properties": { + "phone": { + "type": "string", + "description": "Phone number you want to enrich. ( e164 format. Eg: ( +41585855634 ) )", + "title": "Phone number" + } + }, + "description": "Request body (application/json).", + "required": [ + "phone" + ] + } + }, + "required": [ + "applied_filters" + ] + } + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.hyas.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.hyas.com/privacy-statement/" + }, + { + "propertyName": "Categories", + "propertyValue": "Security;Website" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "X-API-Key" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/HYAS Insight/apiProperties.json b/certified-connectors/HYAS Insight/apiProperties.json new file mode 100644 index 000000000..3789e85d9 --- /dev/null +++ b/certified-connectors/HYAS Insight/apiProperties.json @@ -0,0 +1,91 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "HYAS Insight API Key", + "description": "The HYAS Insight API Key for this api", + "tooltip": "Provide your HYAS Insight API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#fffff9", + "capabilities": [], + "policyTemplateInstances": [ + { + "templateId": "routerequesttoendpoint", + "title": "IPV6_DEVICE_GEO_POLICY", + "parameters": { + "x-ms-apimTemplateParameter.newPath": "/device_geo", + "x-ms-apimTemplateParameter.httpMethod": "@Request.OriginalHTTPMethod", + "x-ms-apimTemplate-operationName": [ + "IPV6_DEVICE_GEO" + ] + } + }, + { + "templateId": "routerequesttoendpoint", + "title": "IP_PASSIVE_POLICY", + "parameters": { + "x-ms-apimTemplateParameter.newPath": "/passivedns", + "x-ms-apimTemplateParameter.httpMethod": "@Request.OriginalHTTPMethod", + "x-ms-apimTemplate-operationName": [ + "IP_PASSIVE_DNS" + ] + } + }, + { + "templateId": "routerequesttoendpoint", + "title": "EMAIL_DYNAMIC_POLICY", + "parameters": { + "x-ms-apimTemplateParameter.newPath": "/dynamicdns", + "x-ms-apimTemplateParameter.httpMethod": "@Request.OriginalHTTPMethod", + "x-ms-apimTemplate-operationName": [ + "EMAIL_DYNAMIC_DNS" + ] + } + }, + { + "templateId": "routerequesttoendpoint", + "title": "DOMAIN_WHOIS", + "parameters": { + "x-ms-apimTemplateParameter.newPath": "/whois", + "x-ms-apimTemplateParameter.httpMethod": "@Request.OriginalHTTPMethod", + "x-ms-apimTemplate-operationName": [ + "DOMAIN_WHOIS_HISTORIC" + ] + } + }, + { + "templateId": "routerequesttoendpoint", + "title": "EMAIL_WHOIS", + "parameters": { + "x-ms-apimTemplateParameter.newPath": "/whois", + "x-ms-apimTemplateParameter.httpMethod": "@Request.OriginalHTTPMethod", + "x-ms-apimTemplate-operationName": [ + "EMAIL_WHOIS_HISTORIC" + ] + } + }, + { + "templateId": "routerequesttoendpoint", + "title": "PHONE_WHOIS", + "parameters": { + "x-ms-apimTemplateParameter.newPath": "/whois", + "x-ms-apimTemplateParameter.httpMethod": "@Request.OriginalHTTPMethod", + "x-ms-apimTemplate-operationName": [ + "PHONE_WHOIS_HISTORIC" + ] + } + } + ], + "publisher": "HYAS Infosec", + "stackOwner": "HYAS Infosec" + } +} From df75d94550b01cdb17b51383417d9d3d0116c741 Mon Sep 17 00:00:00 2001 From: Matt Beard Date: Thu, 10 Sep 2020 19:13:25 +0100 Subject: [PATCH 056/347] Updated after feedback - keep open source the same (#442) * Updated Data8 connector * Updated after feedback from activity control --- .../Data8/apiDefinition.swagger.json | 2324 ++++++++--------- 1 file changed, 1127 insertions(+), 1197 deletions(-) diff --git a/certified-connectors/Data8/apiDefinition.swagger.json b/certified-connectors/Data8/apiDefinition.swagger.json index 5b4992d7b..48d1dcfe1 100644 --- a/certified-connectors/Data8/apiDefinition.swagger.json +++ b/certified-connectors/Data8/apiDefinition.swagger.json @@ -1,888 +1,362 @@ { - "swagger": "2.0", - "info": { - "version": "1.0.0", - "title": "Data8 Data Enrichment", - "description": "Data8 helps you build confidence in your data. We can save you money by cleaning and enriching both your existing data, as well as ensuring only the highest quality data goes in at the point of entry, leaving you to concentrate on targeting and communicating to the right customers.", - "contact": { - "name" : "Technical Helpdesk", - "url" : "https://www.data-8.co.uk", - "email" : "helpdesk@data-8.co.uk" - } - }, - "host": "webservices.data-8.co.uk", - "basePath": "/", - "schemes": [ - "https" - ], - "consumes": [], - "produces": [ - "application/json" - ], - "paths": { - "/SalaciousName/IsUnusableName.json": { - "post": { - "consumes" : [ - "application/json" - ], - "summary": "Check Usable Name", - "description": "Using this action, you can check if a name is a real usable name or whether it is salacious, random or blank.", - "operationId": "IsUsableName", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "object", - "properties": { - "Title": { - "type": "string", - "description": "The title of the name", - "title": "Title" - }, - "Forename": { - "type": "string", - "description": "The first name of the full name", - "title": "First name", - "x-ms-visibility": "" - }, - "MiddleName": { - "type": "string", - "description": "The middle name of the full name", - "title": "Middle name" - }, - "Surname": { - "type": "string", - "title": "Last name", - "description": "The last name of the full name" - } - }, - "description": "name" - } - } - } - } - ], - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "Status": { - "type": "object", - "properties": { - "Success": { - "type": "boolean", - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "x-ms-visibility": "" - }, - "ErrorMessage": { - "type": "string", - "description": "Returned Error Message, if any", - "title": "Error Message", - "x-ms-visibility": "" - }, - "CreditsRemaining": { - "type": "number", - "format": "float", - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "x-ms-visibility": "" - } - }, - "description": "Status" - }, - "Result": { - "type": "string", - "description": "A blank value indiciates the name is a usable name. If a value is returned it will be one of the following: \"IncompleteName\", \"RandomName\" or \"SalaciousName\"", - "title": "Result", - "x-ms-visibility": "", - "enum": [ - "", - "IncompleteName", - "RandomName", - "SalaciousName" - ] - } - } - } - } - } + "swagger": "2.0", + "info": { + "version": "1.0.1", + "title": "Data8 Data Enrichment", + "description": "Data8 helps you build confidence in your data. We can save you money by cleaning and enriching both your existing data, as well as ensuring only the highest quality data goes in at the point of entry, leaving you to concentrate on targeting and communicating to the right customers.", + "contact": { + "name" : "Technical Helpdesk", + "url" : "https://www.data-8.co.uk", + "email" : "helpdesk@data-8.co.uk" } }, - "/TPS/IsCallable.json": { - "post": { - "consumes" : [ - "application/json" - ], - "summary": "TPS Check", - "description": "Checks if a telephone number is registered on the TPS or not.", - "operationId": "IsCallableTPS", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "number": { - "type": "string", - "description": "The telephone number you want to TPS check", - "title": "Telephone Number", - "x-ms-visibility": "" - } - }, - "required": [ - "number" - ] - }, - "required": true - } - ], - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "Status": { - "type": "object", - "properties": { - "Success": { - "type": "string", - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "x-ms-visibility": "" - }, - "ErrorMessage": { - "type": "string", - "description": "Returned Error Message, if any", - "title": "Error Message", - "x-ms-visibility": "" - }, - "CreditsRemaining": { - "type": "number", - "format": "float", - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "x-ms-visibility": "" - } - }, - "description": "Status" - }, - "Callable": { - "type": "boolean", - "description": "Returns a boolean value letting you know if it's callable. If false, the number is currently on the TPS.", - "title": "Is Callable", - "x-ms-visibility": "" - }, - "TelephoneNumber": { - "type": "string", - "description": "Returns the telephone number if callable, null if not.", - "title": "Telephone Number", - "x-ms-visibility": "" - } - } - } - } - } - } - }, - "/CTPS/IsCallable.json": { - "post": { - "consumes" : [ - "application/json" - ], - "summary": "CTPS Check", - "description": "Checks if a telephone number is registered on the CTPS or not.", - "operationId": "IsCallableCTPS", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "number": { - "type": "string", - "description": "The telephone number you wish to CTPS check", - "title": "Telephone Number", - "x-ms-visibility": "" - } - }, - "required": [ - "number" - ] - }, - "required": true - } - ], - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "Status": { - "type": "object", - "properties": { - "Success": { - "type": "string", - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "x-ms-visibility": "" - }, - "ErrorMessage": { - "type": "string", - "description": "Returned Error Message, if any", - "title": "Error Message", - "x-ms-visibility": "" - }, - "CreditsRemaining": { - "type": "number", - "format": "float", - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "x-ms-visibility": "" - } - }, - "description": "Status" - }, - "Callable": { - "type": "boolean", - "description": "Returns a boolean value letting you know if it's callable. If false, the number is currently on the CTPS.", - "title": "Is Callable", - "x-ms-visibility": "" - }, - "TelephoneNumber": { - "type": "string", - "description": "If populated, the telephone number is callable and null if not", - "title": "Telephone Number", - "x-ms-visibility": "" - } - } - } - } - } - } - }, - "/BankAccountValidation/IsValid.json": { - "post": { - "consumes" : [ - "application/json" - ], - "summary": "Validate Bank Account Information", - "description": "Check if a sort code and bank account number are valid.", - "operationId": "IsValidBankAccount", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "sortCode": { - "type": "string", - "description": "The sort code you wish to validate", - "title": "Sort Code", - "x-ms-visibility": "" - }, - "bankAccountNumber": { - "type": "string", - "description": "The bank account number you wish to validate", - "title": "Bank Account Number", - "x-ms-visibility": "" - } - }, - "required": [ - "sortCode" - ] - }, - "required": true - } - ], - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "Status": { - "type": "object", - "properties": { - "Success": { - "type": "string", - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "x-ms-visibility": "" - }, - "ErrorMessage": { - "type": "string", - "description": "Returned Error Message, if any", - "title": "Error Message", - "x-ms-visibility": "" - }, - "CreditsRemaining": { - "type": "number", - "format": "float", - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "x-ms-visibility": "" - } - }, - "description": "Status" - }, - "Valid": { - "type": "string", - "title": "Valid", - "description": "Indicates if the incoming sort code and bank account number could be validated." - }, - "SortCode": { - "type": "string", - "description": "The sort code that has been validated.", - "title": "Sort Code", - "x-ms-visibility": "" - }, - "AccountNumber": { - "type": "string", - "description": "The account number that has been validated.", - "title": "Account Number", - "x-ms-visibility": "" - }, - "BICCode": { - "type": "string", - "description": "The BIC code of the bank branch indicated by the sort code.", - "title": "BIC Code", - "x-ms-visibility": "" - }, - "IBAN": { - "type": "string", - "title": "IBAN", - "description": "The IBAN code of the bank account indicated by the sort code and account number." - }, - "BranchName": { - "type": "string", - "description": "The name of the bank branch indicated by the sort code.", - "title": "Branch Name", - "x-ms-visibility": "" - }, - "ShortBankName": { - "type": "string", - "description": "A short name for the bank indicated by the sort code.", - "title": "Short Bank Name", - "x-ms-visibility": "" - }, - "FullBankName": { - "type": "string", - "description": "The full name for the bank indicated by the sort code.", - "title": "Full Bank Name", - "x-ms-visibility": "" - }, - "Address": { - "type": "object", - "properties": { - "Address": { - "type": "object", - "properties": { - "Lines": { - "type": "array", - "items": { - "type": "string", - "title": "Address Lines", - "x-ms-visibility": "" - }, - "description": "Lines" - } + "host": "webservices.data-8.co.uk", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], + "paths": { + "/SalaciousName/IsUnusableName.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Check Usable Name", + "description": "Using this action, you can check if a name is a real usable name or whether it is salacious, random or blank.", + "operationId": "IsUsableName", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "object", + "properties": { + "Title": { + "type": "string", + "description": "The title of the name", + "title": "Title" }, - "title": "Address", - "description": "The address of the bank branch indicated by the sort code." - } + "Forename": { + "type": "string", + "description": "The first name of the full name", + "title": "First name" + }, + "MiddleName": { + "type": "string", + "description": "The middle name of the full name", + "title": "Middle name" + }, + "Surname": { + "type": "string", + "title": "Last name", + "description": "The last name of the full name" + } + }, + "description": "name" + } + } + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining" + } + }, + "description": "Status" }, - "description": "Address" - }, - "AcceptsBACSPayments": { - "type": "boolean", - "description": "Indicates if the bank branch can accept payments made through the BACS system.", - "title": "Accepts BACS Payments", - "x-ms-visibility": "" - }, - "AcceptsDirectDebitTransactions": { - "type": "boolean", - "description": "Indicates if the bank branch can accept direct debit payments.", - "title": "Accepts Direct Debit Transactions", - "x-ms-visibility": "" - }, - "AcceptsDirectCreditTransactions": { - "type": "boolean", - "description": "Indicates if the bank branch can accept direct credit payments.", - "title": "Accepts Direct Credit Transactions", - "x-ms-visibility": "" - }, - "AcceptsUnpaidChequeClaimTransactions": { - "type": "boolean", - "description": "Indicates if the bank branch can accept claims for unpaid cheques.", - "title": "Accepts Unpaid Cheque Claim Transactions", - "x-ms-visibility": "" - }, - "AcceptsBuildingSocietyCreditTransactions": { - "type": "boolean", - "description": "Indicates if the bank branch can accept credits from building societies.", - "title": "Accepts Building Society Credit Transactions", - "x-ms-visibility": "" - }, - "AcceptsDividendInterestPaymentTransactions": { - "type": "boolean", - "description": "Indicates if the bank branch can accept dividend interest payments.", - "title": "Accepts Dividend Interest Payment Transactions", - "x-ms-visibility": "" - }, - "AcceptsDirectDebitInstructionTransactions": { - "type": "boolean", - "description": "Indicates if the bank branch can accept direct debit instructions.", - "title": "Accepts Direct Debit Instruction Transactions", - "x-ms-visibility": "" - }, - "AcceptsCHAPSPayments": { - "type": "boolean", - "description": "Indicates if the bank branch can accept payments made through the CHAPS system.", - "title": "Accepts CHAPS Payments", - "x-ms-visibility": "" - }, - "AcceptsCheques": { - "type": "boolean", - "description": "Indicates if the bank branch can accept payments made by cheque.", - "title": "Accepts Cheques", - "x-ms-visibility": "" - }, - "AcceptsFasterPayments": { - "type": "boolean", - "description": "", - "title": "Accepts Faster Payments" + "Result": { + "type": "string", + "description": "A blank value indiciates the name is a usable name. If a value is returned it will be one of the following: \"IncompleteName\", \"RandomName\" or \"SalaciousName\"", + "title": "Result", + "enum": [ + "", + "IncompleteName", + "RandomName", + "SalaciousName" + ] + } } } } } } - } - }, - "/EmailValidation/IsValid.json": { - "post": { - "consumes" : [ - "application/json" - ], - "summary": "Validate Email Address", - "description": "Checks to see if an inputted email address is valid to receive email", - "operationId": "IsValidEmail", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "email": { - "type": "string", - "description": "The email address you wish to validate", - "title": "Email Address", - "x-ms-visibility": "" - }, - "level": { - "type": "string", - "description": "The level to which you wish to validate - please check https://www.data-8.co.uk/resources/support/service-documentation/email-validation/reference/isvalid for more information", - "title": "Validation Level", - "x-ms-visibility": "", - "enum": [ - "Syntax", - "MX", - "Server", - "Address" - ] - } - }, - "required": [ - "email", - "level" - ] - } - } - ], - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "Status": { - "type": "object", - "properties": { - "Success": { - "type": "string", - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "x-ms-visibility": "" - }, - "ErrorMessage": { - "type": "string", - "description": "Returned Error Message, if any", - "title": "Error Message", - "x-ms-visibility": "" - }, - "CreditsRemaining": { - "type": "number", - "format": "float", - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "x-ms-visibility": "" - } + }, + "/TPS/IsCallable.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "TPS Check", + "description": "Checks if a telephone number is registered on the TPS or not.", + "operationId": "IsCallableTPS", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The telephone number you want to TPS check", + "title": "Telephone Number" } }, - "Result": { - "type": "string", - "description": "Contains a status code indicating if the email address could be validated. For more information on the possible status code, please read https://www.data-8.co.uk/resources/support/service-documentation/email-validation/reference/isvalid", - "title": "Result", - "x-ms-visibility": "" - } - } - } - } - } - } - }, - "/InternationalTelephoneValidation/IsValid.json": { - "post": { - "consumes" : [ - "application/json" - ], - "summary": "Validate Telephone Number", - "description": "Checks to see if an inputted email address is valid to receive email", - "operationId": "IsValidTelephone", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "telephoneNumber": { - "type": "string", - "description": "The number you want to validate", - "title": "Telephone Number", - "x-ms-visibility": "" - }, - "defaultCountry": { - "type": "string", - "description": "Formatted as numbers i.e. 44 for UK", - "title": "Default Country Code", - "x-ms-visibility": "" - }, - "options": { - "type": "object", - "properties": { - "UseLineValidation": { - "type": "boolean", - "description": "If set to true then the service will use Data8 LandlineValidation on any number it recognises as a UK landline number and InternationalTelephoneValidation on all other numbers. Any validation call will be debited either an InternationalTelephoneValidation credit or a LandlineValidation credit accordingly so please ensure you have LandlineValidation credits available before using this option. The option defaults to false.", - "title": "Use Line Validation", - "x-ms-visibility": "" - }, - "UseMobileValidation": { - "type": "boolean", - "description": "If set to true then the service will use Data8 MobileValidation on any number it recognises as a mobile number and InternationalTelephoneValidation on all other numbers. Any validation call will be debited either an InternationalTelephoneValidation credit or a MobileValidation credit accordingly so please ensure you have MobileValidation credits available before using this option. The option defaults to false.", - "title": "Use Mobile Validation", - "x-ms-visibility": "" - } - }, - "description": "options" - } + "required": [ + "number" + ] }, - "required": [ - "telephoneNumber", - "defaultCountry" - ] + "required": true } - } - ], - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "Status": { - "type": "object", - "properties": { - "Success": { - "type": "string", - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "x-ms-visibility": "" - }, - "ErrorMessage": { - "type": "string", - "description": "Returned Error Message, if any", - "title": "Error Message", - "x-ms-visibility": "" - }, - "CreditsRemaining": { - "type": "number", - "format": "float", - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "x-ms-visibility": "" - } - }, - "description": "Status" - }, - "Result": { - "type": "object", - "properties": { - "TelephoneNumber": { - "type": "string", - "description": "The inputted telephone number formatted", - "title": "Telephone Number", - "x-ms-visibility": "" - }, - "ValidationResult": { - "type": "string", - "description": "The simple result for the validation of the telephone number", - "title": "Validation Result", - "x-ms-visibility": "" - }, - "ValidationLevel": { - "type": "string", - "description": "The level of validation found for the phone number.", - "title": "Validation Level", - "x-ms-visibility": "" - }, - "NumberType": { - "type": "string", - "description": "Specifies the type of the number provided i.e. Landline or Mobile", - "title": "Number Type", - "x-ms-visibility": "" - }, - "Location": { - "type": "string", - "description": "Current location of the telephone number if available", - "title": "Location", - "x-ms-visibility": "" - }, - "Provider": { - "type": "string", - "description": "The network provider of the telephone number", - "title": "Provider", - "x-ms-visibility": "" - }, - "CountryCode": { - "type": "string", - "description": "Country ISO2 code of the telephone number", - "title": "Country Code", - "x-ms-visibility": "" - }, - "CountryName": { - "type": "string", - "description": "Country name of the telephone number", - "title": "Country Name", - "x-ms-visibility": "" - } - }, - "description": "Result" - } - } - } - } - } - } - }, - "/Postcoder/CleanAddress.json": { - "post": { - "consumes" : [ - "application/json" - ], - "summary": "Clean Address", - "description": "Formats, verifies and corrects a given address into a full formatted address.", - "operationId": "CleanAddress", - "parameters": [ - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "address": { - "type": "object", - "properties": { - "Lines": { - "type": "array", - "items": { + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success" + }, + "ErrorMessage": { "type": "string", - "description": "", - "title": "Address Lines", - "x-ms-visibility": "" + "description": "Returned Error Message, if any", + "title": "Error Message" }, - "description": "Lines" - } + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining" + } + }, + "description": "Status" }, - "description": "address", - "required": [ - "Lines" - ] - }, - "options": { - "type": "object", - "properties": { - "DefaultCountryCode": { - "type": "string", - "description": "an ISO 2 character code for the country to assume the address is in unless otherwise specified. This defaults to GB.", - "title": "Default Country Code", - "x-ms-visibility": "" - }, - "DetectCountry": { - "type": "boolean", - "description": "Set to true to attempt to automatically detect the country from the provided address information, possibly overriding the default country", - "title": "Auto Detect Country", - "x-ms-visibility": "" - }, - "Country": { - "type": "string", - "description": "If DetectCountry is set to true, this is taken as additional user input alongside the address to influence the country detection function. The format of this is not enforced, so could be provided as \"US\", \"USA\" or \"United States\"", - "title": "Country", - "x-ms-visibility": "" - }, - "IncludeCountry": { - "type": "boolean", - "description": "Includes the CountryName field in the main part of the result", - "title": "Include Country", - "x-ms-visibility": "" - } + "Callable": { + "type": "boolean", + "description": "Returns a boolean value letting you know if it's callable. If false, the number is currently on the TPS.", + "title": "Is Callable" }, - "description": "options" - } - }, - "required": [ - "address" - ] - } - } - ], - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "Status": { - "type": "object", - "properties": { - "Success": { - "type": "string", - "description": "Flag to determine if the request to Data8 succeeded, regardless of result", - "title": "Success", - "x-ms-visibility": "" - }, - "ErrorMessage": { - "type": "string", - "description": "Returned Error Message, if any", - "title": "Error Message", - "x-ms-visibility": "" - }, - "CreditsRemaining": { - "type": "number", - "format": "float", - "description": "Data8 Credits Remaining for the called service", - "title": "Credits Remaining", - "x-ms-visibility": "" - } - }, - "description": "Status" - }, - "Result": { - "type": "object", - "properties": { - "Address": { - "type": "object", - "properties": { - "Lines": { - "type": "array", - "items": { - "type": "string", - "title": "Address Lines", - "x-ms-visibility": "" - }, - "description": "Lines" - } - }, - "description": "Address", - "title": "Address Lines" - } - }, - "description": "Result" - }, - "MatchLevel": { - "type": "string", - "description": "Contains a MatchLevel to indicate how well the address matched to PAF. Possible values are OK_Unchanged, OK_Corrected, NOK_Building, NOK_Street, NOK_Town, NOK_NoMatch", - "title": "Match Level", - "x-ms-visibility": "" - }, - "CountryName": { - "type": "string", - "description": "Contains the name of the country the address is in.", - "title": "Country Name", - "x-ms-visibility": "" + "TelephoneNumber": { + "type": "string", + "description": "Returns the telephone number if callable, null if not.", + "title": "Telephone Number" + } } } } } } - } - }, - "/AddressCapture/GetFullAddress.json": { - "post": { - "consumes" : [ - "application/json" - ], - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "Status": { - "type": "object", - "properties": { - "Success": { - "type": "boolean", - "description": "Success" + }, + "/CTPS/IsCallable.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "CTPS Check", + "description": "Checks if a telephone number is registered on the CTPS or not.", + "operationId": "IsCallableCTPS", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The telephone number you wish to CTPS check", + "title": "Telephone Number" + } + }, + "required": [ + "number" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining" + } }, - "ErrorMessage": { - "type": "string", - "description": "Error Message (if applicable)" - }, - "CreditsRemaining": { - "type": "number", - "format": "float", - "description": "Credits Remaining", - "title": "" - } + "description": "Status" }, - "description": "Status" + "Callable": { + "type": "boolean", + "description": "Returns a boolean value letting you know if it's callable. If false, the number is currently on the CTPS.", + "title": "Is Callable" + }, + "TelephoneNumber": { + "type": "string", + "description": "If populated, the telephone number is callable and null if not", + "title": "Telephone Number" + } + } + } + } + } + } + }, + "/BankAccountValidation/IsValid.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Validate Bank Account Information", + "description": "Check if a sort code and bank account number are valid.", + "operationId": "IsValidBankAccount", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "sortCode": { + "type": "string", + "description": "The sort code you wish to validate", + "title": "Sort Code" + }, + "bankAccountNumber": { + "type": "string", + "description": "The bank account number you wish to validate", + "title": "Bank Account Number" + } }, - "ResultCount": { - "type": "integer", - "format": "int32", - "description": "", - "title": "Contains the number of addresses in the Results field. This field is only populated if the ReturnResultCount option is set to true" - }, - "Results": { - "type": "array", - "items": { + "required": [ + "sortCode" + ] + }, + "required": true + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining" + } + }, + "description": "Status" + }, + "Valid": { + "type": "string", + "title": "Valid", + "description": "Indicates if the incoming sort code and bank account number could be validated." + }, + "SortCode": { + "type": "string", + "description": "The sort code that has been validated.", + "title": "Sort Code" + }, + "AccountNumber": { + "type": "string", + "description": "The account number that has been validated.", + "title": "Account Number" + }, + "BICCode": { + "type": "string", + "description": "The BIC code of the bank branch indicated by the sort code.", + "title": "BIC Code" + }, + "IBAN": { + "type": "string", + "title": "IBAN", + "description": "The IBAN code of the bank account indicated by the sort code and account number." + }, + "BranchName": { + "type": "string", + "description": "The name of the bank branch indicated by the sort code.", + "title": "Branch Name" + }, + "ShortBankName": { + "type": "string", + "description": "A short name for the bank indicated by the sort code.", + "title": "Short Bank Name" + }, + "FullBankName": { + "type": "string", + "description": "The full name for the bank indicated by the sort code.", + "title": "Full Bank Name" + }, + "Address": { "type": "object", "properties": { "Address": { @@ -891,359 +365,815 @@ "Lines": { "type": "array", "items": { - "type": "string" + "type": "string", + "title": "Address Lines" }, - "description": "Formatted Address Lines" + "description": "Lines" } }, - "description": "Formatted Address" - }, - "RawAddress": { - "type": "object", - "properties": { - "Organisation": { - "type": "string", - "description": "Organisation" - }, - "Department": { - "type": "string", - "description": "Department" - }, - "AddressKey": { - "type": "integer", - "format": "int32", - "description": "Address Key" - }, - "OrganisationKey": { - "type": "integer", - "format": "int32", - "description": "Organisation Key" - }, - "PostcodeType": { - "type": "string", - "description": "Postcode Type" - }, - "BuildingNumber": { - "type": "integer", - "format": "int32", - "description": "Building Number" - }, - "SubBuildingName": { - "type": "string", - "description": "Sub Building Name" - }, - "BuildingName": { - "type": "string", - "description": "Building Name" - }, - "DependentThoroughfareName": { - "type": "string", - "description": "Dependent Thoroughfare Name" - }, - "DependentThoroughfareDesc": { - "type": "string", - "description": "Dependent Thoroughfare Desc" - }, - "ThoroughfareName": { - "type": "string", - "description": "Thoroughfare Name" - }, - "ThoroughfareDesc": { - "type": "string", - "description": "Thoroughfare Desc" - }, - "DoubleDependentLocality": { - "type": "string", - "description": "Double Dependent Locality" - }, - "DependentLocality": { - "type": "string", - "description": "Dependent Locality" - }, - "Locality": { - "type": "string", - "description": "Locality" - }, - "Postcode": { - "type": "string", - "description": "Postcode" - }, - "Dps": { - "type": "string", - "description": "DPS" - }, - "PoBox": { - "type": "string", - "description": "PO Box" - }, - "PostalCounty": { - "type": "string", - "description": "Postal County" - }, - "TraditionalCounty": { - "type": "string", - "description": "Traditional County" - }, - "AdministrativeCounty": { - "type": "string", - "description": "Administrative County" - }, - "CountryISO2": { - "type": "string", - "description": "Country ISO2" - }, - "UniqueReference": { - "type": "string", - "description": "Unique Reference" - }, - "Location": { - "type": "object", - "properties": { - "Easting": { - "type": "integer", - "format": "int32", - "description": "Easting" - }, - "Northing": { - "type": "integer", - "format": "int32", - "description": "Northing" - }, - "GridReference": { - "type": "string", - "description": "GridReference" - }, - "Longitude": { - "type": "number", - "format": "float", - "description": "Longitude" - }, - "Latitude": { - "type": "number", - "format": "float", - "description": "Latitude" - }, - "CountyCode": { - "type": "string", - "description": "CountyCode" - }, - "County": { - "type": "string", - "description": "County" - }, - "DistrictCode": { - "type": "string", - "description": "DistrictCode" - }, - "District": { - "type": "string", - "description": "District" - }, - "WardCode": { - "type": "string", - "description": "WardCode" - }, - "Ward": { - "type": "string", - "description": "Ward" - }, - "Country": { - "type": "string", - "description": "Country" - } - }, - "description": "Location" - } - }, - "description": "Raw Address" + "title": "Address", + "description": "The address of the bank branch indicated by the sort code." } - } + }, + "description": "Address" }, - "description": "Results" + "AcceptsBACSPayments": { + "type": "boolean", + "description": "Indicates if the bank branch can accept payments made through the BACS system.", + "title": "Accepts BACS Payments" + }, + "AcceptsDirectDebitTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept direct debit payments.", + "title": "Accepts Direct Debit Transactions" + }, + "AcceptsDirectCreditTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept direct credit payments.", + "title": "Accepts Direct Credit Transactions" + }, + "AcceptsUnpaidChequeClaimTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept claims for unpaid cheques.", + "title": "Accepts Unpaid Cheque Claim Transactions" + }, + "AcceptsBuildingSocietyCreditTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept credits from building societies.", + "title": "Accepts Building Society Credit Transactions" + }, + "AcceptsDividendInterestPaymentTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept dividend interest payments.", + "title": "Accepts Dividend Interest Payment Transactions" + }, + "AcceptsDirectDebitInstructionTransactions": { + "type": "boolean", + "description": "Indicates if the bank branch can accept direct debit instructions.", + "title": "Accepts Direct Debit Instruction Transactions" + }, + "AcceptsCHAPSPayments": { + "type": "boolean", + "description": "Indicates if the bank branch can accept payments made through the CHAPS system.", + "title": "Accepts CHAPS Payments" + }, + "AcceptsCheques": { + "type": "boolean", + "description": "Indicates if the bank branch can accept payments made by cheque.", + "title": "Accepts Cheques" + }, + "AcceptsFasterPayments": { + "type": "boolean", + "description": "", + "title": "Accepts Faster Payments" + } } } } } - }, - "summary": "Get Full Address", - "operationId": "GetFullAddress", - "description": "Searches for an addresses based on input data such as building number and postcode", - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "licence": { - "type": "string", - "description": "As the Royal Mail PAF database can be licensed in multiple ways, this parameter indicates under which license you are accessing the data. This must match the variant you have a license or credits for - if you are unsure which option to choose, please contact your account manager", - "title": "License", - "enum": [ - "InternalUserFull", - "InternalUserFullArea", - "SmallUserFull", - "WebClickFull", - "WebServerFull", - "Lookup", - "InternalServerFull", - "FreeTrial" - ] + } + }, + "/EmailValidation/IsValid.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Validate Email Address", + "description": "Checks to see if an inputted email address is valid to receive email", + "operationId": "IsValidEmail", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "The email address you wish to validate", + "title": "Email Address" + }, + "level": { + "type": "string", + "description": "The level to which you wish to validate - please check https://www.data-8.co.uk/resources/support/service-documentation/email-validation/reference/isvalid for more information", + "title": "Validation Level", + "enum": [ + "Syntax", + "MX", + "Server", + "Address" + ] + } }, - "postcode": { - "type": "string", - "description": "The full postcode to get addresses for. Formatting of the postcode does not matter so \"ch24ne\", \"CH2 4NE\", \"ch02 4Ne\" are all accepted.", - "title": "Postcode" - }, - "building": { - "type": "string", - "description": "An optional value to filter the returned addresses by building name, number, sub-premise (e.g. flat number) or company name. If null or \"\" are supplied, all addresses on the postcode are included in the result.", - "title": "Building", - "x-ms-visibility": "advanced" - }, - "options": { - "type": "object", - "properties": { - "FixTownCounty": { - "type": "boolean", - "description": "true to ensure the town and county are returned in the last two address lines, or false if they should appear in the first available line.", - "title": "FixTownCounty", - "x-ms-visibility": "advanced" - }, - "MaxLines": { - "type": "integer", - "description": "The number of lines to format the address over. An additional line will be included in the result for the postcode.", - "title": "MaxLines", - "format": "int32", - "default": 6 - }, - "MaxLineLength": { - "type": "integer", - "description": "The maximum number of characters that can appear in each address line.", - "title": "MaxLineLength", - "format": "int32", - "x-ms-visibility": "advanced" - }, - "NormalizeCase": { - "type": "boolean", - "description": "Converts all text in the address except the town name to proper case.", - "title": "NormalizeCase", - "x-ms-visibility": "advanced" - }, - "NormalizeTownCase": { - "type": "boolean", - "description": "Converts the town name to proper case", - "title": "NormalizeTownCase", - "x-ms-visibility": "advanced" - }, - "ExcludeCounty": { - "type": "boolean", - "description": "Excludes the county, if any, from the formatted address", - "title": "ExcludeCounty", - "x-ms-visibility": "advanced" - }, - "UseAnyAvailableCounty": { - "type": "boolean", - "description": "Uses any available county to populate the formatted address, not just the postal county", - "title": "UseAnyAvailableCounty", - "x-ms-visibility": "advanced" - }, - "UnwantedPunctuation": { - "type": "boolean", - "description": "A string containing any punctuation characters to be removed from the formatted address", - "title": "UnwantedPunctuation", - "x-ms-visibility": "advanced" - }, - "FixBuilding": { - "type": "boolean", - "description": "Ensures the building name/number is always placed in the first line", - "title": "FixBuilding", - "x-ms-visibility": "advanced" - }, - "IncludeUDPRN": { - "type": "boolean", - "description": "Set to true to have the UniqueReference field of each returned address populated with the UDPRN", - "title": "IncludeUDPRN", - "x-ms-visibility": "advanced" - }, - "IncludeLocation": { - "type": "boolean", - "description": "Set to true to have the Location field of each returned address populated with the geocoding details for the address", - "title": "IncludeLocation", - "default": true - }, - "ReturnResultCount": { - "type": "boolean", - "description": "Indicates if the ResultCount field in the result should be populated with the total number of addresses returned.", - "title": "ReturnResultCount", - "x-ms-visibility": "advanced" - }, - "IncludeNYB": { - "type": "boolean", - "description": "Set to true to include addresses from the Not Yet Built database in the results (requires additional licensing)", - "title": "IncludeNYB", - "x-ms-visibility": "advanced" - }, - "IncludeMR": { - "type": "boolean", - "description": "Set to true to include addresses from the Multiple Residency database in the results (requires additional licensing)", - "title": "IncludeMR", - "x-ms-visibility": "advanced" - }, - "Formatter": { - "type": "string", - "description": "Pick from one of the available formatters to control how the raw address is converted into a human-readable address", - "title": "Formatter", - "enum": [ - "DefaultFormatter", - "PAFStandardFormatter", - "NoOrganisationFormatter" - ], - "x-ms-visibility": "advanced" + "required": [ + "email", + "level" + ] + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining" + } } }, - "description": "options" + "Result": { + "type": "string", + "description": "Contains a status code indicating if the email address could be validated. For more information on the possible status code, please read https://www.data-8.co.uk/resources/support/service-documentation/email-validation/reference/isvalid", + "title": "Result" + } } - }, - "required": [ - "licence", - "postcode" - ] + } } } - ] + } + }, + "/InternationalTelephoneValidation/IsValid.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Validate Telephone Number", + "description": "Checks to see if an inputted email address is valid to receive email", + "operationId": "IsValidTelephone", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "telephoneNumber": { + "type": "string", + "description": "The number you want to validate", + "title": "Telephone Number" + }, + "defaultCountry": { + "type": "string", + "description": "Formatted as numbers i.e. 44 for UK", + "title": "Default Country Code" + }, + "options": { + "type": "object", + "properties": { + "UseLineValidation": { + "type": "boolean", + "description": "If set to true then the service will use Data8 LandlineValidation on any number it recognises as a UK landline number and InternationalTelephoneValidation on all other numbers. Any validation call will be debited either an InternationalTelephoneValidation credit or a LandlineValidation credit accordingly so please ensure you have LandlineValidation credits available before using this option. The option defaults to false.", + "title": "Use Line Validation" + }, + "UseMobileValidation": { + "type": "boolean", + "description": "If set to true then the service will use Data8 MobileValidation on any number it recognises as a mobile number and InternationalTelephoneValidation on all other numbers. Any validation call will be debited either an InternationalTelephoneValidation credit or a MobileValidation credit accordingly so please ensure you have MobileValidation credits available before using this option. The option defaults to false.", + "title": "Use Mobile Validation" + } + }, + "description": "options" + } + }, + "required": [ + "telephoneNumber", + "defaultCountry" + ] + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining" + } + }, + "description": "Status" + }, + "Result": { + "type": "object", + "properties": { + "TelephoneNumber": { + "type": "string", + "description": "The inputted telephone number formatted", + "title": "Telephone Number" + }, + "ValidationResult": { + "type": "string", + "description": "The simple result for the validation of the telephone number", + "title": "Validation Result" + }, + "ValidationLevel": { + "type": "string", + "description": "The level of validation found for the phone number.", + "title": "Validation Level" + }, + "NumberType": { + "type": "string", + "description": "Specifies the type of the number provided i.e. Landline or Mobile", + "title": "Number Type" + }, + "Location": { + "type": "string", + "description": "Current location of the telephone number if available", + "title": "Location" + }, + "Provider": { + "type": "string", + "description": "The network provider of the telephone number", + "title": "Provider" + }, + "CountryCode": { + "type": "string", + "description": "Country ISO2 code of the telephone number", + "title": "Country Code" + }, + "CountryName": { + "type": "string", + "description": "Country name of the telephone number", + "title": "Country Name" + } + }, + "description": "Result" + } + } + } + } + } + } + }, + "/Postcoder/CleanAddress.json": { + "post": { + "consumes" : [ + "application/json" + ], + "summary": "Clean Address", + "description": "Formats, verifies and corrects a given address into a full formatted address.", + "operationId": "CleanAddress", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "address": { + "type": "object", + "properties": { + "Lines": { + "type": "array", + "items": { + "type": "string", + "description": "", + "title": "Address Lines" + }, + "description": "Lines" + } + }, + "description": "address", + "required": [ + "Lines" + ] + }, + "options": { + "type": "object", + "properties": { + "DefaultCountryCode": { + "type": "string", + "description": "An ISO 2 character code for the country to assume the address is in unless otherwise specified. This defaults to GB.", + "title": "Default Country Code" + }, + "DetectCountry": { + "type": "boolean", + "description": "Set to true to attempt to automatically detect the country from the provided address information, possibly overriding the default country", + "title": "Auto Detect Country" + }, + "Country": { + "type": "string", + "description": "If DetectCountry is set to true, this is taken as additional user input alongside the address to influence the country detection function. The format of this is not enforced, so could be provided as \"US\", \"USA\" or \"United States\"", + "title": "Country" + }, + "IncludeCountry": { + "type": "boolean", + "description": "Includes the CountryName field in the main part of the result", + "title": "Include Country" + } + }, + "description": "options" + } + }, + "required": [ + "address" + ] + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Flag to determine if the request to Data8 succeeded, regardless of result", + "title": "Success" + }, + "ErrorMessage": { + "type": "string", + "description": "Returned Error Message, if any", + "title": "Error Message" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Data8 Credits Remaining for the called service", + "title": "Credits Remaining" + } + }, + "description": "Status" + }, + "Result": { + "type": "object", + "properties": { + "Address": { + "type": "object", + "properties": { + "Lines": { + "type": "array", + "items": { + "type": "string", + "title": "Address Lines" + }, + "description": "Lines" + } + }, + "description": "Address", + "title": "Address Lines" + } + }, + "description": "Result" + }, + "MatchLevel": { + "type": "string", + "description": "Contains a MatchLevel to indicate how well the address matched to PAF. Possible values are OK_Unchanged, OK_Corrected, NOK_Building, NOK_Street, NOK_Town, NOK_NoMatch", + "title": "Match Level" + }, + "CountryName": { + "type": "string", + "description": "Contains the name of the country the address is in.", + "title": "Country Name" + } + } + } + } + } + } + }, + "/AddressCapture/GetFullAddress.json": { + "post": { + "consumes" : [ + "application/json" + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "object", + "properties": { + "Success": { + "type": "boolean", + "description": "Success" + }, + "ErrorMessage": { + "type": "string", + "description": "Error Message (if applicable)" + }, + "CreditsRemaining": { + "type": "number", + "format": "float", + "description": "Credits Remaining", + "title": "" + } + }, + "description": "Status" + }, + "ResultCount": { + "type": "integer", + "format": "int32", + "description": "", + "title": "Contains the number of addresses in the Results field. This field is only populated if the ReturnResultCount option is set to true" + }, + "Results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Address": { + "type": "object", + "properties": { + "Lines": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Formatted Address Lines" + } + }, + "description": "Formatted Address" + }, + "RawAddress": { + "type": "object", + "properties": { + "Organisation": { + "type": "string", + "description": "Organisation" + }, + "Department": { + "type": "string", + "description": "Department" + }, + "AddressKey": { + "type": "integer", + "format": "int32", + "description": "Address Key" + }, + "OrganisationKey": { + "type": "integer", + "format": "int32", + "description": "Organisation Key" + }, + "PostcodeType": { + "type": "string", + "description": "Postcode Type" + }, + "BuildingNumber": { + "type": "integer", + "format": "int32", + "description": "Building Number" + }, + "SubBuildingName": { + "type": "string", + "description": "Sub Building Name" + }, + "BuildingName": { + "type": "string", + "description": "Building Name" + }, + "DependentThoroughfareName": { + "type": "string", + "description": "Dependent Thoroughfare Name" + }, + "DependentThoroughfareDesc": { + "type": "string", + "description": "Dependent Thoroughfare Desc" + }, + "ThoroughfareName": { + "type": "string", + "description": "Thoroughfare Name" + }, + "ThoroughfareDesc": { + "type": "string", + "description": "Thoroughfare Desc" + }, + "DoubleDependentLocality": { + "type": "string", + "description": "Double Dependent Locality" + }, + "DependentLocality": { + "type": "string", + "description": "Dependent Locality" + }, + "Locality": { + "type": "string", + "description": "Locality" + }, + "Postcode": { + "type": "string", + "description": "Postcode" + }, + "Dps": { + "type": "string", + "description": "DPS" + }, + "PoBox": { + "type": "string", + "description": "PO Box" + }, + "PostalCounty": { + "type": "string", + "description": "Postal County" + }, + "TraditionalCounty": { + "type": "string", + "description": "Traditional County" + }, + "AdministrativeCounty": { + "type": "string", + "description": "Administrative County" + }, + "CountryISO2": { + "type": "string", + "description": "Country ISO2" + }, + "UniqueReference": { + "type": "string", + "description": "Unique Reference" + }, + "Location": { + "type": "object", + "properties": { + "Easting": { + "type": "integer", + "format": "int32", + "description": "Easting" + }, + "Northing": { + "type": "integer", + "format": "int32", + "description": "Northing" + }, + "GridReference": { + "type": "string", + "description": "GridReference" + }, + "Longitude": { + "type": "number", + "format": "float", + "description": "Longitude" + }, + "Latitude": { + "type": "number", + "format": "float", + "description": "Latitude" + }, + "CountyCode": { + "type": "string", + "description": "CountyCode" + }, + "County": { + "type": "string", + "description": "County" + }, + "DistrictCode": { + "type": "string", + "description": "DistrictCode" + }, + "District": { + "type": "string", + "description": "District" + }, + "WardCode": { + "type": "string", + "description": "WardCode" + }, + "Ward": { + "type": "string", + "description": "Ward" + }, + "Country": { + "type": "string", + "description": "Country" + } + }, + "description": "Location" + } + }, + "description": "Raw Address" + } + } + }, + "description": "Results" + } + } + } + } + }, + "summary": "Get Full Address", + "operationId": "GetFullAddress", + "description": "Searches for an addresses based on input data such as building number and postcode", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "licence": { + "type": "string", + "description": "As the Royal Mail PAF database can be licensed in multiple ways, this parameter indicates under which license you are accessing the data. This must match the variant you have a license or credits for - if you are unsure which option to choose, please contact your account manager", + "title": "License", + "enum": [ + "InternalUserFull", + "InternalUserFullArea", + "SmallUserFull", + "WebClickFull", + "WebServerFull", + "Lookup", + "InternalServerFull", + "FreeTrial" + ] + }, + "postcode": { + "type": "string", + "description": "The full postcode to get addresses for. Formatting of the postcode does not matter so \"ch24ne\", \"CH2 4NE\", \"ch02 4Ne\" are all accepted.", + "title": "Postcode" + }, + "building": { + "type": "string", + "description": "An optional value to filter the returned addresses by building name, number, sub-premise (e.g. flat number) or company name. If null or \"\" are supplied, all addresses on the postcode are included in the result.", + "title": "Building", + "x-ms-visibility": "advanced" + }, + "options": { + "type": "object", + "properties": { + "FixTownCounty": { + "type": "boolean", + "description": "true to ensure the town and county are returned in the last two address lines, or false if they should appear in the first available line.", + "title": "FixTownCounty", + "x-ms-visibility": "advanced" + }, + "MaxLines": { + "type": "integer", + "description": "The number of lines to format the address over. An additional line will be included in the result for the postcode.", + "title": "MaxLines", + "format": "int32", + "default": 6 + }, + "MaxLineLength": { + "type": "integer", + "description": "The maximum number of characters that can appear in each address line.", + "title": "MaxLineLength", + "format": "int32", + "x-ms-visibility": "advanced" + }, + "NormalizeCase": { + "type": "boolean", + "description": "Converts all text in the address except the town name to proper case.", + "title": "NormalizeCase", + "x-ms-visibility": "advanced" + }, + "NormalizeTownCase": { + "type": "boolean", + "description": "Converts the town name to proper case", + "title": "NormalizeTownCase", + "x-ms-visibility": "advanced" + }, + "ExcludeCounty": { + "type": "boolean", + "description": "Excludes the county, if any, from the formatted address", + "title": "ExcludeCounty", + "x-ms-visibility": "advanced" + }, + "UseAnyAvailableCounty": { + "type": "boolean", + "description": "Uses any available county to populate the formatted address, not just the postal county", + "title": "UseAnyAvailableCounty", + "x-ms-visibility": "advanced" + }, + "UnwantedPunctuation": { + "type": "boolean", + "description": "A string containing any punctuation characters to be removed from the formatted address", + "title": "UnwantedPunctuation", + "x-ms-visibility": "advanced" + }, + "FixBuilding": { + "type": "boolean", + "description": "Ensures the building name/number is always placed in the first line", + "title": "FixBuilding", + "x-ms-visibility": "advanced" + }, + "IncludeUDPRN": { + "type": "boolean", + "description": "Set to true to have the UniqueReference field of each returned address populated with the UDPRN", + "title": "IncludeUDPRN", + "x-ms-visibility": "advanced" + }, + "IncludeLocation": { + "type": "boolean", + "description": "Set to true to have the Location field of each returned address populated with the geocoding details for the address", + "title": "IncludeLocation", + "default": true + }, + "ReturnResultCount": { + "type": "boolean", + "description": "Indicates if the ResultCount field in the result should be populated with the total number of addresses returned.", + "title": "ReturnResultCount", + "x-ms-visibility": "advanced" + }, + "IncludeNYB": { + "type": "boolean", + "description": "Set to true to include addresses from the Not Yet Built database in the results (requires additional licensing)", + "title": "IncludeNYB", + "x-ms-visibility": "advanced" + }, + "IncludeMR": { + "type": "boolean", + "description": "Set to true to include addresses from the Multiple Residency database in the results (requires additional licensing)", + "title": "IncludeMR", + "x-ms-visibility": "advanced" + }, + "Formatter": { + "type": "string", + "description": "Pick from one of the available formatters to control how the raw address is converted into a human-readable address", + "title": "Formatter", + "enum": [ + "DefaultFormatter", + "PAFStandardFormatter", + "NoOrganisationFormatter" + ], + "x-ms-visibility": "advanced" + } + }, + "description": "options" + } + }, + "required": [ + "licence", + "postcode" + ] + } + } + ] + } } - } - }, - "x-ms-connector-metadata" : [ - { - "propertyName" : "Website", - "propertyValue" : "https://www.data-8.co.uk" }, - { - "propertyName" : "Privacy Policy", - "propertyValue" : "https://www.data-8.co.uk/privacy-policy/" + "x-ms-connector-metadata" : [ + { + "propertyName" : "Website", + "propertyValue" : "https://www.data-8.co.uk" + }, + { + "propertyName" : "Privacy Policy", + "propertyValue" : "https://www.data-8.co.uk/privacy-policy/" + }, + { + "propertyName" : "Categories", + "propertyValue" : "AI;Website" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "query", + "name": "key" + } }, - { - "propertyName" : "Categories", - "propertyValue" : "AI;Website" - } - ], - "definitions": {}, - "parameters": {}, - "responses": {}, - "securityDefinitions": { - "API Key": { - "type": "apiKey", - "in": "query", - "name": "key" - } - }, - "security": [ - { - "API Key": [] - } - ], - "tags": [] -} \ No newline at end of file + "security": [ + { + "API Key": [] + } + ], + "tags": [] + } \ No newline at end of file From 1933381e9dc2325fb417c8ab19f3744eebc76196 Mon Sep 17 00:00:00 2001 From: Andreas Date: Fri, 11 Sep 2020 11:13:39 +0200 Subject: [PATCH 057/347] Add url/token by policy instead of call parameter --- .../Peltarion/apiDefinition.swagger.json | 67 ++++-------------- .../Peltarion/apiProperties.json | 68 ++++++++++++++++--- 2 files changed, 74 insertions(+), 61 deletions(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index 92efa83ab..5171c5722 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -1,14 +1,9 @@ { "swagger": "2.0", "info": { - "title": "Peltarion", - "description": "Using this connector, you can connect your your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data.", - "version": "1.0", - "contact": { - "name": "Peltarion", - "url": "https://peltarion.com/", - "email": "contact@peltarion.com" - } + "title": "PeltarionConnector", + "description": "Using this connector, you can connect your Peltarion models to the PowerApps platform. Just add the connector and enter URL and token from the Peltarion platform, and send your data.", + "version": "1.0" }, "host": "peltarionforwardtest.azurewebsites.net", "basePath": "/", @@ -47,34 +42,6 @@ "operationId": "callapi", "x-ms-visibility": "important", "parameters": [ - { - "name": "code", - "in": "query", - "required": true, - "type": "string", - "default": "FHWJvOJnrrBz8v7DOWoABLS1K2e9Im6q7YalAthQMGkqTa57jDYm/w==", - "x-ms-visibility": "internal", - "description": "Authentication for the API proxy", - "x-ms-summary": "This is a key required by the API proxy" - }, - { - "name": "peltarionurl", - "in": "header", - "required": true, - "type": "string", - "x-ms-visibility": "important", - "description": "Peltarion URL", - "x-ms-summary": "URL to identify your Peltarion API" - }, - { - "name": "peltariontoken", - "in": "header", - "required": true, - "type": "string", - "x-ms-visibility": "important", - "description": "Peltarion token", - "x-ms-summary": "Token to identify your Peltarion API" - }, { "name": "peltarionbody", "in": "header", @@ -88,24 +55,18 @@ } } }, - "x-ms-connector-metadata": [ - { - "propertyName": "Website", - "propertyValue": "https://peltarion.com/" - }, - { - "propertyName": "Privacy policy", - "propertyValue": "https://peltarion.com/privacy-policies" - }, - { - "propertyName": "Categories", - "propertyValue": "AI;Data" - } - ], "definitions": {}, "parameters": {}, "responses": {}, - "securityDefinitions": {}, - "security": [], + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "security": [ + { + "basic_auth": [] + } + ], "tags": [] -} +} \ No newline at end of file diff --git a/certified-connectors/Peltarion/apiProperties.json b/certified-connectors/Peltarion/apiProperties.json index 6b23fb129..abfa2eb4a 100644 --- a/certified-connectors/Peltarion/apiProperties.json +++ b/certified-connectors/Peltarion/apiProperties.json @@ -1,10 +1,35 @@ { "properties": { - "connectionParameters": {}, + "connectionParameters": { + "username": { + "type": "securestring", + "uiDefinition": { + "displayName": "Peltarion API URL", + "description": "The Peltarion API URL for this api", + "tooltip": "Provide the Peltarion API URL", + "constraints": { + "tabIndex": 2, + "clearText": true, + "required": "true" + } + } + }, + "password": { + "type": "securestring", + "uiDefinition": { + "displayName": "Peltarion API Token", + "description": "The Peltarion API Token for this api", + "tooltip": "Provide the Peltarion API Token", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, "iconBrandColor": "#061b22", "capabilities": [], - "publisher": "Peltarion", - "stackOwner": "Peltarion", "policyTemplateInstances": [ { "templateId": "setheader", @@ -13,12 +38,39 @@ "x-ms-apimTemplateParameter.name": "content-type", "x-ms-apimTemplateParameter.value": "application/json", "x-ms-apimTemplateParameter.existsAction": "override", - "x-ms-apimTemplate-policySection": "Request", - "x-ms-apimTemplate-operationName": [ - "callapi" - ] + "x-ms-apimTemplate-policySection": "Request" + } + }, + { + "templateId": "setqueryparameter", + "title": "Query token", + "parameters": { + "x-ms-apimTemplateParameter.name": "code", + "x-ms-apimTemplateParameter.value": "FHWJvOJnrrBz8v7DOWoABLS1K2e9Im6q7YalAthQMGkqTa57jDYm/w==", + "x-ms-apimTemplateParameter.existsAction": "override" + } + }, + { + "templateId": "setheader", + "title": "PeltarionURL", + "parameters": { + "x-ms-apimTemplateParameter.name": "peltarionurl", + "x-ms-apimTemplateParameter.value": "@connectionParameters('username','')", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplate-policySection": "Request" + } + }, + { + "templateId": "setheader", + "title": "PeltarionToken", + "parameters": { + "x-ms-apimTemplateParameter.name": "peltariontoken", + "x-ms-apimTemplateParameter.value": "@connectionParameters('password','')", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplate-policySection": "Request" } } - ] + ], + "publisher": "Andreas Vr\u00e5lstad" } } \ No newline at end of file From 56d6b218cbd7495972a661e6784c300a4e418371 Mon Sep 17 00:00:00 2001 From: Andreas Date: Fri, 11 Sep 2020 11:17:37 +0200 Subject: [PATCH 058/347] Re-added metadata --- certified-connectors/Peltarion/apiDefinition.swagger.json | 7 ++++++- certified-connectors/Peltarion/apiProperties.json | 5 +++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index 5171c5722..ea11cb6e0 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -3,7 +3,12 @@ "info": { "title": "PeltarionConnector", "description": "Using this connector, you can connect your Peltarion models to the PowerApps platform. Just add the connector and enter URL and token from the Peltarion platform, and send your data.", - "version": "1.0" + "version": "1.0", + "contact": { + "name": "Peltarion", + "url": "https://peltarion.com/", + "email": "contact@peltarion.com" + } }, "host": "peltarionforwardtest.azurewebsites.net", "basePath": "/", diff --git a/certified-connectors/Peltarion/apiProperties.json b/certified-connectors/Peltarion/apiProperties.json index abfa2eb4a..b4372bc1a 100644 --- a/certified-connectors/Peltarion/apiProperties.json +++ b/certified-connectors/Peltarion/apiProperties.json @@ -30,6 +30,8 @@ }, "iconBrandColor": "#061b22", "capabilities": [], + "publisher": "Peltarion", + "stackOwner": "Peltarion", "policyTemplateInstances": [ { "templateId": "setheader", @@ -70,7 +72,6 @@ "x-ms-apimTemplate-policySection": "Request" } } - ], - "publisher": "Andreas Vr\u00e5lstad" + ] } } \ No newline at end of file From 40cb7ad9482cb4653951be9c7631768d5e3a9ff5 Mon Sep 17 00:00:00 2001 From: Andreas Date: Fri, 11 Sep 2020 11:18:40 +0200 Subject: [PATCH 059/347] minor --- certified-connectors/Peltarion/apiDefinition.swagger.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index ea11cb6e0..c147cb3bc 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -1,8 +1,8 @@ { "swagger": "2.0", "info": { - "title": "PeltarionConnector", - "description": "Using this connector, you can connect your Peltarion models to the PowerApps platform. Just add the connector and enter URL and token from the Peltarion platform, and send your data.", + "title": "Peltarion", + "description": "Using this connector, you can connect your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data.", "version": "1.0", "contact": { "name": "Peltarion", From 072ed3abd82f6ab8692374953562752f11643bdd Mon Sep 17 00:00:00 2001 From: Andreas Date: Fri, 11 Sep 2020 11:25:45 +0200 Subject: [PATCH 060/347] Re-added connector metadata --- .../Peltarion/apiDefinition.swagger.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index c147cb3bc..d6081cdd2 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -60,6 +60,20 @@ } } }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://peltarion.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://peltarion.com/privacy-policies" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Data" + } + ], "definitions": {}, "parameters": {}, "responses": {}, From e3657a75a207407a8fef18cdeef93832a2983e7f Mon Sep 17 00:00:00 2001 From: davetunnicliff Date: Mon, 14 Sep 2020 14:35:54 +0100 Subject: [PATCH 061/347] Changed summary descriptions as per submission request --- .../BoomappConnect/apiDefinition.swagger.json | 1836 ++++++++--------- .../BoomappConnect/apiProperties.json | 69 +- 2 files changed, 948 insertions(+), 957 deletions(-) diff --git a/certified-connectors/BoomappConnect/apiDefinition.swagger.json b/certified-connectors/BoomappConnect/apiDefinition.swagger.json index 3122be3d6..33e35aea9 100644 --- a/certified-connectors/BoomappConnect/apiDefinition.swagger.json +++ b/certified-connectors/BoomappConnect/apiDefinition.swagger.json @@ -1,923 +1,915 @@ -{ - "swagger": "2.0", - "info": { - "title": "boomapp connect", - "description": "'Intelligent' global 2-way, Email, Voice, SMS and Push Messaging. Supercharge any Power Platform applications with boomapp connect to build truly automated multi-channel conversational communications workflows (uniquely driven by subject). Fully interactive comms workflows based on a recipient’s response allows the delivery of seamless and frictionless interactions without forcing behavioural change through the engagement. For further detail and to set up a free trial account, see our website.", - "version": "1.0", - "contact": { - "name": "Boomerang Support", - "url": "https://www.boomerangmessaging.com/products/boomApp/msconnector", - "email": "support@boomcomms.com" - } - }, - "host": "direct-api.apps.boomcomms.com", - "basePath": "/v1", - "schemes": [ - "https" - ], - "paths": { - "/sms1": { - "post": { - "responses": { - "200": { - "description": "success", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "format": "int32", - "description": "status" - }, - "message": { - "type": "string", - "description": "message" - }, - "transactions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "transaction_id": { - "type": "string", - "description": "transaction_id" - }, - "parts_per_message": { - "type": "integer", - "format": "int32", - "description": "parts_per_message" - }, - "telephone_number": { - "type": "string", - "description": "telephone_number" - } - } - }, - "description": "transactions" - } - } - } - }, - "400": { - "description": "Your request could not be processed." - }, - "401": { - "description": "Your request could not be authenticated" - }, - "402": { - "description": "Your request could not be processed because of insufficient funds or other payment related issues." - }, - "500": { - "description": "Please try again or report this error to the support" - } - }, - "summary": "Sms one-way", - "description": "SMS messages are delivered using an alpha-numeric originator (such as a company name) which must contain a maximum of 11 characters, and a recipient cannot respond to a message sent using an alpha numeric originator. Please also note that in destinations where delivery of messages with alpha-numeric originator is not supported (due to local restrictions), this may be replaced with a numeric originator, to ensure that the message is delivered.", - "operationId": "SMS1", - "parameters": [ - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "Originating Id for a 1-way message. An alpha numeric value containing a maximum of 11 characters.", - "title": "from" - }, - "message_content": { - "type": "string", - "description": "The content of the outbound message sent to all recipientAddresses.", - "title": "" - }, - "recipient_address": { - "type": "array", - "items": { - "type": "object", - "properties": { - "number": { - "type": "string", - "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", - "title": "The recipient's destination address" - } - } - }, - "description": "recipient_address" - }, - "priority": { - "type": "boolean", - "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", - "title": "", - "enum": [ - true, - false - ] - }, - "unique_identifier": { - "type": "string", - "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", - "title": "" - }, - "campaign_name": { - "type": "string", - "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", - "title": "" - }, - "custom_parameter": { - "type": "string", - "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", - "title": "" - } - } - } - } - ] - } - }, - "/sms2": { - "post": { - "responses": { - "200": { - "description": "success", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "format": "int32", - "description": "status" - }, - "message": { - "type": "string", - "description": "message" - }, - "transactions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "transaction_id": { - "type": "string", - "description": "transaction_id" - }, - "parts_per_message": { - "type": "integer", - "format": "int32", - "description": "parts_per_message" - }, - "telephone_number": { - "type": "string", - "description": "telephone_number" - } - } - }, - "description": "transactions" - } - } - } - }, - "400": { - "description": "Your request could not be processed." - }, - "401": { - "description": "Your request could not be authenticated" - }, - "402": { - "description": "Your request could not be processed because of insufficient funds or other payment related issues." - }, - "500": { - "description": "Please try again or report this error to the support" - } - }, - "summary": "Sms two-way", - "description": "This method allows replies to be tracked directly against each outbound transaction and is used to manage conversations between your system and the end user. Replies can be forwarded to an email address and customers with Boommail can send an email-2-SMS message back to the responder. See https://boomerangmessaging.com/docs/sending-sms-messages, for more information regarding 2-way and conversational messaging.", - "operationId": "SMS2", - "parameters": [ - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "conversation_id": { - "type": "string", - "description": "Define a conversation ID to group all messages (including replies) part of the same conversation", - "title": "" - }, - "message_content": { - "type": "string", - "description": "The content of the outbound message sent to all recipientAddresses.", - "title": "" - }, - "recipient_address": { - "type": "array", - "items": { - "type": "object", - "properties": { - "number": { - "type": "string", - "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", - "title": "The recipient's destination address" - } - } - }, - "description": "recipient_address" - }, - "validity_period": { - "type": "integer", - "format": "int32", - "description": "The period of time during which the number used to send the message will be active. Replies to the message will not be delivered after the validity period expires. For two- way messages, the minimum validity period is 1 day.", - "title": "" - }, - "open_ticket": { - "type": "boolean", - "description": "By default all messages are sent a single ticket which means that the message is closed on receipt of the first response. To match multiple responses to the same originating message, use open ticket by passing true.", - "title": "", - "enum": [ - true, - false - ] - }, - "email_responses": { - "type": "string", - "description": "An email address to which message responses are forwarded.", - "title": "" - }, - "push_responses": { - "type": "string", - "description": "A CallBack URL to which message responses are posted.", - "title": "" - }, - "priority": { - "type": "boolean", - "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", - "title": "", - "enum": [ - true, - false - ] - }, - "unique_identifier": { - "type": "string", - "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", - "title": "" - }, - "campaign_name": { - "type": "string", - "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", - "title": "" - }, - "custom_parameter": { - "type": "string", - "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", - "title": "" - } - } - } - } - ] - } - }, - "/sms3": { - "post": { - "responses": { - "200": { - "description": "success", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "format": "int32", - "description": "status" - }, - "message": { - "type": "string", - "description": "message" - }, - "transactions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "transaction_id": { - "type": "string", - "description": "transaction_id" - }, - "parts_per_message": { - "type": "integer", - "format": "int32", - "description": "parts_per_message" - }, - "telephone_number": { - "type": "string", - "description": "telephone_number" - } - } - }, - "description": "transactions" - } - } - } - }, - "400": { - "description": "Your request could not be processed." - }, - "401": { - "description": "Your request could not be authenticated" - }, - "402": { - "description": "Your request could not be processed because of insufficient funds or other payment related issues." - }, - "500": { - "description": "Please try again or report this error to the support" - } - }, - "summary": "Sms custom number", - "description": "SMS messages are delivered using the number specified in the request so that any replies are returned to that number. Customers using Boomerang's Campaign feature can use a number associated to a Campaign, which allows inbound replies to to be accessed from the Campaign reporting section within Boomerang UI. However, unlike the SMS 2-way method, replies are not tracked against the outbound message. See https://boomerangmessaging.com/docs/sending-sms-messages for more information.", - "operationId": "SMS3", - "parameters": [ - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "The sending Id associated to a message this could be an Inbound campaign number currently associated to an active Campaign.", - "title": "" - }, - "message_content": { - "type": "string", - "description": "The content of the outbound message sent to all recipientAddresses.", - "title": "" - }, - "recipient_address": { - "type": "array", - "items": { - "type": "object", - "properties": { - "number": { - "type": "string", - "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", - "title": "The recipient's destination address" - } - } - }, - "description": "recipient_address" - }, - "priority": { - "type": "boolean", - "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", - "title": "", - "enum": [ - true, - false - ] - }, - "unique_identifier": { - "type": "string", - "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", - "title": "" - }, - "campaign_name": { - "type": "string", - "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", - "title": "" - }, - "custom_parameter": { - "type": "string", - "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", - "title": "" - } - } - } - } - ] - } - }, - "/voice": { - "post": { - "responses": { - "200": { - "description": "success", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "format": "int32", - "description": "status" - }, - "message": { - "type": "string", - "description": "message" - }, - "transactions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "transaction_id": { - "type": "string", - "description": "transaction_id" - }, - "parts_per_message": { - "type": "integer", - "format": "int32", - "description": "parts_per_message" - }, - "telephone_number": { - "type": "string", - "description": "telephone_number" - } - } - }, - "description": "transactions" - } - } - } - }, - "400": { - "description": "Your request could not be processed." - }, - "401": { - "description": "Your request could not be authenticated" - }, - "402": { - "description": "Your request could not be processed because of insufficient funds or other payment related issues." - }, - "500": { - "description": "Please try again or report this error to the support" - } - }, - "summary": "Voice", - "description": "A fixed number is used as the originator for a Text-To-Speech (TTS) voice call. Keystrokes \u20181\u2019 and \u20182\u2019 are used to accept or decline the message, \u20189\u2019 is used to redirect the call. See https://boomerangmessaging.com/docs/sending-delivering-voice-messages for more information", - "operationId": "VOICE", - "parameters": [ - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "voice_intro": { - "type": "string", - "description": "The message played when the voice call is answered. The Message content will be played right after it.", - "title": "" - }, - "voice_thank_you": { - "type": "string", - "description": "The message played at the end of the voice call after the message content has been played.", - "title": "" - }, - "voice_redirect_message": { - "type": "string", - "description": "The message played at the end of the voice call after the message content has been played.", - "title": "" - }, - "voice_redirect_no": { - "type": "object", - "properties": { - "number": { - "type": "string", - "description": "Redirect number", - "title": "" - } - }, - "description": "voice_redirect_no" - }, - "voice_retries": { - "type": "integer", - "format": "int32", - "description": "Number of attempts made if the voice call is not answered the first time.", - "title": "" - }, - "voice_delay": { - "type": "integer", - "format": "int32", - "description": "Time waited by the system between retries.", - "title": "" - }, - "message_content": { - "type": "string", - "description": "The content of the outbound message sent to all recipientAddresses.", - "title": "" - }, - "recipient_address": { - "type": "array", - "items": { - "type": "object", - "properties": { - "number": { - "type": "string", - "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", - "title": "" - } - } - }, - "description": "recipient_address" - }, - "priority": { - "type": "boolean", - "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", - "title": "", - "enum": [ - true, - false - ] - }, - "unique_identifier": { - "type": "string", - "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", - "title": "" - }, - "campaign_name": { - "type": "string", - "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", - "title": "" - }, - "custom_parameter": { - "type": "string", - "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", - "title": "" - } - } - } - } - ] - } - }, - "/email": { - "post": { - "responses": { - "200": { - "description": "success", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "format": "int32", - "description": "status" - }, - "message": { - "type": "string", - "description": "message" - }, - "transactions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "transaction_id": { - "type": "string", - "description": "transaction_id" - }, - "parts_per_message": { - "type": "integer", - "format": "int32", - "description": "parts_per_message" - }, - "email_address": { - "type": "string", - "description": "email_address" - } - } - }, - "description": "transactions" - } - } - } - }, - "400": { - "description": "Your request could not be processed." - }, - "401": { - "description": "Your request could not be authenticated" - }, - "402": { - "description": "Your request could not be processed because of insufficient funds or other payment related issues." - }, - "500": { - "description": "Please try again or report this error to the support" - } - }, - "summary": "Email", - "description": "Send single or bulk email messages. Emails are sent from the domain @boomerangui.com and it is possible to customise the Subject and to override the 'From' address. It is also possible to forward responses to an email address and / or a URL", - "operationId": "EMAIL", - "parameters": [ - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "from": { - "type": "string", - "description": "Pass the content to be used as the From address. If blank the default value will be taken from your account settings", - "title": "from" - }, - "email_subject": { - "type": "string", - "description": "Subject to be displayed by default when the email is received in the recipient's inbox", - "title": "email_subject" - }, - "message_content": { - "type": "string", - "description": "The content of the outbound message sent to all recipientAddresses.", - "title": "message_content" - }, - "email_address": { - "type": "array", - "items": { - "type": "string", - "description": "An email address. A single address or an array of up to 10,000 addresses can be passed.", - "title": "" - }, - "description": "email_address" - }, - "validity_period": { - "type": "integer", - "format": "int32", - "description": "The period of time during which the number used to send the message will be active. Replies to the message will not be delivered after the validity period expires. For two- way messages, the minimum validity period is 1 day.", - "title": "" - }, - "open_ticket": { - "type": "boolean", - "description": "By default all messages are sent a single ticket which means that the message is closed on receipt of the first response. To match multiple responses to the same originating message, use open ticket by passing true.", - "title": "", - "enum": [ - true, - false - ] - }, - "email_responses": { - "type": "string", - "description": "An email address to which message responses are forwarded.", - "title": "" - }, - "push_responses": { - "type": "string", - "description": "A CallBack URL to which message responses are posted.", - "title": "" - }, - "unique_identifier": { - "type": "string", - "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", - "title": "" - }, - "campaign_name": { - "type": "string", - "description": "Optional identifier that can be used to group messages by specific campaigns and batched messages.", - "title": "" - }, - "custom_parameter": { - "type": "string", - "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", - "title": "" - } - } - } - } - ] - } - }, - "/get_responses": { - "get": { - "responses": { - "200": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "format": "int32", - "description": "status" - }, - "message": { - "type": "string", - "description": "message" - }, - "has_more": { - "type": "boolean", - "description": "has_more" - }, - "replies": { - "type": "array", - "items": { - "type": "object", - "properties": { - "transaction_id": { - "type": "string", - "description": "transaction_id" - }, - "custom_parameter": { - "type": "string", - "description": "custom_parameter" - }, - "response_id": { - "type": "string", - "description": "response_id" - }, - "from": { - "type": "string", - "description": "from" - }, - "response_content": { - "type": "string", - "description": "response_content" - }, - "is_new": { - "type": "boolean", - "description": "is_new" - }, - "transaction_date": { - "type": "string", - "description": "transaction_date" - }, - "response_date": { - "type": "string", - "description": "response_date" - } - } - }, - "description": "replies" - } - } - } - }, - "400": { - "description": "Your request could not be processed" - }, - "401": { - "description": "Your request could not be authenticated" - }, - "500": { - "description": "Please try again or report this error to the support" - } - }, - "summary": "On SMS response submission", - "description": "Triggered by inbound replies which are automatically mapped to the associated outbound messages when sent as an Intelligent 2-way / conversational message", - "x-ms-trigger": "batch", - "operationId": "GESTRESPONSESTRIGGER", - "parameters": [ - { - "name": "ignore_previous", - "in": "query", - "required": true, - "type": "boolean", - "default": true, - "x-ms-visibility": "internal" - }, - { - "name": "mark_as_read", - "in": "query", - "required": true, - "type": "boolean", - "default": true, - "x-ms-visibility": "internal" - } - ], - "x-ms-trigger-metadata": { - "mode": "polling", - "kind": "query" - } - } - }, - "/get_all_new_drs": { - "get": { - "responses": { - "200": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "format": "int32", - "description": "status" - }, - "message": { - "type": "string", - "description": "message" - }, - "has_more": { - "type": "boolean", - "description": "has_more" - }, - "drs": { - "type": "array", - "items": { - "type": "object", - "properties": { - "transaction_id": { - "type": "string", - "description": "transaction_id" - }, - "status": { - "type": "string", - "description": "status" - }, - "status_date": { - "type": "string", - "description": "status_date" - }, - "destination": { - "type": "string", - "description": "destination" - }, - "custom_parameter": { - "type": "string", - "description": "custom_parameter" - }, - "campaign_name": { - "type": "string", - "description": "campaign_name" - }, - "unique_id": { - "type": "string", - "description": "unique_id" - } - } - }, - "description": "drs" - } - } - } - }, - "400": { - "description": "Your request could not be processed" - }, - "401": { - "description": "Your request could not be authenticated" - }, - "500": { - "description": "Please try again or report this error to the support" - } - }, - "summary": "On Delivery Confirmed", - "description": "Triggered by end user delivery status update. Updates the transaction with the delivery status returned by the end user's network operator. See https://boomerangmessaging.com/docs for more information", - "x-ms-trigger": "batch", - "operationId": "GETDRSTRIGGER", - "parameters": [ - { - "name": "ignore_previous", - "description": "Pass 'true' to exclude any DRs that have been retrieved previously", - "in": "query", - "type": "boolean", - "default": true, - "required": true, - "x-ms-visibility": "internal" - }, - { - "name": "drs_after", - "description": "Pass 'true' to exclude any DRs that have been retrieved previously", - "in": "query", - "type": "string", - "default": "1990-01-01 00:00:00", - "required": true, - "x-ms-visibility": "internal" - } - ], - "x-ms-trigger-metadata": { - "mode": "polling", - "kind": "query" - } - } - } - }, - "x-ms-connector-metadata": [ - { - "propertyName": "Website", - "propertyValue": "https://www.boomerangmessaging.com/products/boomApp/msconnector" - }, - { - "propertyName": "Privacy policy", - "propertyValue": "https://boomerangmessaging.com/privacy/" - }, - { - "propertyName": "Categories", - "propertyValue": "Communication;Productivity" - } - ], - "securityDefinitions": { - "basic_auth": { - "type": "basic" - } - }, - "security": [ - { - "basic_auth": [] - } - ], - "tags": [] +{ + "swagger": "2.0", + "info": { + "title": "Default title", + "description": "", + "version": "1.0" + }, + "host": "direct-api.apps.boomcomms.com", + "basePath": "/v1", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/sms1": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "SMS one-way", + "description": "SMS messages are delivered using an alpha-numeric originator (such as a company name) which must contain a maximum of 11 characters, and a recipient cannot respond to a message sent using an alpha numeric originator. Please also note that in destinations where delivery of messages with alpha-numeric originator is not supported (due to local restrictions), this may be replaced with a numeric originator, to ensure that the message is delivered.", + "operationId": "SMS1", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Originating Id for a 1-way message. An alpha numeric value containing a maximum of 11 characters.", + "title": "from" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + "", + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/sms2": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "SMS two-way", + "description": "This method allows replies to be tracked directly against each outbound transaction and is used to manage conversations between your system and the end user. Replies can be forwarded to an email address and customers with Boommail can send an email-2-SMS message back to the responder. See https://boomerangmessaging.com/docs/sending-sms-messages, for more information regarding 2-way and conversational messaging.", + "operationId": "SMS2", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "conversation_id": { + "type": "string", + "description": "Define a conversation ID to group all messages (including replies) part of the same conversation", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "validity_period": { + "type": "integer", + "format": "int32", + "description": "The period of time during which the number used to send the message will be active. Replies to the message will not be delivered after the validity period expires. For two- way messages, the minimum validity period is 1 day.", + "title": "" + }, + "open_ticket": { + "type": "boolean", + "description": "By default all messages are sent a single ticket which means that the message is closed on receipt of the first response. To match multiple responses to the same originating message, use open ticket by passing true.", + "title": "", + "enum": [ + "", + true, + false + ] + }, + "email_responses": { + "type": "string", + "description": "An email address to which message responses are forwarded.", + "title": "" + }, + "push_responses": { + "type": "string", + "description": "A CallBack URL to which message responses are posted.", + "title": "" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + "", + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/sms3": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "SMS custom number", + "description": "SMS messages are delivered using the number specified in the request so that any replies are returned to that number. Customers using Boomerang's Campaign feature can use a number associated to a Campaign, which allows inbound replies to to be accessed from the Campaign reporting section within Boomerang UI. However, unlike the SMS 2-way method, replies are not tracked against the outbound message. See https://boomerangmessaging.com/docs/sending-sms-messages for more information.", + "operationId": "SMS3", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "The sending Id associated to a message this could be an Inbound campaign number currently associated to an active Campaign.", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "The recipient's destination address" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + "", + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/voice": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "telephone_number": { + "type": "string", + "description": "telephone_number" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Make Voice Call", + "description": "A fixed number is used as the originator for a Text-To-Speech (TTS) voice call. Keystrokes \u20181\u2019 and \u20182\u2019 are used to accept or decline the message, \u20189\u2019 is used to redirect the call. See https://boomerangmessaging.com/docs/sending-delivering-voice-messages for more information", + "operationId": "VOICE", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "voice_intro": { + "type": "string", + "description": "The message played when the voice call is answered. The Message content will be played right after it.", + "title": "" + }, + "voice_thank_you": { + "type": "string", + "description": "The message played at the end of the voice call after the message content has been played.", + "title": "" + }, + "voice_redirect_message": { + "type": "string", + "description": "The message played at the end of the voice call after the message content has been played.", + "title": "" + }, + "voice_redirect_no": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "Redirect number", + "title": "" + } + }, + "description": "voice_redirect_no" + }, + "voice_retries": { + "type": "integer", + "format": "int32", + "description": "Number of attempts made if the voice call is not answered the first time.", + "title": "" + }, + "voice_delay": { + "type": "integer", + "format": "int32", + "description": "Time waited by the system between retries.", + "title": "" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "" + }, + "recipient_address": { + "type": "array", + "items": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The recipient's destination address; A mobile phone number that must contain a minimum of 11 digits (excluding + or leading '0') and a maximum of 16 digits (excluding a + where this is used as a pre-fix to the number itself). A single number or an array of up to 10,000 numbers can be passed.", + "title": "" + } + } + }, + "description": "recipient_address" + }, + "priority": { + "type": "boolean", + "description": "Optional parameter used to set a priority status to a message. Any messages sent with \u2018priority\u2019 will override \u2018Social Hours\u2019 configured against an account. Pass true to set priority.", + "title": "", + "enum": [ + "", + true, + false + ] + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional Identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/email": { + "post": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "parts_per_message": { + "type": "integer", + "format": "int32", + "description": "parts_per_message" + }, + "email_address": { + "type": "string", + "description": "email_address" + } + } + }, + "description": "transactions" + } + } + } + }, + "400": { + "description": "Your request could not be processed." + }, + "401": { + "description": "Your request could not be authenticated" + }, + "402": { + "description": "Your request could not be processed because of insufficient funds or other payment related issues." + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "Send Email", + "description": "Send single or bulk email messages. Emails are sent from the domain @boomerangui.com and it is possible to customise the Subject and to override the 'From' address. It is also possible to forward responses to an email address and / or a URL", + "operationId": "EMAIL", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "Pass the content to be used as the From address. If blank the default value will be taken from your account settings", + "title": "from" + }, + "email_subject": { + "type": "string", + "description": "Subject to be displayed by default when the email is received in the recipient's inbox", + "title": "email_subject" + }, + "message_content": { + "type": "string", + "description": "The content of the outbound message sent to all recipientAddresses.", + "title": "message_content" + }, + "email_address": { + "type": "array", + "items": { + "type": "string", + "description": "An email address. A single address or an array of up to 10,000 addresses can be passed.", + "title": "" + }, + "description": "email_address" + }, + "validity_period": { + "type": "integer", + "format": "int32", + "description": "The period of time during which the number used to send the message will be active. Replies to the message will not be delivered after the validity period expires. For two- way messages, the minimum validity period is 1 day.", + "title": "" + }, + "open_ticket": { + "type": "boolean", + "description": "By default all messages are sent a single ticket which means that the message is closed on receipt of the first response. To match multiple responses to the same originating message, use open ticket by passing true.", + "title": "", + "enum": [ + "", + true, + false + ] + }, + "email_responses": { + "type": "string", + "description": "An email address to which message responses are forwarded.", + "title": "" + }, + "push_responses": { + "type": "string", + "description": "A CallBack URL to which message responses are posted.", + "title": "" + }, + "unique_identifier": { + "type": "string", + "description": "Unique identifier for each transaction. This is used to safeguard against duplication of messages, as Boomerang will ignore any transactions with an Id that has been used previously.", + "title": "" + }, + "campaign_name": { + "type": "string", + "description": "Optional identifier that can be used to group messages by specific campaigns and batched messages.", + "title": "" + }, + "custom_parameter": { + "type": "string", + "description": "Parameter used for custom reference. This could be used for example as a Campaign reference, job reference, batch Id etc.", + "title": "" + } + } + } + } + ] + } + }, + "/get_responses": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "has_more": { + "type": "boolean", + "description": "has_more" + }, + "replies": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "custom_parameter": { + "type": "string", + "description": "custom_parameter" + }, + "response_id": { + "type": "string", + "description": "response_id" + }, + "from": { + "type": "string", + "description": "from" + }, + "response_content": { + "type": "string", + "description": "response_content" + }, + "is_new": { + "type": "boolean", + "description": "is_new" + }, + "transaction_date": { + "type": "string", + "description": "transaction_date" + }, + "response_date": { + "type": "string", + "description": "response_date" + } + } + }, + "description": "replies" + } + } + } + }, + "400": { + "description": "Your request could not be processed" + }, + "401": { + "description": "Your request could not be authenticated" + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "On SMS response submission", + "description": "Triggered by inbound replies which are automatically mapped to the associated outbound messages when sent as an Intelligent 2-way / conversational message", + "x-ms-trigger": "batch", + "operationId": "GESTRESPONSESTRIGGER", + "parameters": [ + { + "name": "ignore_previous", + "in": "query", + "required": true, + "type": "boolean", + "default": true, + "x-ms-visibility": "internal" + }, + { + "name": "mark_as_read", + "in": "query", + "required": true, + "type": "boolean", + "default": true, + "x-ms-visibility": "internal" + } + ], + "x-ms-trigger-metadata": { + "mode": "polling", + "kind": "query" + } + } + }, + "/get_all_new_drs": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "format": "int32", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "has_more": { + "type": "boolean", + "description": "has_more" + }, + "drs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "transaction_id": { + "type": "string", + "description": "transaction_id" + }, + "status": { + "type": "string", + "description": "status" + }, + "status_date": { + "type": "string", + "description": "status_date" + }, + "destination": { + "type": "string", + "description": "destination" + }, + "custom_parameter": { + "type": "string", + "description": "custom_parameter" + }, + "campaign_name": { + "type": "string", + "description": "campaign_name" + }, + "unique_id": { + "type": "string", + "description": "unique_id" + } + } + }, + "description": "drs" + } + } + } + }, + "400": { + "description": "Your request could not be processed" + }, + "401": { + "description": "Your request could not be authenticated" + }, + "500": { + "description": "Please try again or report this error to the support" + } + }, + "summary": "On Delivery Confirmed", + "description": "Triggered by end user delivery status update. Updates the transaction with the delivery status returned by the end user's network operator. See https://boomerangmessaging.com/docs for more information", + "x-ms-trigger": "batch", + "operationId": "GETDRSTRIGGER", + "parameters": [ + { + "name": "ignore_previous", + "description": "Pass 'true' to exclude any DRs that have been retrieved previously", + "in": "query", + "type": "boolean", + "default": true, + "required": true, + "x-ms-visibility": "internal" + }, + { + "name": "drs_after", + "description": "Pass 'true' to exclude any DRs that have been retrieved previously", + "in": "query", + "type": "string", + "default": "1990-01-01 00:00:00", + "required": true, + "x-ms-visibility": "internal" + } + ], + "x-ms-trigger-metadata": { + "mode": "polling", + "kind": "query" + } + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "security": [ + { + "basic_auth": [] + } + ], + "tags": [] } \ No newline at end of file diff --git a/certified-connectors/BoomappConnect/apiProperties.json b/certified-connectors/BoomappConnect/apiProperties.json index 20bc8a7f5..e151d9f01 100644 --- a/certified-connectors/BoomappConnect/apiProperties.json +++ b/certified-connectors/BoomappConnect/apiProperties.json @@ -1,36 +1,35 @@ -{ - "properties": { - "connectionParameters": { - "username": { - "type": "securestring", - "uiDefinition": { - "displayName": "username", - "description": "The username for this api", - "tooltip": "Provide the username", - "constraints": { - "tabIndex": 2, - "clearText": true, - "required": "true" - } - } - }, - "password": { - "type": "securestring", - "uiDefinition": { - "displayName": "password", - "description": "The password for this api", - "tooltip": "Provide the password", - "constraints": { - "tabIndex": 3, - "clearText": false, - "required": "true" - } - } - } - }, - "iconBrandColor": "#81bb26", - "capabilities": [], - "publisher": "AlfaPeople UK Ltd", - "stackOwner": "Boomerang I-Comms Ltd" - } +{ + "properties": { + "connectionParameters": { + "username": { + "type": "securestring", + "uiDefinition": { + "displayName": "username", + "description": "The username for this api", + "tooltip": "Provide the username", + "constraints": { + "tabIndex": 2, + "clearText": true, + "required": "true" + } + } + }, + "password": { + "type": "securestring", + "uiDefinition": { + "displayName": "password", + "description": "The password for this api", + "tooltip": "Provide the password", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#007ee5", + "capabilities": [], + "publisher": "MOD Administrator" + } } \ No newline at end of file From b36e00ce23b8a5a7c1eece2ce35b359963b50da4 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Tue, 15 Sep 2020 00:35:59 +0200 Subject: [PATCH 062/347] tyntec Viber Business (#438) * added tyntec-viber * remove intro * Fix: Brand color * minor Update * Readme updates * Returned: default responses Custom responses don't show in the Designer. * Responses update * quick typo fix * fixed typo * update Readme --- certified-connectors/tyntec-Viber/README.md | 17 ++- .../tyntec-Viber/apiDefinition.swagger.json | 112 ++++++++++-------- .../tyntec-Viber/apiProperties.json | 18 ++- 3 files changed, 87 insertions(+), 60 deletions(-) diff --git a/certified-connectors/tyntec-Viber/README.md b/certified-connectors/tyntec-Viber/README.md index 822b17578..2bac191d6 100644 --- a/certified-connectors/tyntec-Viber/README.md +++ b/certified-connectors/tyntec-Viber/README.md @@ -1,8 +1,10 @@ -## Tyntec Conversation API - Send Viber +## Tyntec Conversations API - Send Viber -Tyntec Conversation API allows you to send customized Viber messages. +Tyntec Conversations API allows you to send customized Viber messages. -### User Cases of this connector +Reach over 1 billion Viber users and interact with them to acquire new customers, expand your customer engagement, and provide customer care right on the messaging app. Use the connector to provide instant support for customer queries, notify delivery updates, send promotional offers with images and interactive buttons. + +### Use Cases of this connector - Use this connector in PowerApps Workflows (great for Marketing, CRM or Sales) - Send SMS messages using Azure Logic Apps - Build SMS support in your Microsoft Power Automate automatizations @@ -17,17 +19,14 @@ You will need the following to proceed: - [Viber Service ID](https://www.tyntec.com/viber-business-messages#contact) ## Supported requests -- **Send_Viber** using tyntec Conversation API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) +- **Send Viber** using tyntec Conversations API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) - To make a successful request, please, populate the followings fields: - - **apikey** - your tyntec API key - **to** - receiver's phone number in _international_ form without leading 00 (_E.g. 4989202451100_) - **from** - your Viber Service ID - - **contentType** - content type of your message, use **text** - - **channels key item** - used tyntec Conversation API channel, use **viber** - **text** - text of your Viber message -- **Status_Check** +- **Status Check** - To make a successful status check, please, provide the connector with the following values - - **apikey** - your tyntec API key + - **id** - messageID of your message (_returned after each request_) diff --git a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json index 20a7b2826..c9df624bb 100644 --- a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json @@ -1,14 +1,14 @@ { "swagger": "2.0", "info": { - "title": "tyntec-viber", - "description": "Send a Viber message using the tyntec Conversation API and retrieve its Status (accepted/delivered/failed) using Status_check.", + "title": "tyntec Viber", + "description": "Provides Viber communication channel using the tyntec Conversations API to expand your customer engagement", "contact": { "name": "tyntec support", "url": "https://www.tyntec.com/get-help-support", "email": "support@tyntec.com" }, - "version": "1.0" + "version": "1.1" }, "host": "api.tyntec.com", "basePath": "/", @@ -21,31 +21,33 @@ "/chat-api/v2/messages/": { "post": { "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "messageId": { - "type": "string", - "description": "messageId" - } + "202": { + "description": "Returned when the operation successfully connects to Conversations API", + "schema": { + "type": "object", + "properties": { + "messageId": { + "type": "string", + "description": "messageId", + "x-ms-visibility": "important" } } } }, + "400": { + "description": "There was an issue with your channel." + }, + "401": { + "description": "The Viber Service ID or WhatsApp Business Account Number is not authorized with used API key." + }, + "403" :{ + "description":"You attempting to use a number that is not assigned to your account" + } + }, "summary": "Send Viber Message", "description": "Send Viber Message", - "operationId": "Send_Viber", + "operationId": "SendViber", "parameters": [ - { - "name": "apikey", - "in": "header", - "required": true, - "type": "string", - "description": "Your tyntec API key with the Viber Service ID enabled.", - "x-ms-summary": "A tyntec API key" - }, { "name": "body", "in": "body", @@ -62,9 +64,10 @@ "type": "array", "items": { "type": "string", - "description": "The tyntec conversation API channel. Use Viber", + "description": "The Conversations API channel", "title": "Channel", - "default": "viber" + "default": "viber", + "x-ms-visibility": "internal" }, "description": "channels" }, @@ -73,7 +76,7 @@ "properties": { "from": { "type": "string", - "description": "Your Viber Service ID", + "description": "Viber Service ID", "title": "from" }, "components": { @@ -83,9 +86,10 @@ "properties": { "type": { "type": "string", - "description": "The type of your message. Use default text.", + "description": "Message type", "title": "type", - "default": "text" + "default": "text", + "x-ms-visibility": "internal" }, "text": { "type": "string", @@ -121,34 +125,44 @@ "/chat-api/v2/messages/{id}/status": { "get": { "responses": { - "default": { - "description": "default", + "202": { + "description": "Returned when the operation successfully connects to Conversations API", "schema": { "type": "object", "properties": { "messageId": { "type": "string", - "description": "messageId" + "description": "messageId", + "x-ms-visibility": "important" }, "deliveryChannel": { "type": "string", - "description": "deliveryChannel" + "description": "deliveryChannel", + "x-ms-visibility": "important" }, "status": { "type": "string", - "description": "status" + "description": "status", + "x-ms-visibility": "important" }, "timestamp": { "type": "string", - "description": "timestamp" + "description": "timestamp", + "x-ms-visibility": "important" } } } + }, + "404":{ + "description": "No message was found on given ID" + }, + "403":{ + "description": "Invalid authentication credentials" } }, "summary": "Status Check", "description": "Check for status of your message", - "operationId": "Status_Check", + "operationId": "StatusCheck", "parameters": [ { "name": "id", @@ -156,20 +170,25 @@ "required": true, "type": "string", "description": "Message ID", - "x-ms-summary": "ID of the checked Message" - }, - { - "name": "apikey", - "in": "header", - "required": true, - "type": "string", - "description": "Your tyntec API key", - "x-ms-summary": "Your tyntec API key" + "x-ms-summary": "Message ID", + "x-ms-url-encoding": "single" } ] } } }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "in": "header", + "name": "apikey" + } + }, + "security": [], + "tags": [], "x-ms-connector-metadata": [ { "propertyName": "Website", @@ -183,11 +202,6 @@ "propertyName": "Categories", "propertyValue": "Communication;Marketing" } - ], - "definitions": {}, - "parameters": {}, - "responses": {}, - "securityDefinitions": {}, - "security": [], - "tags": [] + ] + } \ No newline at end of file diff --git a/certified-connectors/tyntec-Viber/apiProperties.json b/certified-connectors/tyntec-Viber/apiProperties.json index 4972b42d6..a3f025138 100644 --- a/certified-connectors/tyntec-Viber/apiProperties.json +++ b/certified-connectors/tyntec-Viber/apiProperties.json @@ -1,7 +1,21 @@ { "properties": { - "connectionParameters": {}, - "iconBrandColor": "#F99831", + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "apikey", + "description": "The apikey for this api", + "tooltip": "Provide your apikey", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#F8981D", "capabilities": [], "publisher": "tyntec GmbH", "stackOwner": "tyntec GmbH" From 38623fcb08c23926f426b26fc0c938b5ce9941c1 Mon Sep 17 00:00:00 2001 From: Jasey Waegebaert <38426621+Jwaegebaert@users.noreply.github.com> Date: Tue, 15 Sep 2020 22:56:51 +0200 Subject: [PATCH 063/347] GroupMgr change API endpoint (#447) * connector init * delimiter missing * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * Folder change * Request changes * Azure pipeline error fixes * Change approval array to internal * Change api endpoint Co-authored-by: Jasey Waegebaert Co-authored-by: Marc Co-authored-by: Marc Hochleutner --- certified-connectors/GroupMgr/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/GroupMgr/apiDefinition.swagger.json b/certified-connectors/GroupMgr/apiDefinition.swagger.json index 4b386b68d..6a930863e 100644 --- a/certified-connectors/GroupMgr/apiDefinition.swagger.json +++ b/certified-connectors/GroupMgr/apiDefinition.swagger.json @@ -10,7 +10,7 @@ "email": "support@groupmgr.com" } }, - "host": "vragroupmanagerapprovalflow.azurewebsites.net", + "host": "vragroupmanagerapprovalflow-h8tvt-uzi02fbsspubp3eg.azurewebsites.net", "basePath": "/", "schemes": [ "https" From 4d36612c725c18b3f3b7665485262abf784a77ab Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Thu, 17 Sep 2020 19:27:10 +0200 Subject: [PATCH 064/347] Update name (#450) Updates names to be the same as other connectors --- certified-connectors/tyntec-Viber/apiDefinition.swagger.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json index c9df624bb..9d6cec159 100644 --- a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "tyntec Viber", + "title": "tyntec Viber Business", "description": "Provides Viber communication channel using the tyntec Conversations API to expand your customer engagement", "contact": { "name": "tyntec support", @@ -204,4 +204,4 @@ } ] -} \ No newline at end of file +} From e119432ba16274788ec716dd6bf170f97fdcd55a Mon Sep 17 00:00:00 2001 From: Waldek Mastykarz Date: Thu, 17 Sep 2020 22:51:34 +0200 Subject: [PATCH 065/347] Updates Rencore Governance connector (#425) --- .../apiDefinition.swagger.json | 956 +++++++++++------- .../Rencore Governance/apiProperties.json | 57 +- 2 files changed, 624 insertions(+), 389 deletions(-) diff --git a/certified-connectors/Rencore Governance/apiDefinition.swagger.json b/certified-connectors/Rencore Governance/apiDefinition.swagger.json index 18d66bcd7..29ca2f726 100644 --- a/certified-connectors/Rencore Governance/apiDefinition.swagger.json +++ b/certified-connectors/Rencore Governance/apiDefinition.swagger.json @@ -1,239 +1,41 @@ { - "basePath": "/api/", - "consumes": [], - "definitions": { - "policyResultResource": { - "properties": { - "Enabled": { - "default": false, - "description": "True if the resource is enabled and false if it's disabled", - "title": "Enabled", - "type": "boolean" - }, - "Id": { - "default": "", - "description": "Unique ID of the resource", - "pattern": "^(.*)$", - "title": "ID", - "type": "string" - }, - "LastUsed": { - "default": "", - "description": "Date and time when the resource was last used", - "pattern": "^(.*)$", - "title": "Last-used date and time", - "type": "string" - }, - "Name": { - "default": "", - "description": "Name of the resource", - "pattern": "^(.*)$", - "title": "Name", - "type": "string" - }, - "NonCompliantSince": { - "default": "", - "description": "Date and time when the analysis discovered the resource as being non-compliant with the policy", - "pattern": "^(.*)$", - "title": "Non-compliant since", - "type": "string" - }, - "Owners": { - "description": "List of principals who own this resource", - "items": { - "$ref": "#/definitions/policyResultResourcePrincipalWithoutResources" - }, - "title": "Owners", - "type": "array" - }, - "Type": { - "default": "", - "description": "Type of the resource", - "pattern": "^(.*)$", - "title": "Type", - "type": "string" - }, - "Url": { - "default": "", - "description": "URL to access the resource in the browser", - "pattern": "^(.*)$", - "title": "URL", - "type": "string" - }, - "Users": { - "description": "List of principals who use this resource", - "items": { - "$ref": "#/definitions/policyResultResourcePrincipalWithoutResources" - }, - "title": "Users", - "type": "array" - } - }, - "required": [ - "Type", - "Name", - "Url", - "Id", - "NonCompliantSince", - "Enabled", - "LastUsed" - ], - "type": "object" - }, - "policyResultResourcePrincipal": { - "properties": { - "Email": { - "default": "", - "description": "Person's e-mail address", - "pattern": "^(.*)$", - "title": "E-mail", - "type": "string" - }, - "Name": { - "default": "", - "description": "User's or group's display name", - "pattern": "^(.*)$", - "title": "Name", - "type": "string" - }, - "OwnedNonCompliantResources": { - "description": "Non-compliant resources owned by this principal", - "items": { - "$ref": "#/definitions/policyResultResourceWithoutPrincipals" - }, - "title": "Owned non-compliant resources", - "type": "array" - }, - "Type": { - "default": "", - "description": "Type of principal", - "pattern": "^(.*)$", - "title": "Type", - "type": "string" - }, - "UsedNonCompliantResources": { - "description": "Non-compliant resources used by this principal", - "items": { - "$ref": "#/definitions/policyResultResourceWithoutPrincipals" - }, - "title": "Used non-compliant resources", - "type": "array" - } - }, - "required": [ - "Name", - "Type" - ], - "type": "object" - }, - "policyResultResourcePrincipalWithoutResources": { - "properties": { - "Email": { - "default": "", - "description": "Person's e-mail address", - "pattern": "^(.*)$", - "title": "E-mail", - "type": "string" - }, - "Name": { - "default": "", - "description": "User's or group's display name", - "pattern": "^(.*)$", - "title": "Name", - "type": "string" - }, - "Type": { - "default": "", - "description": "Type of principal", - "pattern": "^(.*)$", - "title": "Type", - "type": "string" - } - }, - "required": [ - "Name", - "Type" - ], - "type": "object" - }, - "policyResultResourceWithoutPrincipals": { - "properties": { - "Enabled": { - "default": false, - "description": "True if the resource is enabled and false if it's disabled", - "title": "Enabled", - "type": "boolean" - }, - "Id": { - "default": "", - "description": "Unique ID of the resource", - "pattern": "^(.*)$", - "title": "ID", - "type": "string" - }, - "LastUsed": { - "default": "", - "description": "Date and time when the resource was last used", - "pattern": "^(.*)$", - "title": "Last-used date and time", - "type": "string" - }, - "Name": { - "default": "", - "description": "Name of the resource", - "pattern": "^(.*)$", - "title": "Name", - "type": "string" - }, - "NonCompliantSince": { - "default": "", - "description": "Date and time when the analysis discovered the resource as being non-compliant with the policy", - "pattern": "^(.*)$", - "title": "Non-compliant since", - "type": "string" - }, - "Type": { - "default": "", - "description": "Type of the resource", - "pattern": "^(.*)$", - "title": "Type", - "type": "string" - }, - "Url": { - "default": "", - "description": "URL to access the resource in the browser", - "pattern": "^(.*)$", - "title": "URL", - "type": "string" - } - }, - "required": [ - "Type", - "Name", - "Url", - "Id", - "NonCompliantSince", - "Enabled", - "LastUsed" - ], - "type": "object" - } - }, - "host": "api-app.rencore.com", + "swagger": "2.0", "info": { "description": "Rencore Governance helps you to automate managing your Office 365 tenant.", "title": "Rencore Governance", "version": "1.0", - "x-ms-api-annotation": { - "status": "Preview" + "contact": { + "name": "Rencore support", + "url": "https://rencore.com", + "email": "support@rencore.com" } }, - "parameters": {}, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://rencore.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "http://url.rencore.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "IT Operations;Security" + } + ], + "host": "app.rencore.com", + "basePath": "/api/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], "paths": { - "/v1/apps": { + "/v1/workspaces": { "get": { - "description": "Get connected tenants", - "operationId": "GetApps", + "description": "Get workspaces", + "operationId": "GetWorkspaces", "parameters": [], "responses": { "200": { @@ -268,62 +70,27 @@ "description": "Not Found" } }, - "summary": "Get connected tenants", + "summary": "Get workspaces", "x-ms-visibility": "internal" } }, - "/v1/apps/{appId}/policies/{policyId}/hooks/{hookId}": { - "delete": { - "description": "Delete hook", - "operationId": "DeleteHook", - "parameters": [ - { - "in": "path", - "name": "appId", - "required": true, - "type": "string", - "x-ms-url-encoding": "single" - }, - { - "in": "path", - "name": "policyId", - "required": true, - "type": "string", - "x-ms-url-encoding": "single" - }, - { - "in": "path", - "name": "hookId", - "required": true, - "type": "string", - "x-ms-url-encoding": "single" - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request" - }, - "404": { - "description": "Not Found" - } - }, - "summary": "Delete hook", - "x-ms-visibility": "internal" - } - }, - "/v1/apps/{appId}/policies": { + "/v1/workspaces/{workspaceId}/environments": { "get": { - "description": "Get available policies", - "operationId": "GetPolicies", + "description": "Get connected environments", + "operationId": "GetEnvironments", "parameters": [ { + "description": "Workspace for which you want to receive notifications", "in": "path", - "name": "appId", + "name": "workspaceId", "required": true, "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Workspace", "x-ms-url-encoding": "single" } ], @@ -360,14 +127,96 @@ "description": "Not Found" } }, - "summary": "Get available policies", + "summary": "Get connected environments", "x-ms-visibility": "internal" } }, - "/v1/apps/{appId}/policies/{policyId}/hooks": { + "/v1/workspaces/{workspaceId}/environments/{environmentId}/checks": { + "get": { + "description": "Get available checks", + "operationId": "GetChecks", + "parameters": [ + { + "description": "Workspace for which you want to receive notifications", + "in": "path", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Workspace", + "x-ms-url-encoding": "single" + }, + { + "description": "Environment for which you want to receive notifications", + "in": "path", + "name": "environmentId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetEnvironments", + "parameters": { + "workspaceId": { + "parameter": "workspaceId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Environment", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Type:": { + "description": "Content-Type:", + "type": "string" + } + }, + "schema": { + "items": { + "properties": { + "id": { + "description": "id", + "type": "string" + }, + "name": { + "description": "name", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "400": { + "description": "Bad Request" + }, + "404": { + "description": "Not Found" + } + }, + "summary": "Get available checks", + "x-ms-visibility": "internal" + } + }, + "/v1/workspaces/{workspaceId}/environments/{environmentId}/checks/{checkId}/hooks": { + "x-ms-notification-content": { + "description": "200", + "schema": { + "properties": {} + } + }, "post": { - "description": "Get notified of changes in your Office 365 tenant monitored by Rencore Governance", - "operationId": "PolicyNotificationTrigger", + "description": "Get notified of changes in your environment monitored by Rencore Governance", + "operationId": "CheckNotificationTrigger", "consumes": [ "application/json" ], @@ -376,36 +225,58 @@ ], "parameters": [ { - "description": "Tenant for which you want to receive notifications", + "description": "Workspace for which you want to receive notifications", "in": "path", - "name": "appId", + "name": "workspaceId", "required": true, "type": "string", "x-ms-dynamic-values": { - "operationId": "GetApps", + "operationId": "GetWorkspaces", "value-path": "id", "value-title": "name" }, - "x-ms-summary": "Tenant", + "x-ms-summary": "Workspace", "x-ms-url-encoding": "single" }, { - "description": "Policy for which you want to receive notifications", + "description": "Environment for which you want to receive notifications", "in": "path", - "name": "policyId", + "name": "environmentId", "required": true, "type": "string", "x-ms-dynamic-values": { - "operationId": "GetPolicies", + "operationId": "GetEnvironments", "parameters": { - "appId": { - "parameter": "appId" + "workspaceId": { + "parameter": "workspaceId" } }, "value-path": "id", "value-title": "name" }, - "x-ms-summary": "Policy", + "x-ms-summary": "Environment", + "x-ms-url-encoding": "single" + }, + { + "description": "Check for which you want to receive notifications", + "in": "path", + "name": "checkId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetChecks", + "parameters": { + "workspaceId": { + "parameter": "workspaceId" + }, + "environmentId": { + "parameter": "environmentId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Check", "x-ms-url-encoding": "single" }, { @@ -440,85 +311,460 @@ "description": "Not Found" } }, - "summary": "When an Office 365 policy in Rencore Governance is violated", + "summary": "When a check in Rencore Governance is violated", "x-ms-trigger": "single" - }, - "x-ms-notification-content": { - "description": "Policy results", - "schema": { - "properties": { - "AffectedUsers": { - "default": [], - "description": "Users affected by the non-compliant resources they either own or use", - "items": { - "$ref": "#/definitions/policyResultResourcePrincipal" + } + }, + "/v1/workspaces/{workspaceId}/environments/{environmentId}/checks/{checkId}/hooks/{hookId}": { + "delete": { + "description": "Delete hook", + "operationId": "DeleteHook", + "parameters": [ + { + "in": "path", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-url-encoding": "single" + }, + { + "in": "path", + "name": "environmentId", + "required": true, + "type": "string", + "x-ms-url-encoding": "single" + }, + { + "in": "path", + "name": "checkId", + "required": true, + "type": "string", + "x-ms-url-encoding": "single" + }, + { + "in": "path", + "name": "hookId", + "required": true, + "type": "string", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request" + }, + "404": { + "description": "Not Found" + } + }, + "summary": "Delete hook", + "x-ms-visibility": "internal" + } + }, + "/v1/workspaces/{workspaceId}/environments/{environmentId}/checks/{checkId}/results": { + "get": { + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "checkInfo": { + "description": "Information about the violated check", + "properties": { + "id": { + "title": "ID", + "description": "ID of the violated check", + "type": "string" + }, + "name": { + "title": "Name", + "description": "Name of the violated check", + "type": "string" + }, + "description": { + "title": "Description", + "description": "Description of the violated check", + "type": "string" + }, + "category": { + "title": "Category", + "description": "Category of the violated check", + "type": "string" + }, + "targetService": { + "title": "Service", + "description": "Microsoft 365 service in which the check was violated", + "type": "string" + }, + "severity": { + "title": "Severity", + "description": "Severity of the violated check", + "type": "string" + }, + "totalCount": { + "title": "" + } + }, + "type": "object" + }, + "affectedUsers": { + "default": [], + "description": "Users affected by the non-compliant resources they either own or use", + "items": { + "$ref": "#/definitions/violationResourcePrincipal" + }, + "title": "Affected users", + "type": "array" + }, + "nonCompliantResources": { + "default": [], + "description": "List of resources that violate the check", + "items": { + "$ref": "#/definitions/violationResource" + }, + "title": "Non-compliant resources", + "type": "array" + }, + "totalAffectedUsers": { + "default": 0, + "description": "The total number of users affected by the non-compliant resources they either own or use", + "title": "Number of affected users", + "type": "integer" + }, + "totalNonCompliantResources": { + "default": 0, + "description": "The total number of resources that violate the check", + "title": "Number of non-compliant resources", + "type": "integer" + }, + "totalResources": { + "default": 0, + "description": "The total number of resources analyzed by the check", + "title": "Number of resources analyzed", + "type": "integer" + } }, - "title": "Affected users", - "type": "array" - }, - "NonCompliantResources": { - "default": [], - "description": "List of resources that violate the policy", - "items": { - "$ref": "#/definitions/policyResultResource" - }, - "title": "Non-compliant resources", - "type": "array" - }, - "TotalAffectedUsers": { - "default": 0, - "description": "The total number of users affected by the non-compliant resources they either own or use", - "title": "Number of affected users", - "type": "integer" - }, - "TotalNonCompliantResources": { - "default": 0, - "description": "The total number of resources that violate the policy", - "title": "Number of non-compliant resources", - "type": "integer" - }, - "TotalResources": { - "default": 0, - "description": "The total number of resources analyzed by the policy", - "title": "Number of resources analyzed", - "type": "integer" + "required": [ + "checkInfo", + "totalResources", + "totalNonCompliantResources", + "totalAffectedUsers", + "nonCompliantResources", + "affectedUsers" + ], + "type": "object" } }, - "required": [ - "TotalResources", - "TotalNonCompliantResources", - "TotalAffectedUsers", - "NonCompliantResources", - "AffectedUsers" - ], - "type": "object" - } + "400": { + "description": "Bad Request" + }, + "404": { + "description": "Not Found" + } + }, + "summary": "Get check violations", + "description": "Get check violations", + "operationId": "GetViolations", + "parameters": [ + { + "description": "Workspace for which you want to receive notifications", + "in": "path", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Workspace", + "x-ms-url-encoding": "single" + }, + { + "description": "Environment for which you want to receive notifications", + "in": "path", + "name": "environmentId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetEnvironments", + "parameters": { + "workspaceId": { + "parameter": "workspaceId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Environment", + "x-ms-url-encoding": "single" + }, + { + "description": "Check for which you want to receive notifications", + "in": "path", + "name": "checkId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetChecks", + "parameters": { + "workspaceId": { + "parameter": "workspaceId" + }, + "environmentId": { + "parameter": "environmentId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Check", + "x-ms-url-encoding": "single" + } + ] } } }, - "produces": [], + "definitions": { + "violationResource": { + "properties": { + "enabled": { + "default": false, + "description": "True if the resource is enabled and false if it's disabled", + "title": "Enabled", + "type": "boolean" + }, + "id": { + "default": "", + "description": "Unique ID of the resource", + "pattern": "^(.*)$", + "title": "ID", + "type": "string" + }, + "lastUsed": { + "default": "", + "description": "Date and time when the resource was last used", + "pattern": "^(.*)$", + "title": "Last-used date and time", + "type": "string" + }, + "name": { + "default": "", + "description": "Name of the resource", + "pattern": "^(.*)$", + "title": "Name", + "type": "string" + }, + "nonCompliantSince": { + "default": "", + "description": "Date and time when the analysis discovered the resource as being non-compliant with the check", + "pattern": "^(.*)$", + "title": "Non-compliant since", + "type": "string" + }, + "owners": { + "description": "List of principals who own this resource", + "items": { + "$ref": "#/definitions/violationResourcePrincipalWithoutResources" + }, + "title": "Owners", + "type": "array" + }, + "type": { + "default": "", + "description": "Type of the resource", + "pattern": "^(.*)$", + "title": "Type", + "type": "string" + }, + "url": { + "default": "", + "description": "URL to access the resource in the browser", + "pattern": "^(.*)$", + "title": "URL", + "type": "string" + }, + "users": { + "description": "List of principals who use this resource", + "items": { + "$ref": "#/definitions/violationResourcePrincipalWithoutResources" + }, + "title": "Users", + "type": "array" + } + }, + "required": [ + "type", + "name", + "url", + "id", + "nonCompliantSince", + "enabled", + "lastUsed" + ], + "type": "object" + }, + "violationResourcePrincipal": { + "properties": { + "email": { + "default": "", + "description": "Person's e-mail address", + "pattern": "^(.*)$", + "title": "E-mail", + "type": "string" + }, + "name": { + "default": "", + "description": "User's or group's display name", + "pattern": "^(.*)$", + "title": "Name", + "type": "string" + }, + "ownedNonCompliantResources": { + "description": "Non-compliant resources owned by this principal", + "items": { + "$ref": "#/definitions/violationResourceWithoutPrincipals" + }, + "title": "Owned non-compliant resources", + "type": "array" + }, + "type": { + "default": "", + "description": "Type of principal", + "pattern": "^(.*)$", + "title": "Type", + "type": "string" + }, + "usedNonCompliantResources": { + "description": "Non-compliant resources used by this principal", + "items": { + "$ref": "#/definitions/violationResourceWithoutPrincipals" + }, + "title": "Used non-compliant resources", + "type": "array" + } + }, + "required": [ + "name", + "type" + ], + "type": "object" + }, + "violationResourcePrincipalWithoutResources": { + "properties": { + "email": { + "default": "", + "description": "Person's e-mail address", + "pattern": "^(.*)$", + "title": "E-mail", + "type": "string" + }, + "name": { + "default": "", + "description": "User's or group's display name", + "pattern": "^(.*)$", + "title": "Name", + "type": "string" + }, + "type": { + "default": "", + "description": "Type of principal", + "pattern": "^(.*)$", + "title": "Type", + "type": "string" + } + }, + "required": [ + "name", + "type" + ], + "type": "object" + }, + "violationResourceWithoutPrincipals": { + "properties": { + "enabled": { + "default": false, + "description": "True if the resource is enabled and false if it's disabled", + "title": "Enabled", + "type": "boolean" + }, + "id": { + "default": "", + "description": "Unique ID of the resource", + "pattern": "^(.*)$", + "title": "ID", + "type": "string" + }, + "lastUsed": { + "default": "", + "description": "Date and time when the resource was last used", + "pattern": "^(.*)$", + "title": "Last-used date and time", + "type": "string" + }, + "name": { + "default": "", + "description": "Name of the resource", + "pattern": "^(.*)$", + "title": "Name", + "type": "string" + }, + "nonCompliantSince": { + "default": "", + "description": "Date and time when the analysis discovered the resource as being non-compliant with the check", + "pattern": "^(.*)$", + "title": "Non-compliant since", + "type": "string" + }, + "type": { + "default": "", + "description": "Type of the resource", + "pattern": "^(.*)$", + "title": "Type", + "type": "string" + }, + "url": { + "default": "", + "description": "URL to access the resource in the browser", + "pattern": "^(.*)$", + "title": "URL", + "type": "string" + } + }, + "required": [ + "type", + "name", + "url", + "id", + "nonCompliantSince", + "enabled", + "lastUsed" + ], + "type": "object" + } + }, + "parameters": {}, "responses": {}, - "schemes": [ - "https" - ], + "securityDefinitions": { + "undefined": { + "type": "oauth2", + "flow": "accessCode", + "authorizationUrl": "https://rencoreb2c.b2clogin.com/rencoreb2c.onmicrosoft.com/B2C_1A_signup_signin_platform/oauth2/v2.0/authorize", + "tokenUrl": "https://rencoreb2c.b2clogin.com/rencoreb2c.onmicrosoft.com/B2C_1A_signup_signin_platform/oauth2/v2.0/token", + "scopes": { + "1d69539f-d94e-4763-b992-622c1b9dcd50": "1d69539f-d94e-4763-b992-622c1b9dcd50" + } + } + }, "security": [ { - "oauth2_auth": [ - "user_impersonation" + "undefined": [ + "1d69539f-d94e-4763-b992-622c1b9dcd50" ] } ], - "securityDefinitions": { - "oauth2_auth": { - "authorizationUrl": "https://login.windows.net/common/oauth2/authorize", - "flow": "accessCode", - "scopes": { - "user_impersonation": "user_impersonation" - }, - "tokenUrl": "https://login.windows.net/common/oauth2/authorize", - "type": "oauth2" - } - }, - "swagger": "2.0", "tags": [] } \ No newline at end of file diff --git a/certified-connectors/Rencore Governance/apiProperties.json b/certified-connectors/Rencore Governance/apiProperties.json index d2435c78c..ff4727c94 100644 --- a/certified-connectors/Rencore Governance/apiProperties.json +++ b/certified-connectors/Rencore Governance/apiProperties.json @@ -1,47 +1,36 @@ { "properties": { - "capabilities": [], "connectionParameters": { "token": { + "type": "oauthSetting", "oAuthSettings": { - "clientId": "a21b25b4-683e-4e5e-bc63-d6d36a702135", - "customParameters": { - "loginUri": { - "value": "https://login.windows.net" - }, - "resourceUri": { - "value": "a21b25b4-683e-4e5e-bc63-d6d36a702135" - }, - "tenantId": { - "value": "common" - } - }, - "identityProvider": "aad", - "properties": { - "AzureActiveDirectoryResourceId": "a21b25b4-683e-4e5e-bc63-d6d36a702135", - "IsFirstParty": "False" - }, + "identityProvider": "oauth2", + "clientId": "fa5d07b5-8a68-4c1d-997f-6248d6617d32", + "scopes": [ + "1d69539f-d94e-4763-b992-622c1b9dcd50" + ], "redirectMode": "Global", "redirectUrl": "https://global.consent.azure-apim.net/redirect", - "scopes": [ - "user_impersonation" - ] - }, - "type": "oauthSetting" - }, - "token:TenantId": { - "metadata": { - "sourceType": "AzureActiveDirectoryTenant" - }, - "type": "string", - "uiDefinition": { - "constraints": { - "hidden": "true", - "required": "false" + "properties": { + "IsFirstParty": "False" + }, + "customParameters": { + "authorizationUrl": { + "value": "https://rencoreb2c.b2clogin.com/rencoreb2c.onmicrosoft.com/B2C_1A_signup_signin_platform/oauth2/v2.0/authorize" + }, + "tokenUrl": { + "value": "https://rencoreb2c.b2clogin.com/rencoreb2c.onmicrosoft.com/B2C_1A_signup_signin_platform/oauth2/v2.0/token" + }, + "refreshUrl": { + "value": "https://rencoreb2c.b2clogin.com/rencoreb2c.onmicrosoft.com/B2C_1A_signup_signin_platform/oauth2/v2.0/token" + } } } } }, - "iconBrandColor": "#00263D" + "iconBrandColor": "#00263D", + "capabilities": [], + "publisher": "Rencore GmbH", + "stackOwner": "Rencore GmbH" } } \ No newline at end of file From 4808010ed134e7094f5342ae492871fce35620d1 Mon Sep 17 00:00:00 2001 From: Agilit-e Date: Thu, 17 Sep 2020 23:06:37 +0200 Subject: [PATCH 066/347] Agilite (#387) * Added Agilit-e Connector Files to Repo * Finalized README for Agilit-e Connector * Added x-ms-connector-metadata * Adhoc fixes * Adhoc Fix * Added policyTemplateInstances to apiProperties Co-authored-by: John Jardin --- .../agilite/apiDefinition.swagger.json | 2166 +++++++++++++++++ .../agilite/apiProperties.json | 44 + certified-connectors/agilite/readme.md | 42 + 3 files changed, 2252 insertions(+) create mode 100644 certified-connectors/agilite/apiDefinition.swagger.json create mode 100644 certified-connectors/agilite/apiProperties.json create mode 100644 certified-connectors/agilite/readme.md diff --git a/certified-connectors/agilite/apiDefinition.swagger.json b/certified-connectors/agilite/apiDefinition.swagger.json new file mode 100644 index 000000000..58cfadcbc --- /dev/null +++ b/certified-connectors/agilite/apiDefinition.swagger.json @@ -0,0 +1,2166 @@ +{ + "swagger": "2.0", + "info": { + "contact": { + "email": "support@agilite.io", + "name": "Agilit-e Support Team", + "url": "https://agilite.io" + }, + "description": "Agilit-e enables you to centralize your business logic and processes and expose them as microservices to new or existing applications. With the Agilit-e connector, you gain access to many services including Business Process Management (BPM), Roles, Keywords, Templates and more.", + "title": "Agilite", + "version": "6.1", + "x-ms-api-annotation": { + "status": "Preview" + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://agilite.io" + }, + { + "propertyName": "Privacy Policy", + "propertyValue": "https://agilite.io/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "IT Operations" + } + ], + "basePath": "/", + "consumes": [], + "definitions": { + "BadRequest": { + "properties": { + "additionalMessages": { + "description": "List of additional messages that could be returned related to the failed response", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Additional Messages" + }, + "errorMessage": { + "description": "Description of error that occurred", + "type": "string", + "x-ms-summary": "Error Message" + }, + "statusCode": { + "description": "Response code of HTTP request", + "type": "number", + "x-ms-summary": "Status Code" + } + }, + "type": "object" + }, + "ExecuteBPMResult": { + "properties": { + "description": { + "description": "A short description explaining the Process Step", + "type": "string", + "x-ms-summary": "Process Step Description" + }, + "duration": { + "description": "The SLA Duration in hours. Provide a value of 0 if not applicable", + "type": "string", + "x-ms-summary": "SLA Duration (Hrs)" + }, + "eventStamp": { + "description": "An Event Stamp for the current Process Step", + "type": "string", + "x-ms-summary": "Process Step Event Stamp" + }, + "instructions": { + "description": "Instructions to Responsible User during Step", + "type": "string", + "x-ms-summary": "Step Instructions" + }, + "key": { + "description": "A unique key to identify the Process Step", + "type": "string", + "x-ms-summary": "Process Step Key" + }, + "name": { + "description": "A short name for the Process Step", + "type": "string", + "x-ms-summary": "Process Step Name" + }, + "processKey": { + "description": "A unique key to identify the BPM Profile", + "type": "string", + "x-ms-summary": "BPM Profile Key" + }, + "processStage": { + "description": "A key that defines the Process Stage of the current Step", + "type": "string", + "x-ms-summary": "Process Stage" + }, + "responsibility": { + "description": "User/Role Based Responsibility", + "type": "string", + "x-ms-summary": "Responsibility Type" + }, + "responsibleRole": { + "description": "The role responsible for the current Process Step", + "type": "string", + "x-ms-summary": "Process Step Responsible Role" + }, + "responsibleUsers": { + "description": "The users responsible for the current Process Step", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Process Step Responsible Users" + }, + "stepOptions": { + "items": { + "properties": { + "description": { + "description": "A short description explaining the Step Option", + "type": "string", + "x-ms-summary": "Step Option Description" + }, + "eventStamp": { + "description": "An Event Stamp for the current Step Option", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Step Option Event Stamp" + }, + "name": { + "description": "A short name for the Step Option", + "type": "string", + "x-ms-summary": "Step Option Name" + }, + "nextStep": { + "description": "The next step the business process will be routed to. Leave empty if no further steps", + "type": "string", + "x-ms-summary": "Next Step" + }, + "notes": { + "description": "Optional Notes for Step Option", + "type": "string", + "x-ms-summary": "Step Option Notes" + }, + "visibleObjects": { + "items": { + "properties": { + "id": { + "description": "The id of the component that gets referenced in the UI", + "type": "string", + "x-ms-summary": "Step Option Object Id" + }, + "inputOptions": { + "properties": { + "choices": { + "items": { + "properties": { + "label": { + "description": "A label for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Label" + }, + "value": { + "description": "A value for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "description": "A label defining the input field or editable component", + "type": "string", + "x-ms-summary": "Input Options Label" + }, + "messages": { + "description": "Messages to be used when Input Options validation fails", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Input Options Messages" + }, + "type": { + "description": "Defines the type of input field or editable component to be used", + "type": "string", + "x-ms-summary": "Input Options Type" + } + }, + "type": "object" + }, + "isEditable": { + "description": "Is the component referenced editable for user input", + "type": "boolean", + "x-ms-summary": "Is Step Option Object Editable" + }, + "isMandatory": { + "description": "Does the component referenced require user input", + "type": "boolean", + "x-ms-summary": "Is Step Option Object Mandatory" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "visibleObjects": { + "items": { + "properties": { + "id": { + "description": "The id of the component that gets referenced in the UI", + "type": "string", + "x-ms-summary": "Process Step Object Id" + }, + "inputOptions": { + "properties": { + "choices": { + "items": { + "properties": { + "label": { + "description": "A label for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Label" + }, + "value": { + "description": "A value for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "description": "A label defining the input field or editable component", + "type": "string", + "x-ms-summary": "Input Options Label" + }, + "messages": { + "description": "Messages to be used when Input Options validation fails", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Input Options Messages" + }, + "type": { + "description": "Defines the type of input field or editable component to be used", + "type": "string", + "x-ms-summary": "Input Options Type" + } + }, + "type": "object" + }, + "isEditable": { + "description": "Is the component referenced editable for user input", + "type": "boolean", + "x-ms-summary": "Is Process Step Object Editable" + }, + "isMandatory": { + "description": "Does the component referenced require user input", + "type": "boolean", + "x-ms-summary": "Is Process Step Object Mandatory" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "GetBPMProfile": { + "properties": { + "appAdmin": { + "items": { + "properties": { + "email": { + "description": "An email address for the Admin of the current BPM profile", + "type": "string", + "x-ms-summary": "App Admin Email" + } + }, + "type": "object" + }, + "type": "array" + }, + "appUrl": { + "description": "An optional url for the app that makes use of the current BPM profile", + "type": "string", + "x-ms-summary": "BPM App URL" + }, + "description": { + "description": "A short description explaining the BPM profile", + "type": "string", + "x-ms-summary": "BPM Profile Description" + }, + "groupName": { + "description": "An optional grouping for the BPM profile", + "type": "string", + "x-ms-summary": "BPM Profile Group Name" + }, + "key": { + "description": "A unique key to identify the BPM Profile", + "type": "string", + "x-ms-summary": "BPM Profile Key" + }, + "name": { + "description": "A short name for the BPM profile", + "type": "string", + "x-ms-summary": "BPM Profile Name" + }, + "notes": { + "description": "Optional Notes for BPM Profile", + "type": "string", + "x-ms-summary": "BPM Profile Notes" + }, + "processSteps": { + "items": { + "properties": { + "description": { + "description": "A short description explaining the Process Step", + "type": "string", + "x-ms-summary": "Process Step Description" + }, + "duration": { + "description": "The SLA Duration in hours. Provide a value of 0 if not applicable", + "type": "string", + "x-ms-summary": "SLA Duration (Hrs)" + }, + "firstStep": { + "description": "Specify if the Process Step record is the first step in the Business Process", + "type": "boolean", + "x-ms-summary": "Is First Step" + }, + "instructions": { + "description": "Instructions to Responsible User during Step", + "type": "string", + "x-ms-summary": "Step Instructions" + }, + "key": { + "description": "A unique key to identify the Process Step", + "type": "string", + "x-ms-summary": "Process Step Key" + }, + "name": { + "description": "A short name for the Process Step", + "type": "string", + "x-ms-summary": "Process Step Name" + }, + "processStage": { + "description": "A key that defines the Process Stage of the current Step", + "type": "string", + "x-ms-summary": "Process Stage" + }, + "referenceUrl": { + "description": "A reference URL for the Process Step", + "type": "string", + "x-ms-summary": "Process Step Reference URL" + }, + "responsibility": { + "description": "User/Role Based Responsibility", + "type": "string", + "x-ms-summary": "Responsibility Type" + }, + "responsibleRole": { + "description": "The role responsible for the current Step", + "type": "string", + "x-ms-summary": "Process Step Responsible Role" + }, + "roleLevels": { + "description": "Conditional Role Levels", + "items": { + "type": "string" + }, + "type": "array" + }, + "stepOptions": { + "items": { + "properties": { + "description": { + "description": "A short description explaining the Step Option", + "type": "string", + "x-ms-summary": "Step Option Description" + }, + "name": { + "description": "A short name for the Step Option", + "type": "string", + "x-ms-summary": "Step Option Name" + }, + "nextStep": { + "description": "The next step the business process will be routed to. Leave empty if no further steps", + "type": "string", + "x-ms-summary": "Next Step" + }, + "notes": { + "description": "Optional Notes for Step Option", + "type": "string", + "x-ms-summary": "Step Option Notes" + }, + "visibleObjects": { + "items": { + "properties": { + "id": { + "description": "The id of the component that gets referenced in the UI", + "type": "string", + "x-ms-summary": "Step Option Object Id" + }, + "inputOptions": { + "properties": { + "choices": { + "items": { + "properties": { + "label": { + "description": "A label for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Label" + }, + "value": { + "description": "A value for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "description": "A label defining the input field or editable component", + "type": "string", + "x-ms-summary": "Input Options Label" + }, + "messages": { + "description": "Messages to be used when Input Options validation fails", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Input Options Messages" + }, + "type": { + "description": "Defines the type of input field or editable component to be used", + "type": "string", + "x-ms-summary": "Input Options Type" + } + }, + "type": "object" + }, + "isEditable": { + "description": "Is the component referenced editable for user input", + "type": "boolean", + "x-ms-summary": "Is Step Option Object Editable" + }, + "isMandatory": { + "description": "Does the component referenced require user input", + "type": "boolean", + "x-ms-summary": "Is Step Option Object Mandatory" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "visibleObjects": { + "items": { + "properties": { + "id": { + "description": "The id of the component that gets referenced in the UI", + "type": "string", + "x-ms-summary": "Process Step Object Id" + }, + "inputOptions": { + "properties": { + "choices": { + "items": { + "properties": { + "label": { + "description": "A label for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Label" + }, + "value": { + "description": "A value for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "description": "A label defining the input field or editable component", + "type": "string", + "x-ms-summary": "Input Options Label" + }, + "messages": { + "description": "Messages to be used when Input Options validation fails", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Input Options Messages" + }, + "type": { + "description": "Defines the type of input field or editable component to be used", + "type": "string", + "x-ms-summary": "Input Options Type" + } + }, + "type": "object" + }, + "isEditable": { + "description": "Is the component referenced editable for user input", + "type": "boolean", + "x-ms-summary": "Is Process Step Object Editable" + }, + "isMandatory": { + "description": "Does the component referenced require user input", + "type": "boolean", + "x-ms-summary": "Is Process Step Object Mandatory" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "referenceUrl": { + "description": "An optional url that can be referenced for the current BPM profile", + "type": "string", + "x-ms-summary": "BPM Profile Reference URL" + } + }, + "type": "object" + }, + "GetBPMRecordState": { + "items": { + "properties": { + "description": { + "description": "A short description explaining the Process Step", + "type": "string", + "x-ms-summary": "Process Step Description" + }, + "duration": { + "description": "The SLA Duration in hours. Provide a value of 0 if not applicable", + "type": "string", + "x-ms-summary": "SLA Duration (Hrs)" + }, + "eventStampHistory": { + "items": { + "properties": { + "eventName": { + "description": "Name of the Event Stamp", + "type": "string", + "x-ms-summary": "Event Stamp History Name" + }, + "timeStamp": { + "description": "The timestamp of when the Event Stamp occurred", + "format": "date-time", + "type": "string", + "x-ms-summary": "Event Stamp History Timestamp" + } + }, + "type": "object" + }, + "type": "array" + }, + "history": { + "items": { + "properties": { + "comments": { + "description": "Optional comments added at the time the History entry was created", + "type": "string", + "x-ms-summary": "History Comments" + }, + "currentRole": { + "description": "The current Role at the time of the History entry", + "type": "string", + "x-ms-summary": "History Current Role" + }, + "currentUser": { + "description": "The current User at the time of the History entry", + "type": "string", + "x-ms-summary": "History Current User" + }, + "duration": { + "description": "The time (in minutes) the record existed in the current Process Step before being actioned", + "type": "string", + "x-ms-summary": "Step Duration" + }, + "eventStamp": { + "description": "Event Stamp(s) that occurred at the time of the History entry", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "History Event Stamp" + }, + "fromStep": { + "description": "The Key of the Process Step the BPM record came from at the time of the History entry", + "type": "string", + "x-ms-summary": "From Step" + }, + "fromStepName": { + "description": "The Name of the Process Step the BPM record came from at the time of the History entry", + "type": "string", + "x-ms-summary": "From Step Name" + }, + "optionSelected": { + "description": "The option selected when actioning the BPM record", + "type": "string", + "x-ms-summary": "History Option Selected" + }, + "processKey": { + "description": "The unique BPM Process Key for the History entry", + "type": "string", + "x-ms-summary": "History BPM Process Key" + }, + "processStage": { + "description": "The Process stage at the time of the History entry", + "type": "string", + "x-ms-summary": "History Process Stage" + }, + "recordId": { + "description": "The record id for the BPM related record generated during the Register BPM Record process", + "type": "string", + "x-ms-summary": "History BPM Record Id" + }, + "responsibleRole": { + "description": "The responsible Role of the BPM Record at the time of the History entry", + "type": "string", + "x-ms-summary": "History Responsible Role" + }, + "responsibleUsers": { + "description": "Responsible User(s) at the time of the History entry", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "History Responsible Users" + }, + "submissionDate": { + "description": "The date/time the BPM record was actioned", + "format": "date-time", + "type": "string", + "x-ms-summary": "History Submission Date" + }, + "toProcessStage": { + "description": "The Process stage for the BPM record at the time of the History entry", + "type": "string", + "x-ms-summary": "To Process Stage" + }, + "toStep": { + "description": "The Key of the Process Step for the BPM record at the time of the History entry", + "type": "string", + "x-ms-summary": "To Step" + }, + "toStepName": { + "description": "The Name of the Process Step for the BPM record at the time of the History entry", + "type": "string", + "x-ms-summary": "To Step Name" + } + }, + "type": "object" + }, + "type": "array" + }, + "instructions": { + "description": "Instructions to Responsible User during Step", + "type": "string", + "x-ms-summary": "Step Instructions" + }, + "key": { + "description": "A unique key to identify the Process Step", + "type": "string", + "x-ms-summary": "Process Step Key" + }, + "name": { + "description": "A short name for the Process Step", + "type": "string", + "x-ms-summary": "Process Step Name" + }, + "processKey": { + "description": "A unique key to identify the BPM Profile", + "type": "string", + "x-ms-summary": "BPM Profile Key" + }, + "processStage": { + "description": "A key that defines the Process Stage of the current Step", + "type": "string", + "x-ms-summary": "Process Stage" + }, + "recordId": { + "description": "The record id generated by the BPM module when registering a BPM Record", + "type": "string", + "x-ms-summary": "BPM Record Id" + }, + "recordRef": { + "description": "A readable number generated by the BPM module using the Numbering module when registering a BPM Record", + "type": "string", + "x-ms-summary": "BPM Record Reference" + }, + "referenceUrl": { + "description": "A reference URL for the Process Step", + "type": "string", + "x-ms-summary": "Process Step Reference URL" + }, + "responsibleRole": { + "description": "The role responsible for the current Step", + "type": "string", + "x-ms-summary": "Process Step Responsible Role" + }, + "responsibleUsers": { + "description": "Responsible user(s) for the current Process Step", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Process Step Responsible Users" + }, + "roles": { + "items": { + "properties": { + "name": { + "description": "Name of the Role", + "type": "string", + "x-ms-summary": "Role Name" + }, + "users": { + "items": { + "properties": { + "email": { + "description": "Email address(es) linked to the Role name", + "type": "string", + "x-ms-summary": "Role Email" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "stepOptions": { + "items": { + "properties": { + "description": { + "description": "A short description explaining the Step Option", + "type": "string", + "x-ms-summary": "Step Option Description" + }, + "eventStamp": { + "description": "An Event Stamp for the current Step Option", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Step Option Event Stamp" + }, + "name": { + "description": "A short name for the Step Option", + "type": "string", + "x-ms-summary": "Step Option Name" + }, + "nextStep": { + "description": "The next step the business process will be routed to. Leave empty if no further steps", + "type": "string", + "x-ms-summary": "Next Step" + }, + "notes": { + "description": "Optional Notes for Step Option", + "type": "string", + "x-ms-summary": "Step Option Notes" + }, + "visibleObjects": { + "items": { + "properties": { + "id": { + "description": "The id of the component that gets referenced in the UI", + "type": "string", + "x-ms-summary": "Step Option Object Id" + }, + "inputOptions": { + "properties": { + "choices": { + "items": { + "properties": { + "label": { + "description": "A label for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Label" + }, + "value": { + "description": "A value for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "description": "A label defining the input field or editable component", + "type": "string", + "x-ms-summary": "Input Options Label" + }, + "messages": { + "description": "Messages to be used when Input Options validation fails", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Input Options Messages" + }, + "type": { + "description": "Defines the type of input field or editable component to be used", + "type": "string", + "x-ms-summary": "Input Options Type" + } + }, + "type": "object" + }, + "isEditable": { + "description": "Is the component referenced editable for user input", + "type": "boolean", + "x-ms-summary": "Is Step Option Object Editable" + }, + "isMandatory": { + "description": "Does the component referenced require user input", + "type": "boolean", + "x-ms-summary": "Is Step Option Object Mandatory" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "submittedIntoStep": { + "description": "The date/time the BPM record was submitted into the current Process Step", + "format": "date-time", + "type": "string", + "x-ms-summary": "Submitted Into Step" + }, + "targetTimeDuration": { + "description": "The date/time the BPM record needs to be actioned by based on the SLA Duration", + "format": "date-time", + "type": "string", + "x-ms-summary": "Target Time Duration" + }, + "visibleObjects": { + "items": { + "properties": { + "id": { + "description": "The id of the component that gets referenced in the UI", + "type": "string", + "x-ms-summary": "Process Step Object Id" + }, + "inputOptions": { + "properties": { + "choices": { + "items": { + "properties": { + "label": { + "description": "A label for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Label" + }, + "value": { + "description": "A value for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "description": "A label defining the input field or editable component", + "type": "string", + "x-ms-summary": "Input Options Label" + }, + "messages": { + "description": "Messages to be used when Input Options validation fails", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Input Options Messages" + }, + "type": { + "description": "Defines the type of input field or editable component to be used", + "type": "string", + "x-ms-summary": "Input Options Type" + } + }, + "type": "object" + }, + "isEditable": { + "description": "Is the component referenced editable for user input", + "type": "boolean", + "x-ms-summary": "Is Process Step Object Editable" + }, + "isMandatory": { + "description": "Does the component referenced require user input", + "type": "boolean", + "x-ms-summary": "Is Process Step Object Mandatory" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "KeywordValues": { + "items": { + "properties": { + "label": { + "type": "string", + "x-ms-summary": "Label" + }, + "value": { + "type": "string", + "x-ms-summary": "Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "RegisterBPMRecord": { + "properties": { + "description": { + "description": "A short description explaining the Process Step", + "type": "string", + "x-ms-summary": "Process Step Description" + }, + "duration": { + "description": "The SLA Duration in hours. Provide a value of 0 if not applicable", + "type": "string", + "x-ms-summary": "SLA Duration (Hrs)" + }, + "eventStampHistory": { + "items": { + "properties": { + "eventName": { + "description": "Name of the Event Stamp", + "type": "string", + "x-ms-summary": "Event Stamp History Name" + }, + "timeStamp": { + "description": "The timestamp of when the Event Stamp occurred", + "format": "date-time", + "type": "string", + "x-ms-summary": "Event Stamp History Timestamp" + } + }, + "type": "object" + }, + "type": "array" + }, + "history": { + "items": { + "properties": { + "comments": { + "description": "Optional comments added at the time the History entry was created", + "type": "string", + "x-ms-summary": "History Comments" + }, + "currentRole": { + "description": "The current Role at the time of the History entry", + "type": "string", + "x-ms-summary": "History Current Role" + }, + "currentUser": { + "description": "The current User at the time of the History entry", + "type": "string", + "x-ms-summary": "History Current User" + }, + "duration": { + "description": "The time (in minutes) the record existed in the current Process Step before being actioned", + "type": "string", + "x-ms-summary": "Step Duration" + }, + "eventStamp": { + "description": "Event Stamp(s) that occurred at the time of the History entry", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "History Event Stamp" + }, + "fromStep": { + "description": "The Key of the Process Step the BPM record came from at the time of the History entry", + "type": "string", + "x-ms-summary": "From Step" + }, + "fromStepName": { + "description": "The Name of the Process Step the BPM record came from at the time of the History entry", + "type": "string", + "x-ms-summary": "From Step Name" + }, + "optionSelected": { + "description": "The option selected when actioning the BPM record", + "type": "string", + "x-ms-summary": "History Option Selected" + }, + "processKey": { + "description": "The unique BPM Process Key for the History entry", + "type": "string", + "x-ms-summary": "History BPM Process Key" + }, + "processStage": { + "description": "The Process stage at the time of the History entry", + "type": "string", + "x-ms-summary": "History Process Stage" + }, + "recordId": { + "description": "The record id for the BPM related record generated during the Register BPM Record process", + "type": "string", + "x-ms-summary": "History BPM Record Id" + }, + "responsibleRole": { + "description": "The responsible Role of the BPM Record at the time of the History entry", + "type": "string", + "x-ms-summary": "History Responsible Role" + }, + "responsibleUsers": { + "description": "Responsible User(s) at the time of the History entry", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "History Responsible Users" + }, + "submissionDate": { + "description": "The date/time the BPM record was actioned", + "format": "date-time", + "type": "string", + "x-ms-summary": "History Submission Date" + }, + "toProcessStage": { + "description": "The Process stage for the BPM record at the time of the History entry", + "type": "string", + "x-ms-summary": "To Process Stage" + }, + "toStep": { + "description": "The Key of the Process Step for the BPM record at the time of the History entry", + "type": "string", + "x-ms-summary": "To Step" + }, + "toStepName": { + "description": "The Name of the Process Step for the BPM record at the time of the History entry", + "type": "string", + "x-ms-summary": "To Step Name" + } + }, + "type": "object" + }, + "type": "array" + }, + "instructions": { + "description": "Instructions to Responsible User during Step", + "type": "string", + "x-ms-summary": "Step Instructions" + }, + "key": { + "description": "A unique key to identify the Process Step", + "type": "string", + "x-ms-summary": "Process Step Key" + }, + "name": { + "description": "A short name for the Process Step", + "type": "string", + "x-ms-summary": "Process Step Name" + }, + "processKey": { + "description": "A unique key to identify the BPM Profile", + "type": "string", + "x-ms-summary": "BPM Profile Key" + }, + "processStage": { + "description": "A key that defines the Process Stage of the current Step", + "type": "string", + "x-ms-summary": "Process Stage" + }, + "recordId": { + "description": "The record id generated by the BPM module when registering a BPM Record", + "type": "string", + "x-ms-summary": "BPM Record Id" + }, + "recordRef": { + "description": "A readable number generated by the BPM module using the Numbering module when registering a BPM Record", + "type": "string", + "x-ms-summary": "BPM Record Reference" + }, + "referenceUrl": { + "description": "A reference URL for the Process Step", + "type": "string", + "x-ms-summary": "Process Step Reference URL" + }, + "responsibleRole": { + "description": "The role responsible for the current Process Step", + "type": "string", + "x-ms-summary": "Process Step Responsible Role" + }, + "responsibleUsers": { + "description": "The users responsible for the current Process Step", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Process Step Responsible Users" + }, + "roles": { + "items": { + "properties": { + "name": { + "description": "Name of the Role", + "type": "string", + "x-ms-summary": "Role Name" + }, + "users": { + "items": { + "properties": { + "email": { + "description": "Email address(es) linked to the Role name", + "type": "string", + "x-ms-summary": "Role Email" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "stepOptions": { + "items": { + "properties": { + "description": { + "description": "A short description explaining the Step Option", + "type": "string", + "x-ms-summary": "Step Option Description" + }, + "eventStamp": { + "description": "An Event Stamp for the current Step Option", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Step Option Event Stamp" + }, + "name": { + "description": "A short name for the Step Option", + "type": "string", + "x-ms-summary": "Step Option Name" + }, + "nextStep": { + "description": "The next step the business process will be routed to. Leave empty if no further steps", + "type": "string", + "x-ms-summary": "Next Step" + }, + "notes": { + "description": "Optional notes for the Step Option", + "type": "string", + "x-ms-summary": "Step Option Notes" + }, + "visibleObjects": { + "items": { + "properties": { + "id": { + "description": "The id of the component that gets referenced in the UI", + "type": "string", + "x-ms-summary": "Step Option Object Id" + }, + "inputOptions": { + "properties": { + "choices": { + "items": { + "properties": { + "label": { + "description": "A label for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Label" + }, + "value": { + "description": "A value for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "description": "A label defining the input field or editable component", + "type": "string", + "x-ms-summary": "Input Options Label" + }, + "messages": { + "description": "Messages to be used when Input Options validation fails", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Input Options Messages" + }, + "type": { + "description": "Defines the type of input field or editable component to be used", + "type": "string", + "x-ms-summary": "Input Options Type" + } + }, + "type": "object" + }, + "isEditable": { + "description": "Is the component referenced editable for user input", + "type": "boolean", + "x-ms-summary": "Is Step Option Object Editable" + }, + "isMandatory": { + "description": "Does the component referenced require user input", + "type": "boolean", + "x-ms-summary": "Is Step Option Object Mandatory" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "visibleObjects": { + "items": { + "properties": { + "id": { + "description": "The id of the component that gets referenced in the UI", + "type": "string", + "x-ms-summary": "Process Step Object Id" + }, + "inputOptions": { + "properties": { + "choices": { + "items": { + "properties": { + "label": { + "description": "A label for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Label" + }, + "value": { + "description": "A value for selected choice", + "type": "string", + "x-ms-summary": "Choices Type Value" + } + }, + "type": "object" + }, + "type": "array" + }, + "label": { + "description": "A label defining the input field or editable component", + "type": "string", + "x-ms-summary": "Input Options Label" + }, + "messages": { + "description": "Messages to be used when Input Options validation fails", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "Input Options Messages" + }, + "type": { + "description": "Defines the type of input field or editable component to be used", + "type": "string", + "x-ms-summary": "Input Options Type" + } + }, + "type": "object" + }, + "isEditable": { + "description": "Is the component referenced editable for user input", + "type": "boolean", + "x-ms-summary": "Is Process Step Object Editable" + }, + "isMandatory": { + "description": "Does the component referenced require user input", + "type": "boolean", + "x-ms-summary": "Is Process Step Object Mandatory" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "StdJSONResponse": { + "properties": { + "result": { + "description": "Result", + "type": "string", + "x-ms-summary": "Result" + } + }, + "type": "object" + } + }, + "host": "api.agilite.io", + "parameters": {}, + "paths": { + "/bpm/execute": { + "post": { + "description": "Submits an option in its current workflow step. Depending on the business rules, the record wil be progressed to the next step in the process and return information about the next step to the calling api", + "operationId": "executeBPM", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "process-key", + "required": true, + "type": "string", + "x-ms-summary": "Process Key", + "x-ms-visibility": "important" + }, + { + "description": "Identifies the record that is being submitted. The id is registered by the registerBPMRecord api for new records and can be found in the recordID property of the BPM api responses", + "in": "header", + "name": "bpm-record-id", + "required": true, + "type": "string", + "x-ms-summary": "BPM Record Id", + "x-ms-visibility": "important" + }, + { + "description": "Identifies the option that is selected by the user to be executed as part of the submission process. This value has to correspond with a valid step option in the workflow profile", + "in": "header", + "name": "option-selected", + "required": true, + "type": "string", + "x-ms-summary": "Option Selected", + "x-ms-visibility": "important" + }, + { + "description": "The email address of the user that is submitting the BPM step. This will typically be the user that is logged in at the time of calling the api", + "in": "header", + "name": "current-user", + "required": true, + "type": "string", + "x-ms-summary": "Current User", + "x-ms-visibility": "important" + }, + { + "description": "Passes comments to the execution process which will be stamped into the workflow history. This would typically be used if the user is rejecting a step, or requesting more information", + "in": "header", + "name": "comments", + "type": "string", + "x-ms-summary": "Workflow Step Comments", + "x-ms-visibility": "advanced" + }, + { + "description": "Additional Properties", + "in": "body", + "name": "properties", + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "Execute Result", + "schema": { + "$ref": "#/definitions/ExecuteBPMResult" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Execute (BPM)" + } + }, + "/bpm/getByProfileKey": { + "get": { + "description": "Get the full BPM Profile with configuration and options for the process.", + "operationId": "getBPMByProfileKey", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "profile-key", + "required": true, + "type": "string", + "x-ms-summary": "Profile Key", + "x-ms-visibility": "important" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "BPM Profile", + "schema": { + "$ref": "#/definitions/GetBPMProfile" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Get By Profile Key (BPM)" + } + }, + "/bpm/getRecordState": { + "post": { + "description": "Get BPM Record State for one or more records to include the current status, who is responsible for the record, the workflow history and other information to describe the current state and rules for the record", + "operationId": "getBPMRecordState", + "parameters": [ + { + "description": "Filter to identify the business process(es) that records will be returned for. This key can be found on the BPM profile in the Agilit-e Admin Portal - (separate using commas)", + "in": "header", + "name": "process-keys", + "type": "string", + "x-ms-summary": "Process Keys", + "x-ms-visibility": "important" + }, + { + "description": "filter to only return records with specific recordIds. The recordId is registered by the registerBPMRecord api for new records and can be found in the recordID property of the BPM api responses - (separate using commas)", + "in": "header", + "name": "bpm-record-ids", + "type": "string", + "x-ms-summary": "BPM Record Ids", + "x-ms-visibility": "advanced" + }, + { + "description": "Filter to only return records that are currently to the specified workflow step(s) - (separate using commas)", + "in": "header", + "name": "step-names", + "type": "string", + "x-ms-summary": "Step Names", + "x-ms-visibility": "advanced" + }, + { + "description": "Filter to only return records that are currently assigned to the specified email address(es) - (separate using commas)", + "in": "header", + "name": "responsible-users", + "type": "string", + "x-ms-summary": "Responsible Users", + "x-ms-visibility": "advanced" + }, + { + "description": "Filter to only return records that are relevant to the specified email address(es) - (separate using commas)", + "in": "header", + "name": "relevant-users", + "type": "string", + "x-ms-summary": "Relevant Users", + "x-ms-visibility": "advanced" + }, + { + "description": "Specify if the history object should be returned with the record state information", + "in": "header", + "name": "include-history", + "type": "boolean", + "x-ms-summary": "Include History", + "x-ms-visibility": "advanced" + }, + { + "description": "Specify if the step options object should be returned with the record state information", + "in": "header", + "name": "include-step-options", + "type": "boolean", + "x-ms-summary": "Include Step Options", + "x-ms-visibility": "advanced" + }, + { + "description": "Specify if the visible objects object should be returned with the record state information", + "in": "header", + "name": "include-visible-objects", + "type": "boolean", + "x-ms-summary": "Include Visible Objects", + "x-ms-visibility": "advanced" + } + ], + "responses": { + "200": { + "description": "Get Record State Result", + "schema": { + "$ref": "#/definitions/GetBPMRecordState" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Get Record State (BPM)" + } + }, + "/bpm/registerBPMRecord": { + "get": { + "description": "Register new BPM Record. The record is assigned with a recordID that is used for the record life cycle to identify the record, it's progress, history and status at all time", + "operationId": "registerBPMRecord", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "process-key", + "required": true, + "type": "string", + "x-ms-summary": "Process Key", + "x-ms-visibility": "important" + }, + { + "description": "The email address of the user that is registering the record. This will typically be the user that is logged in at the time of calling the api", + "in": "header", + "name": "current-user", + "required": true, + "type": "string", + "x-ms-summary": "Current User", + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Register BPM Record Result", + "schema": { + "$ref": "#/definitions/RegisterBPMRecord" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Register BPM Record (BPM)" + } + }, + "/keywords/getByProfileKey": { + "get": { + "description": "Returns Key/Value pairs of a specific Keyword profile based on the 'profile-key' provided", + "operationId": "getKeywordsByProfileKey", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "profile-key", + "required": true, + "type": "string", + "x-ms-summary": "Profile Key", + "x-ms-visibility": "important" + }, + { + "description": "An optional parameter to sort the returned Key/Value result", + "enum": [ + "asc", + "desc", + "asc_value", + "desc_value" + ], + "in": "header", + "name": "sort", + "type": "string", + "x-ms-summary": "Sort", + "x-ms-visibility": "advanced" + }, + { + "default": "array", + "description": "Format the output of the returned result", + "enum": [ + "array", + "json" + ], + "in": "header", + "name": "output-format", + "required": true, + "type": "string", + "x-ms-summary": "Output Format", + "x-ms-visibility": "internal" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "$ref": "#/definitions/KeywordValues" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Get By Profile Key (Keywords)" + } + }, + "/keywords/getLabelByValue": { + "get": { + "description": "Returns a Keyword Label based on the 'profile-key' and 'value-key' provided", + "operationId": "getKeywordsLabelByValue", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "profile-key", + "required": true, + "type": "string", + "x-ms-summary": "Profile Key", + "x-ms-visibility": "important" + }, + { + "description": "The Value key in the Label/Value listing for the targeted profile", + "in": "header", + "name": "value-key", + "required": true, + "type": "string", + "x-ms-summary": "Value Key", + "x-ms-visibility": "important" + }, + { + "default": "json", + "description": "Format the output of the returned result", + "enum": [ + "string", + "json" + ], + "in": "header", + "name": "output-format", + "required": true, + "type": "string", + "x-ms-summary": "Output Format", + "x-ms-visibility": "internal" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "$ref": "#/definitions/StdJSONResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Get Label By Value (Keywords)" + } + }, + "/keywords/getProfileKeysByGroup": { + "get": { + "description": "Returns all Keyword profile keys based on the 'group-name' provided", + "operationId": "getKeywordProfileKeysByGroup", + "parameters": [ + { + "description": "The Group name used to group Keyword profiles", + "in": "header", + "name": "group-name", + "required": true, + "type": "string", + "x-ms-summary": "Group Name", + "x-ms-visibility": "important" + }, + { + "description": "An optional parameter to sort the returned Key/Value result", + "enum": [ + "asc", + "desc", + "asc_value", + "desc_value" + ], + "in": "header", + "name": "sort", + "type": "string", + "x-ms-summary": "Sort", + "x-ms-visibility": "advanced" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Get Profile Keys By Group (Keywords)" + } + }, + "/keywords/getValueByLabel": { + "get": { + "description": "Returns a Keyword Value based on the 'profile-key' and 'label-key' provided", + "operationId": "getKeywordsValueByLabel", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "profile-key", + "required": true, + "type": "string", + "x-ms-summary": "Profile Key", + "x-ms-visibility": "important" + }, + { + "description": "The Label key in the Label/Value listing for the targeted profile", + "in": "header", + "name": "label-key", + "required": true, + "type": "string", + "x-ms-summary": "Label Key", + "x-ms-visibility": "important" + }, + { + "default": "json", + "description": "Format the output of the returned result", + "enum": [ + "string", + "json" + ], + "in": "header", + "name": "output-format", + "required": true, + "type": "string", + "x-ms-summary": "Output Format", + "x-ms-visibility": "internal" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "$ref": "#/definitions/StdJSONResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Get Value By Label (Keywords)" + } + }, + "/numbering/generate": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Generates a unique number based on 'profile-key' provided", + "operationId": "generateNumber", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "profile-key", + "required": true, + "type": "string", + "x-ms-summary": "Profile Key", + "x-ms-visibility": "important" + }, + { + "default": "json", + "description": "Format the output of the returned result", + "enum": [ + "string", + "json" + ], + "in": "header", + "name": "output-format", + "required": true, + "type": "string", + "x-ms-summary": "Output Format", + "x-ms-visibility": "internal" + }, + { + "description": "Additional Properties", + "in": "body", + "name": "properties", + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "$ref": "#/definitions/StdJSONResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Generate Number (Numbering)" + } + }, + "/roles/assignRole": { + "get": { + "description": "Assign user specified role that is applicable to a specific record. An example of this would be a document reviewer or a leave approver", + "operationId": "assignRole", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "process-key", + "required": true, + "type": "string", + "x-ms-summary": "Process Key", + "x-ms-visibility": "important" + }, + { + "description": "Identifies the record that the role is being set for. The id is registered by the registerBPMRecord api for new records and can be found in the recordID property of the BPM api responses", + "in": "header", + "name": "bpm-record-id", + "required": true, + "type": "string", + "x-ms-summary": "BPM Record Id", + "x-ms-visibility": "important" + }, + { + "description": "The email address of the user that is setting the role. This will typically be the user that is logged in at the time of calling the api", + "in": "header", + "name": "current-user", + "required": true, + "type": "string", + "x-ms-summary": "Current User", + "x-ms-visibility": "important" + }, + { + "description": "The name of the role that is being assigned. E.g Approver or Reviewer", + "in": "header", + "name": "role-name", + "required": true, + "type": "string", + "x-ms-summary": "Role Name", + "x-ms-visibility": "important" + }, + { + "description": "The email addresses of the users who is assigned to this role - (separate using commas)", + "in": "header", + "name": "responsible-users", + "required": true, + "type": "string", + "x-ms-summary": "Responsible Users", + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "description": "data", + "properties": {}, + "type": "object", + "x-ms-summary": "data" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Assign Role (Roles)" + } + }, + "/roles/getAssignedRoles": { + "get": { + "description": "Get responsible person(s) for previously assigned role for a specific record", + "operationId": "getAssignedRoles", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "process-key", + "required": true, + "type": "string", + "x-ms-summary": "Process Key", + "x-ms-visibility": "important" + }, + { + "description": "Identifies the record that the role is being set for. The id is registered by the registerBPMRecord api for new records and can be found in the recordID property of the BPM api responses", + "in": "header", + "name": "bpm-record-id", + "required": true, + "type": "string", + "x-ms-summary": "BPM Record Id", + "x-ms-visibility": "important" + }, + { + "description": "The Role(s) to be queried (separate using commas)", + "in": "header", + "name": "role-names", + "required": true, + "type": "string", + "x-ms-summary": "Role Name", + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "items": { + "properties": { + "name": { + "type": "string", + "x-ms-summary": "Name" + }, + "users": { + "items": { + "properties": { + "email": { + "type": "string", + "x-ms-summary": "Email" + } + }, + "type": "object" + }, + "type": "array", + "x-ms-summary": "Users" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Get Assigned Roles (Roles)" + } + }, + "/roles/getRole": { + "post": { + "description": "Get responsible person(s) that are assigned to roles in the Agilit-e admin portal. These roles are not only relevant to specific records or business processes and are more typically used for company wide roles in the organization", + "operationId": "getRole", + "parameters": [ + { + "description": "Specify the role name(s) that you want to retrieve the responsible users for - (separate using commas)", + "in": "header", + "name": "role-names", + "required": true, + "type": "string", + "x-ms-summary": "Role Names", + "x-ms-visibility": "important" + }, + { + "description": "Specify additional levels that can be used to determine the correct person for the role. An example of a level might be a department name (if you want to retrieve the Department Manager), or a product name (if you want to retrieve the Product Manager) - (separate using commas)", + "in": "header", + "name": "conditional-levels", + "type": "string", + "x-ms-summary": "Conditional Levels", + "x-ms-visibility": "advanced" + } + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "properties": { + "responsibleUsers": { + "description": "responsibleUsers", + "items": { + "type": "string" + }, + "type": "array", + "x-ms-summary": "responsibleUsers" + } + }, + "type": "object" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Get Role (Roles)" + } + }, + "/templates/execute": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Processes and returns a Template from Agilit-e based on the 'profile-key' provided", + "operationId": "executeTemplates", + "parameters": [ + { + "description": "Unique Key for the targeted profile", + "in": "header", + "name": "profile-key", + "required": true, + "type": "string", + "x-ms-summary": "Profile Key", + "x-ms-visibility": "important" + }, + { + "default": "json", + "description": "Format the output of the returned result", + "enum": [ + "string", + "json" + ], + "in": "header", + "name": "output-format", + "required": true, + "type": "string", + "x-ms-summary": "Output Format", + "x-ms-visibility": "internal" + }, + { + "description": "Additional Properties", + "in": "body", + "name": "properties", + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Result", + "schema": { + "$ref": "#/definitions/StdJSONResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/BadRequest" + } + } + }, + "summary": "Execute (Templates)" + } + } + }, + "produces": [], + "responses": {}, + "schemes": [ + "https" + ], + "security": [ + { + "APIKeyHeader": [] + } + ], + "securityDefinitions": { + "APIKeyHeader": { + "in": "header", + "name": "api-key", + "type": "apiKey" + } + }, + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/agilite/apiProperties.json b/certified-connectors/agilite/apiProperties.json new file mode 100644 index 000000000..5ef5286fc --- /dev/null +++ b/certified-connectors/agilite/apiProperties.json @@ -0,0 +1,44 @@ +{ + "properties": { + "capabilities": [ + "actions" + ], + "connectionParameters": { + "apiServerUrl": { + "type": "string", + "uiDefinition": { + "constraints": { + "required": "true", + "tabIndex": 2 + }, + "description": "Specify Agilit-e API Server URL. (Use 'https://api.agilite.io' for Agilit-e Cloud)", + "displayName": "Specify Agilit-e API Server URL. (Use 'https://api.agilite.io' for Agilit-e Cloud)", + "tooltip": "Specify Agilit-e API Server URL. (Use 'https://api.agilite.io' for Agilit-e Cloud)" + } + }, + "api_key": { + "type": "securestring", + "uiDefinition": { + "constraints": { + "clearText": false, + "required": "true", + "tabIndex": 3 + }, + "description": "API Key (Generated in 'https://portal.agilite.io' under Administration)", + "displayName": "API Key (Generated in 'https://portal.agilite.io' under Administration)", + "tooltip": "API Key (Generated in 'https://portal.agilite.io' under Administration)" + } + } + }, + "iconBrandColor": "#DA262E", + "policyTemplateInstances": [ + { + "parameters": { + "x-ms-apimTemplateParameter.urlTemplate": "@connectionParameters('apiServerUrl')" + }, + "templateId": "dynamichosturl", + "title": "Specify Agilit-e API Server URL. (Use 'https://api.agilite.io' for Agilit-e Cloud)" + } + ] + } +} \ No newline at end of file diff --git a/certified-connectors/agilite/readme.md b/certified-connectors/agilite/readme.md new file mode 100644 index 000000000..e9e9ccc6a --- /dev/null +++ b/certified-connectors/agilite/readme.md @@ -0,0 +1,42 @@ + +## Agilite Connector +A certified connector that provides seamless interactions with Agilit-e APIs. + + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Apps or Power Automate plan with certified connector feature +* A registered [Agilit-e](https://agilite.io) account and API Key +* The Power platform CLI tools + + +## How to get credentials +* Login to the [Agilit-e Admin Portal](https://portal.agilite.io) +* In the Main Menu, under Administration, click on the "API Keys" menu item +* Create an API Key profile if you don't yet have one +* Against the API Key profile in the view, click on the "Generate API Key" icon +* Copy the API Key as it is what's required for this Connector + +## API documentation +Click [here](https://docs.agilite.io/reference) to access online API Documentation + + +## Deployment instructions +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as custom connector in Microsoft Flow and PowerApps + + +## Supported Operations +The connector supports the following operations: +* `executeBPM`: Submits an option in its current workflow step. Depending on the business rules, the record wil be progressed to the next step in the process and return information about the next step to the calling api. +* `getBPMByProfileKey`: Get the full BPM Profile with configuration and options for the process. +* `getBPMRecordState`: Get BPM Record State for one or more records to include the current status, who is responsible for the record, the workflow history and other information to describe the current state and rules for the record. +* `registerBPMRecord`: Register new BPM Record. The record is assigned with a recordID that is used for the record life cycle to identify the record, it's progress, history and status at all time. +* `getKeywordsByProfileKey`: Returns Key/Value pairs of a specific Keyword profile based on the 'profile-key' provided. +* `getKeywordsLabelByValue`: Returns a Keyword Label based on the 'profile-key' and 'value-key' provided. +* `getKeywordProfileKeysByGroup`: Returns all Keyword profile keys based on the 'group-name' provided. +* `getKeywordsValueByLabel`: Returns a Keyword Value based on the 'profile-key' and 'label-key' provided. +* `generateNumber`: Generates a unique number based on 'profile-key' provided. +* `assignRole`: Assign user specified role that is applicable to a specific record. An example of this would be a document reviewer or a leave approver. +* `getAssignedRoles`: Get responsible person(s) for previously assigned role for a specific record. +* `getRole`: et responsible person(s) that are assigned to roles in the Agilit-e admin portal. These roles are not only relevant to specific records or business processes and are more typically used for company wide roles in the organization. +* `executeTemplates`: Processes and returns a Template from Agilit-e based on the 'profile-key' provided. \ No newline at end of file From c36f01921ff2714a1b0a471e70e48153a4184592 Mon Sep 17 00:00:00 2001 From: Adrien Russo Date: Thu, 17 Sep 2020 17:08:40 -0400 Subject: [PATCH 067/347] Poka - Make the language field mandatory. (Update apiDefinition.swagger) (#410) --- certified-connectors/Poka/apiDefinition.swagger.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/certified-connectors/Poka/apiDefinition.swagger.json b/certified-connectors/Poka/apiDefinition.swagger.json index 57d1f1f5f..ce120882f 100644 --- a/certified-connectors/Poka/apiDefinition.swagger.json +++ b/certified-connectors/Poka/apiDefinition.swagger.json @@ -215,7 +215,8 @@ } }, "required": [ - "url" + "url", + "language" ] } }, From dd46184d91cb549ed50827df626e62349d485e23 Mon Sep 17 00:00:00 2001 From: Encodian <45834050+Encodian@users.noreply.github.com> Date: Thu, 17 Sep 2020 22:10:23 +0100 Subject: [PATCH 068/347] Encodian Updates (#434) * Encodian May 20 Release * Minor Updates * Minor Updates * Encodian July 20 Relase - Amends * July 20 Update * Two new actions * Updated * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * Updated category property value as requested * Updated ReadMe Co-authored-by: Marc Co-authored-by: Marc Hochleutner --- certified-connectors/Encodian/Readme.md | 11 + .../Encodian/apiDefinition.swagger.json | 345 +++++++++++++++++- 2 files changed, 353 insertions(+), 3 deletions(-) diff --git a/certified-connectors/Encodian/Readme.md b/certified-connectors/Encodian/Readme.md index d65ce44b7..73523c2cc 100644 --- a/certified-connectors/Encodian/Readme.md +++ b/certified-connectors/Encodian/Readme.md @@ -150,3 +150,14 @@ Extract text from the image provided - https://support.encodian.com/hc/en-gb/art ### Fill a PDF Form Fill the PDF Form provided with the JSON data provided - https://support.encodian.com/hc/en-gb/articles/360008556077-Fill-a-PDF-Form +### Convert Mail Message +Convert an email (EML or MSG file) to PDF - https://support.encodian.com/hc/en-gb/articles/360011566298-Convert-Mail-Message + +### Convert Excel +Convert Microsoft Excel documents to another document format - https://support.encodian.com/hc/en-gb/articles/360011804178-Convert-Excel + +### Create HMAC +Create a Hash-based message authentication code (HMAC) using a secret key - https://support.encodian.com/hc/en-gb/articles/360012782058-Create-HMAC + + + diff --git a/certified-connectors/Encodian/apiDefinition.swagger.json b/certified-connectors/Encodian/apiDefinition.swagger.json index 861509db5..569372df8 100644 --- a/certified-connectors/Encodian/apiDefinition.swagger.json +++ b/certified-connectors/Encodian/apiDefinition.swagger.json @@ -3,7 +3,7 @@ "info": { "version": "v1.0", "title": "Encodian", - "description": "Enhanced document format conversion, OCR, watermarking, data extraction, redaction + much more. For Power Automate, Power Apps, Logic Apps and REST.", + "description": "Enhanced document format conversion, OCR, watermarking, data extraction, redaction + much more.", "termsOfService": "https://support.encodian.com/hc/en-gb/articles/360010642813-Terms-of-Service", "contact": { "name": "Encodian Support", @@ -26,7 +26,7 @@ }, { "propertyName": "Categories", - "propertyValue": "Content and Files; Collaboration" + "propertyValue": "Content and Files;Collaboration" } ], "host": "api.apps-encodian.com", @@ -2149,6 +2149,96 @@ "description": "Fill the PDF Form provided with the JSON data provided - https://support.encodian.com/hc/en-gb/articles/360008556077-Fill-a-PDF-Form" } }, + "/api/v1/Core/ConvertMailMessage": { + "post": { + "tags": [ + "Core" + ], + "operationId": "ConvertMailMessage", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "conversion", + "in": "body", + "description": "Request object, refer to schema definition: DtoConvertMailMessage", + "required": false, + "schema": { + "$ref": "#/definitions/DtoConvertMailMessage" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseConvertMailMessage" + } + }, + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/DtoResponseConvertMailMessage" + } + }, + "400": { + "description": "Bad request" + } + }, + "x-ms-visibility": "important", + "summary": "Convert Mail Message", + "description": "Convert an email to PDF - https://support.encodian.com/hc/en-gb/articles/360011566298-Convert-Mail-Message" + } + }, + "/api/v1/Core/ConvertExcel": { + "post": { + "tags": [ + "Core" + ], + "operationId": "ConvertExcel", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "conversion", + "in": "body", + "description": "Request object, refer to schema definition: DtoConvertExcel", + "required": false, + "schema": { + "$ref": "#/definitions/DtoConvertExcel" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseConvertExcel" + } + }, + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/DtoResponseConvertExcel" + } + }, + "400": { + "description": "Bad request" + } + }, + "x-ms-visibility": "important", + "summary": "Convert Excel", + "description": "Convert Microsoft Excel documents to another document format - https://support.encodian.com/hc/en-gb/articles/360011804178-Convert-Excel" + } + }, "/api/v1/DynamicSchema/GetDynamicSchemaCreateBarcode": { "get": { "tags": [ @@ -2903,7 +2993,7 @@ "type": "string", "x-ms-visibility": "advanced", "x-ms-summary": "Culture Name", - "description": "This setting only applies to Microsoft Excel documents and is used to set the culture for the workbook prior to conversion." + "description": "Change the thread culture used to process the request." }, "FinalOperation": { "default": true, @@ -9918,6 +10008,255 @@ } } }, + "DtoConvertMailMessage": { + "required": [ + "outputFilename", + "fileName", + "fileContent" + ], + "type": "object", + "properties": { + "outputFilename": { + "default": "email.pdf", + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "PDF Filename", + "description": "The filename of the output PDF document" + }, + "fileName": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Filename", + "description": "The filename of the source file, the file extension is mandatory: 'file.msg' and not 'file'" + }, + "fileContent": { + "format": "byte", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "File Content", + "description": "The file content of the source file" + }, + "mergeAttachments": { + "default": false, + "type": "boolean", + "x-ms-summary": "Merge Attachments", + "description": "Set whether attachments should be automatically converted and merged with the output.pdf" + }, + "generateBookmarks": { + "default": false, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "Generate Bookmarks", + "description": "Set whether bookmarks should be automatically created for Microsoft Word documents which are converted to PDF." + }, + "pdfaCompliance": { + "default": false, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "PDF/A Compliant", + "description": "Set PDF/A Compliance option" + }, + "pdfaComplianceLevel": { + "default": "PDF_A_2A", + "enum": [ + "PDF_A_1A", + "PDF_A_1B", + "PDF_A_2A", + "PDF_A_3A", + "PDF_A_2B", + "PDF_A_2U", + "PDF_A_3B", + "PDF_A_3U", + "v_1_3", + "v_1_4", + "v_1_5", + "v_1_6", + "v_1_7", + "PDF_X_1A", + "PDF_X_3" + ], + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "PDF/A Compliance Level", + "description": "Set the PDF/A Compliance Level, the default value is PDF_A_2A." + }, + "cultureName": { + "default": "en-US", + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Culture Name", + "description": "Change the thread culture used to process the request." + } + } + }, + "DtoResponseConvertMailMessage": { + "type": "object", + "properties": { + "HttpStatusCode": { + "format": "int32", + "type": "integer", + "x-ms-summary": "HTTP Status Code", + "description": "The HTTP Status code for the response." + }, + "HttpStatusMessage": { + "type": "string", + "x-ms-summary": "HTTP Status Message", + "description": "The HTTP Status message for the response." + }, + "OperationId": { + "type": "string", + "x-ms-summary": "Operation ID", + "description": "The unique ID assigned to this operation." + }, + "Errors": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Errors", + "description": "An array of error messages should an error occur." + }, + "Operation Status": { + "type": "string", + "x-ms-summary": "Operation Status", + "description": "Indicates whether the operation has completed, has been queued or has failed." + }, + "Filename": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Filename", + "description": "The filename of the document." + }, + "FileContent": { + "format": "byte", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "File Content", + "description": "The processed document." + } + } + }, + "DtoConvertExcel": { + "required": [ + "outputFilename", + "fileName", + "fileContent", + "outputFormat" + ], + "type": "object", + "properties": { + "outputFilename": { + "default": "excel.pdf", + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "PDF Filename", + "description": "The filename of the output PDF document" + }, + "fileName": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Filename", + "description": "The filename of the source file, the file extension is mandatory: 'file.xlsx' and not 'file'" + }, + "fileContent": { + "format": "byte", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "File Content", + "description": "The file content of the source file" + }, + "outputFormat": { + "default": "PDF", + "enum": [ + "PDF", + "HTML", + "CSV", + "TXT", + "XLSX" + ], + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Output Format", + "description": "Select the output file type format" + }, + "worksheet": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Worksheet Name", + "description": "Specify the name of a specific worksheet" + }, + "removeDocumentMarkup": { + "default": true, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "Remove Markup", + "description": "Set MS Office document comments and tracked changes removal option" + }, + "generateBookmarks": { + "default": true, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "Generate Bookmarks", + "description": "Set whether bookmarks should be automatically created for Microsoft Word documents which are converted to PDF." + }, + "cultureName": { + "default": "en-US", + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Culture Name", + "description": "Change the thread culture used to process the request." + } + } + }, + "DtoResponseConvertExcel": { + "type": "object", + "properties": { + "HttpStatusCode": { + "format": "int32", + "type": "integer", + "x-ms-summary": "HTTP Status Code", + "description": "The HTTP Status code for the response." + }, + "HttpStatusMessage": { + "type": "string", + "x-ms-summary": "HTTP Status Message", + "description": "The HTTP Status message for the response." + }, + "OperationId": { + "type": "string", + "x-ms-summary": "Operation ID", + "description": "The unique ID assigned to this operation." + }, + "Errors": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Errors", + "description": "An array of error messages should an error occur." + }, + "Operation Status": { + "type": "string", + "x-ms-summary": "Operation Status", + "description": "Indicates whether the operation has completed, has been queued or has failed." + }, + "Filename": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Filename", + "description": "The filename of the document." + }, + "FileContent": { + "format": "byte", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "File Content", + "description": "The processed document." + } + } + }, "DtoResponseMgmtGetSubscriptionStatus": { "type": "object", "properties": { From 89a1158ebda6a2137a61031ba8064e3c0db517f1 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Thu, 17 Sep 2020 23:11:06 +0200 Subject: [PATCH 069/347] tyntec SMS Business [update] (#437) * added tyntec-sms * remove intro * Fix: Brand color * Fix: summary alphanumeric char * Fix: Major Fixes * FIX: Readme update * description items fix * fix: type based on resolve * Operation ID revert * production version * Returned: default responses Custom responses don't show consistently in Designer * Responses update * update Readme * readme update --- certified-connectors/tyntec-SMS/README.md | 16 +-- .../tyntec-SMS/apiDefinition.swagger.json | 111 ++++++++++-------- .../tyntec-SMS/apiProperties.json | 18 ++- 3 files changed, 86 insertions(+), 59 deletions(-) diff --git a/certified-connectors/tyntec-SMS/README.md b/certified-connectors/tyntec-SMS/README.md index 2fd8e032c..0c799cbef 100644 --- a/certified-connectors/tyntec-SMS/README.md +++ b/certified-connectors/tyntec-SMS/README.md @@ -1,8 +1,10 @@ -## Tyntec Conversation API - Send SMS +## Tyntec Conversations API - Send SMS -Tyntec Conversation API allows you to send customized SMS messages. +Tyntec Conversations API allows you to send customized SMS messages. -### User Cases of this connector +Use the most universal texting channel SMS when it’s critical that any user must get the message, no matter which chat app they’re using. For use cases such as sending a one-time-passcode or two-factor authentication (2FA), the SMS channel is the most-widely used method for phone-based authentication, thanks to its global coverage and high open rates. + +### Use Cases of this connector - Use this connector in PowerApps Workflows (great for Marketing, CRM or Sales) - Send SMS messages using Azure Logic Apps - Build SMS support in your Microsoft Power Automate automatizations @@ -17,17 +19,15 @@ You will need the following to proceed: - _If you are using a free account, be sure to whitelist your phone number in [SMS's first steps](https://my.tyntec.com/products/sms#first-steps)._ ## Supported requests -- **Send_SMS** using tyntec Conversation API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) +- **Send_SMS** using tyntec Conversations API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) - To make a successful request, please, populate the followings fields: - - **apikey** - your tyntec API key + - **to** - receiver's phone number in _international_ form without leading 00 (_E.g. 4989202451100_) - **from** - sender's phone number - - **contentType** - content type of your message, use **text** - - **channels key item** - used tyntec Conversation API channel, use **sms** - **text** - text of your SMS - **Status_Check** - To make a successful status check, please, provide the connector with the following values - - **apikey** - your tyntec API key + - **id** - messageID of your message (_returned after each Send_SMS request_) diff --git a/certified-connectors/tyntec-SMS/apiDefinition.swagger.json b/certified-connectors/tyntec-SMS/apiDefinition.swagger.json index c9d9d67c5..ff3825f58 100644 --- a/certified-connectors/tyntec-SMS/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-SMS/apiDefinition.swagger.json @@ -1,14 +1,15 @@ { "swagger": "2.0", "info": { - "title": "tyntec-SMS", - "description": "Send a custom SMS message using the tyntec conversation API. You can also use Status_check to check status (accepted/delivered/failed)", + "title": "tyntec SMS Business", + "description": "Allows SMS communication channel using the tyntec Conversations API to expand your outreach potential", "contact": { "name": "tyntec support", "url": "https://www.tyntec.com/get-help-support", "email": "support@tyntec.com" }, - "version": "1.0" + + "version": "1.1" }, "host": "api.tyntec.com", "basePath": "/", @@ -20,33 +21,35 @@ "paths": { "/chat-api/v2/messages": { "post": { - "responses": { - "default": { - "description": "default", + "responses": { + "202": { + "description": "Returned when the operation successfully connects to Conversations API", + "schema": { "type": "object", "properties": { "messageId": { "type": "string", - "description": "messageId" + "description": "messageId", + "x-ms-visibility": "important" } } } + }, + "400": { + "description": "There was an issue with your channel." + }, + "401": { + "description": "The Viber Service ID or WhatsApp Business Account Number is not authorized with used API key." + }, + "403": { + "description": "You attempting to use a number that is not assigned to your account" } }, - "summary": "Send a custom SMS using tyntec Conversation API", - "description": "To send a custom SMS, you need to populate the body of your request. Set contentType to text, channels-key-item to sms, from holds the value of your phone number, to populate with receivers phone number, and text holds the text of your message.", - "operationId": "Send_SMS", + "summary": "Send a custom SMS", + "description": "Send a custom SMS", + "operationId": "SendSMS", "parameters": [ - { - "name": "apikey", - "in": "header", - "required": true, - "type": "string", - "x-ms-visibility": "important", - "description": "This field holds the value of your tyntec Conversation API key received from https://my.tyntec.com/api-settings.", - "x-ms-summary": "The API key for Conversation API" - }, { "name": "body", "in": "body", @@ -64,8 +67,9 @@ "items": { "type": "string", "title": "channels key item", - "description": "Connector channel (sms)", - "default": "sms" + "description": "Connector channel", + "default": "sms", + "x-ms-visibility": "internal" }, "description": "channels" }, @@ -81,7 +85,8 @@ "type": "string", "description": "contentType", "title": "contentType", - "default": "text" + "default": "text", + "x-ms-visibility": "internal" }, "text": { "type": "string", @@ -107,60 +112,73 @@ ] } }, - "/api.tyntec.com/v2/messages/{id}/status": {}, "/chat-api/v2/messages/{id}/status": { "get": { "responses": { - "default": { - "description": "default", + "202": { + "description": "Returned when the operation successfully connects to Conversations API", "schema": { "type": "object", "properties": { "messageId": { "type": "string", - "description": "messageId" + "description": "messageId", + "x-ms-visibility": "important" }, "deliveryChannel": { "type": "string", - "description": "deliveryChannel" + "description": "deliveryChannel", + "x-ms-visibility": "important" }, "status": { "type": "string", - "description": "status" + "description": "status", + "x-ms-visibility": "important" }, "timestamp": { "type": "string", - "description": "timestamp" + "description": "timestamp", + "x-ms-visibility": "important" } } } + }, + "404":{ + "description": "No message was found on given ID" + }, + "403":{ + "description": "Invalid authentication credentials" } }, - "summary": "Status_Check", - "description": "Check for status of your Message for given MessageID. Returned response holds the status (delivered/accepted/failed) in the status field.", - "operationId": "Status_Check", + "summary": "Status Check", + "description": "Check for status of your message", + "operationId": "StatusCheck", "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string", - "description": "To check the status of your message, you need to provide tyntec Conversation API with ID", + "description": "ID of your message", "x-ms-summary": "ID of your message", - "x-ms-url-encoding":"single" - }, - { - "name": "apikey", - "in": "header", - "required": true, - "type": "string", - "x-ms-summary": "Your tyntec API key", - "description": "Your tyntec Conversation API key received from https://my.tyntec.com/api-settings." + "x-ms-url-encoding": "single" } ] } } }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "in": "header", + "name": "apikey" + } + }, + "security": [], + "tags": [], "x-ms-connector-metadata": [ { "propertyName": "Website", @@ -174,11 +192,6 @@ "propertyName": "Categories", "propertyValue": "Communication;Marketing" } - ], - "definitions": {}, - "parameters": {}, - "responses": {}, - "securityDefinitions": {}, - "security": [], - "tags": [] + ] + } \ No newline at end of file diff --git a/certified-connectors/tyntec-SMS/apiProperties.json b/certified-connectors/tyntec-SMS/apiProperties.json index 4972b42d6..a3f025138 100644 --- a/certified-connectors/tyntec-SMS/apiProperties.json +++ b/certified-connectors/tyntec-SMS/apiProperties.json @@ -1,7 +1,21 @@ { "properties": { - "connectionParameters": {}, - "iconBrandColor": "#F99831", + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "apikey", + "description": "The apikey for this api", + "tooltip": "Provide your apikey", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#F8981D", "capabilities": [], "publisher": "tyntec GmbH", "stackOwner": "tyntec GmbH" From 5bd9f8d4e6dbc6c4092a056e665eae18a8de143f Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Thu, 17 Sep 2020 23:11:54 +0200 Subject: [PATCH 070/347] tyntec WhatsApp Business (#439) * added tyntec-WA * remove intro * add icon.png * replaced icon.png * Delete icon.png * Add icon.png * Delete icon.png * Add Icon.png * Delete Icon.png * Fix: Brand color * Added: API key requirement * Changes to the title * minor update * Update: Readme * production version * Returned: default responses Custom responses don't show consistently in Designer * responses update * Responses fix * update Readme * Update apiDefinition.swagger.json --- certified-connectors/tyntec-WA/README.md | 18 ++- .../tyntec-WA/apiDefinition.swagger.json | 116 ++++++++++-------- .../tyntec-WA/apiProperties.json | 18 ++- 3 files changed, 88 insertions(+), 64 deletions(-) diff --git a/certified-connectors/tyntec-WA/README.md b/certified-connectors/tyntec-WA/README.md index e1a10aefe..7cce2c730 100644 --- a/certified-connectors/tyntec-WA/README.md +++ b/certified-connectors/tyntec-WA/README.md @@ -1,8 +1,10 @@ -## Tyntec Conversation API - Send template WhatsApp message +## Tyntec Conversations API - Send template WhatsApp message -Tyntec Conversation API allows you to send template WhatsApp messages. +Tyntec Conversations API allows you to send template WhatsApp messages. -### User Cases of this connector +Create conversational experiences with your customers right on the world’s number one messaging app (over 2 billion monthly active users). Leveraging WhatsApp’s end-to-end encryption and rich features (images, videos, audios, documents, interactive buttons, etc.), you can remove friction from customer onboarding, notifications and support communication. + +### Use Cases of this connector - Use this connector in PowerApps Workflows (great for Marketing, CRM or Sales) - Send SMS messages using Azure Logic Apps - Build SMS support in your Microsoft Power Automate automatizations @@ -19,23 +21,19 @@ You will need the following to proceed: ## Supported requests -- **Send_WhatsApp** using tyntec Conversation API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) +- **Send WhatsApp** using tyntec Conversations API [reference](https://api.tyntec.com/reference/#conversations-send-messages-send-a-message) - To make a successful request, please, populate the followings fields: - - **apikey** - your tyntec API key - **to** - receiver's phone number in _international_ form without leading 00 (_E.g. 4989202451100_) - **from** - your WhatsApp Business account number number - **templateId** - the name of your approved template - - **contentType** - content type of your message, use **body** - **language-policy** - language policy of your template - **language-code** - language code of your template - - **channels key item** - used tyntec Conversation API channel, use **whatsapp** - **parameter-type** - use **text** - **parameter-text** - input your parameter - _if your template uses more parameters, repeat **parameter-type** and **parameter-text** for each parameter your template requires_ - -- **Status_Check** + +- **Status Check** - To make a successful status check, please, provide the connector with the following values - - **apikey** - your tyntec API key - **id** - messageID of your message (_returned after each request_) diff --git a/certified-connectors/tyntec-WA/apiDefinition.swagger.json b/certified-connectors/tyntec-WA/apiDefinition.swagger.json index 5220b65c7..eb76ff49c 100644 --- a/certified-connectors/tyntec-WA/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-WA/apiDefinition.swagger.json @@ -1,14 +1,14 @@ { "swagger": "2.0", "info": { - "title": "tyntec-wa", - "description": "Send a WhatsApp template message using the tyntec conversation API. You can also use Status_check to check status (accepted/delivered/failed)", + "title": "tyntec WhatsApp Business", + "description": "Enables WhatsApp communication channel using the tyntec Conversations API to improve your communication ability", "contact": { "name": "tyntec support", "url": "https://www.tyntec.com/get-help-support", "email": "support@tyntec.com" }, - "version": "1.0" + "version": "1.1" }, "host": "api.tyntec.com", "basePath": "/", @@ -18,87 +18,90 @@ "consumes": [], "produces": [], "paths": { - "/chat-api/v2/messages/": {}, "/chat-api/v2/messages/{id}/status": { "get": { - "responses": { - "default": { - "description": "default", + "responses": { + "202": { + "description": "Returned when the operation successfully connects to Conversations API", "schema": { "type": "object", "properties": { "messageId": { "type": "string", - "description": "messageId" + "description": "messageId", + "x-ms-visibility": "important" }, "deliveryChannel": { "type": "string", - "description": "deliveryChannel" + "description": "deliveryChannel", + "x-ms-visibility": "important" }, "status": { "type": "string", - "description": "status" + "description": "status", + "x-ms-visibility": "important" }, "timestamp": { "type": "string", - "description": "timestamp" + "description": "timestamp", + "x-ms-visibility": "important" } } } + }, + "404":{ + "description": "No message was found on given ID" + }, + "403":{ + "description": "Invalid authentication credentials" } }, - "summary": "Status_Check", - "description": "Check for status of your Message on given MessageID. Returned response holds the status (delivered/accepted/failed) in the status field.", - "operationId": "Status_Check", + "summary": "Status Check", + "description": "Check for status of your message", + "operationId": "StatusCheck", "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string", - "description": "To check status of your message, you need to provide tyntec Conversation API with ID", - "x-ms-summary": "ID of your message" - }, - { - "name": "apikey", - "in": "header", - "required": true, - "type": "string", - "description": "Your tyntec Conversation API key received from https://my.tyntec.com/api-settings.", - "x-ms-summary": "Your tyntec API key" + "description": "messageId", + "x-ms-summary": "message ID", + "x-ms-url-encoding": "single" } ] } }, - "/api.tyntec.com/chat-api/v2/messages": {}, "/chat-api/v2/messages": { "post": { "responses": { - "default": { - "description": "default", + "2O2": { + "description": "Returned when the operation successfully connects to Conversations API", "schema": { "type": "object", "properties": { "messageId": { "type": "string", - "description": "messageId" + "description": "messageId", + "x-ms-visibility": "important" } } } + }, + "400": { + "description": "There was an issue with your channel." + }, + "401": { + "description": "The Viber Service ID or WhatsApp Business Account Number is not authorized with used API key." + }, + "403":{ + "description": "You attempting to use a number that is not assigned to your account" } }, "summary": "Send WhatsApp Template message", "description": "Send WhatsApp Template message", - "operationId": "Send_WhatsApp", + "operationId": "SendWhatsApp", "parameters": [ - { - "name": "apikey", - "in": "header", - "required": true, - "type": "string", - "description": "Your tyntec Conversation API key received from https://my.tyntec.com/api-settings.", - "x-ms-summary": "Your tyntec API key" - }, { "name": "body", "in": "body", @@ -117,7 +120,8 @@ "type": "string", "description": "tyntec Conversation API channel", "title": "Channel", - "default": "whatsapp" + "default": "whatsapp", + "x-ms-visibility": "internal" }, "description": "channels" }, @@ -142,13 +146,13 @@ "properties": { "policy": { "type": "string", - "description": "policy (use deterministic)", + "description": "language policy", "title": "language-policy", "default": "deterministic" }, "code": { "type": "string", - "description": "code", + "description": "language code", "title": "language-code", "default": "en" } @@ -166,9 +170,10 @@ "properties": { "type": { "type": "string", - "description": "type (use body)", + "description": "type", "title": "type", - "default": "body" + "default": "body", + "x-ms-visibility": "internal" }, "parameters": { "type": "array", @@ -204,9 +209,10 @@ }, "contentType": { "type": "string", - "description": "contentType (use template)", + "description": "contentType", "title": "contentType", - "default": "template" + "default": "template", + "x-ms-visibility": "internal" } }, "description": "whatsapp", @@ -228,6 +234,18 @@ } } }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "in": "header", + "name": "apikey" + } + }, + "security": [], + "tags": [], "x-ms-connector-metadata": [ { "propertyName": "Website", @@ -241,11 +259,5 @@ "propertyName": "Categories", "propertyValue": "Communication;Commerce" } - ], - "definitions": {}, - "parameters": {}, - "responses": {}, - "securityDefinitions": {}, - "security": [], - "tags": [] -} \ No newline at end of file + ] +} diff --git a/certified-connectors/tyntec-WA/apiProperties.json b/certified-connectors/tyntec-WA/apiProperties.json index 4972b42d6..a3f025138 100644 --- a/certified-connectors/tyntec-WA/apiProperties.json +++ b/certified-connectors/tyntec-WA/apiProperties.json @@ -1,7 +1,21 @@ { "properties": { - "connectionParameters": {}, - "iconBrandColor": "#F99831", + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "apikey", + "description": "The apikey for this api", + "tooltip": "Provide your apikey", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#F8981D", "capabilities": [], "publisher": "tyntec GmbH", "stackOwner": "tyntec GmbH" From 2c168f099dc8c61ffd8a1fe70ecdeae0c5a3affe Mon Sep 17 00:00:00 2001 From: ytognder <60838829+ytognder@users.noreply.github.com> Date: Fri, 18 Sep 2020 00:13:10 +0300 Subject: [PATCH 071/347] Azure ad IP (#449) * update new action * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * AzureAdIP * fix_pr_error Co-authored-by: Marc Co-authored-by: Marc Hochleutner --- .../AzureAdIp/apiDefinition.swagger.json | 502 ++++++++++++++++++ .../AzureAdIp/apiProperties.json | 56 ++ custom-connectors/AzureAdIp/readme.md | 14 + 3 files changed, 572 insertions(+) create mode 100644 custom-connectors/AzureAdIp/apiDefinition.swagger.json create mode 100644 custom-connectors/AzureAdIp/apiProperties.json create mode 100644 custom-connectors/AzureAdIp/readme.md diff --git a/custom-connectors/AzureAdIp/apiDefinition.swagger.json b/custom-connectors/AzureAdIp/apiDefinition.swagger.json new file mode 100644 index 000000000..6b2ebfbe1 --- /dev/null +++ b/custom-connectors/AzureAdIp/apiDefinition.swagger.json @@ -0,0 +1,502 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Azure AD Identity Protection", + "description": "Identity Protection is a tool that allows organizations to discover, investigate, and remediate identity-based risks in their environment.", + "x-ms-deployment-version": "1.0.0", + "x-ms-api-annotation": { + "status": "Preview" + }, + "contact": { + "name": "Microsoft", + "url": "https://azure.microsoft.com/", + "email": "azuresentinel@microsoft.com" + } + }, + "host": "graph.microsoft.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], + "paths": { + "/beta/riskyUsers/{Id}": { + "get": { + "summary": "Get risky user", + "description": "Get a specific risky user and its properties", + "operationId": "GetRiskUser", + "parameters": [ + { + "name": "Id", + "in": "path", + "required": true, + "description": "User Id or user Principal name", + "type": "string", + "x-ms-summary": "Get Risk User", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "$ref": "#/definitions/Get_Risk_User_Result" + } + } + }, + "x-ms-no-generic-test": true, + "deprecated": false + } + }, + "/beta/riskyUsers/confirmCompromised": { + "post": { + "summary": "Confirm a risky user as compromised", + "description": "Confirm a risky user as compromised", + "operationId": "ConfirmRiskUser", + "x-ms-summary": "confirmCompromised user", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "201": { + "description": "OK" + } + } + } + }, + "/beta/riskDetections/{Id}": { + "get": { + "summary": "Get risk detections", + "description": "Get riskDetections ", + "operationId": "riskDetections", + "parameters": [ + { + "name": "Id", + "in": "path", + "required": true, + "description": "User Id or user Principal Name", + "type": "string", + "x-ms-summary": "Get risk detections", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "$ref": "#/definitions/Get_riskDetection" + } + } + }, + "x-ms-no-generic-test": true, + "deprecated": false + } + }, + "/beta/riskyUsers/dismiss": { + "post": { + "summary": "Dismiss a risky user", + "description": "Dismiss a risky user", + "operationId": "DismissRiskUser", + "x-ms-summary": "Dismiss a risky user", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "201": { + "description": "OK" + } + } + } + }, + "/beta/riskyUsers/{Id}/history": { + "get": { + "summary": "Get the risk history of a risky user", + "description": "Get the risk history", + "operationId": "GetRiskUserHistory", + "x-ms-summary": "History user Data", + "parameters": [ + { + "name": "Id", + "in": "path", + "required": true, + "description": "User Id or user Principal Name", + "type": "string", + "x-ms-summary": "Get history risk for user " + } + ], + "responses": { + "201": { + "description": "201", + "schema": { + "$ref": "#/definitions/Get_risk_history" + } + } + } + } + } + }, + "definitions": { + "Get_Risk_User_Result": { + "description": "Get risk user result", + "type": "object", + "properties": { + "@@odata.context": { + "type": "string" + }, + "id": { + "type": "string", + "description": "Unique ID of the user at risk" + }, + "isDeleted": { + "type": "boolean", + "description": "Indicates whether the user is deleted. Possible values are: true, false" + }, + "isProcessing": { + "type": "boolean", + "description": "Indicates whether a user's risky state is being processed by the backend" + }, + "riskLevel": { + "type": "string", + "description": "Level of the detected risky user" + }, + "riskState": { + "type": "string", + "description": "The date and time that the risky user was last updated" + }, + "riskDetail": { + "type": "string", + "description": "Details of the detected risk" + }, + "riskLastUpdatedDateTime": { + "type": "string", + "description": "The date and time that the risky user was last updated." + }, + "userDisplayName": { + "type": "string", + "description": "Risky user display name" + }, + "userPrincipalName": { + "type": "string", + "description": "Risky user principal name" + } + } + }, + "Get_History": { + "description": "Get History Data", + "type": "object", + "properties": { + "@@odata.context": { + "type": "string" + }, + "value": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "isDeleted": { + "type": "boolean" + }, + "isProcessing": { + "type": "boolean" + }, + "riskLevel": { + "type": "string" + }, + "riskState": { + "type": "string" + }, + "riskDetail": { + "type": "string" + }, + "riskLastUpdatedDateTime": { + "type": "string" + }, + "userDisplayName": { + "type": "string" + }, + "userPrincipalName": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "initiatedBy": {}, + "activity": { + "type": "object", + "properties": { + "eventTypes": { + "type": "array", + "items": { + "type": "string" + } + }, + "riskEventTypes": { + "type": "array", + "items": { + "type": "string" + } + }, + "detail": {} + } + } + }, + "required": [ + "id", + "isDeleted", + "isProcessing", + "riskLevel", + "riskState", + "riskDetail", + "riskLastUpdatedDateTime", + "userDisplayName", + "userPrincipalName", + "userId", + "initiatedBy", + "activity" + ] + } + } + } + }, + "Get_riskDetection": { + "description": "This API provides programmatic access to all risk detections in your Azure AD environment", + "type": "object", + "properties": { + "@@odata.type": { + "type": "string" + }, + "id": { + "type": "string", + "description": "Unique ID of the risk detection. Inherited from entity" + }, + "requestId": { + "type": "string", + "description": "Request ID of the sign-in associated with the risk detection. This property is null if the risk detection is not associated with a sign-in" + }, + "correlationId": { + "type": "string", + "description": "Correlation ID of the sign-in associated with the risk detection. This property is null if the risk detection is not associated with a sign-in" + }, + "riskEventType": { + "type": "string", + "description": "The type of risk event detected" + }, + "riskState": { + "type": "string", + "description": "The state of a detected risky user or sign-in" + }, + "riskLevel": { + "type": "string", + "description": "Level of the detected risk" + }, + "riskDetail": { + "type": "string", + "description": "Details of the detected risk" + }, + "source": { + "type": "string", + "description": "Source of the risk detection" + }, + "detectionTimingType": { + "type": "string", + "description": "Date and time that the risk was detected" + }, + "activity": { + "type": "string", + "description": "Indicates the activity type the detected risk is linked to" + }, + "tokenIssuerType": { + "type": "string", + "description": "Indicates the type of token issuer for the detected sign-in risk" + }, + "ipAddress": { + "type": "string", + "description": "Provides the IP address of the client from where the risk occurred." + }, + "location": { + "type": "object", + "description": "Location of the sign-in", + "properties": { + "@@odata.type": { + "type": "string" + } + } + }, + "activityDateTime": { + "type": "string", + "description": "Date and time that the risky activity occurred" + }, + "detectedDateTime": { + "type": "string", + "description": "Date and time that the risk was detected" + }, + "lastUpdatedDateTime": { + "type": "string", + "description": "Date and time that the risk detection was last updated" + }, + "userId": { + "type": "string", + "description": "Unique ID of the user" + }, + "userDisplayName": { + "type": "string", + "description": "The user principal name (UPN) of the user" + }, + "userPrincipalName": { + "type": "string", + "description": "The user principal name (UPN) of the user." + }, + "additionalInfo": { + "type": "string", + "description": "Additional information associated with the risk detection in JSON format." + } + } + }, + "Get_risk_history": { + "description": "Represents the risk history of an Azure AD user as determined by Azure AD Identity Protection", + "type": "object", + "properties": { + "@@odata.type": { + "type": "string" + }, + "id": { + "type": "string", + "description": "Inherited from entity" + }, + "isDeleted": { + "type": "string", + "description": "Inherited from riskyUser" + }, + "isProcessing": { + "type": "string", + "description": "Inherited from riskyUser" + }, + "riskLastUpdatedDateTime": { + "type": "string", + "description": "Inherited from riskyUser" + }, + "riskLevel": { + "type": "string", + "description": "Inherited from riskyUser" + }, + "riskState": { + "type": "string", + "description": "Inherited from riskyUser" + }, + "riskDetail": { + "type": "string", + "description": "Inherited from riskyUser" + }, + "userDisplayName": { + "type": "string", + "description": "Inherited from riskyUser" + }, + "userPrincipalName": { + "type": "string", + "description": "Risky user principal name" + }, + "userId": { + "type": "string", + "description": "The id of the user" + }, + "initiatedBy": { + "type": "string", + "description": "The id of actor that does the operation" + }, + "activity": { + "type": "object", + "description": "The activity related to user risk level change", + "properties": { + "@@odata.type": { + "type": "string" + } + } + } + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "oauth2_auth": { + "type": "oauth2", + "flow": "accessCode", + "authorizationUrl": "https://login.windows.net/common/oauth2/authorize", + "tokenUrl": "https://login.windows.net/common/oauth2/authorize", + "scopes": { + "Directory.ReadWrite.All": "Directory.ReadWrite.All", + "Group.ReadWrite.All": "Group.ReadWrite.All", + "User.ReadWrite.All": "User.ReadWrite.All", + "offline_access": "offline_access", + "IdentityRiskEvent.Read.All": "IdentityRiskEvent.Read.All", + "IdentityRiskEvent.ReadWrite.All": "IdentityRiskEvent.ReadWrite.All", + "IdentityRiskyUser.Read.All": "IdentityRiskyUser.Read.All", + "IdentityRiskyUser.ReadWrite.All": "IdentityRiskyUser.ReadWrite.All" + } + } + }, + "security": [ + { + "oauth2_auth": [ + "Directory.ReadWrite.All", + "Group.ReadWrite.All", + "User.ReadWrite.All", + "offline_access", + "IdentityRiskEvent.Read.All", + "IdentityRiskEvent.ReadWrite.All", + "IdentityRiskyUser.Read.All", + "IdentityRiskyUser.ReadWrite.All" + ] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.microsoft.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://privacy.microsoft.com/en-us/privacystatement" + }, + { + "propertyName": "Categories", + "propertyValue": "Website" + } + ] +} \ No newline at end of file diff --git a/custom-connectors/AzureAdIp/apiProperties.json b/custom-connectors/AzureAdIp/apiProperties.json new file mode 100644 index 000000000..4a682c206 --- /dev/null +++ b/custom-connectors/AzureAdIp/apiProperties.json @@ -0,0 +1,56 @@ +{ + "properties": { + "connectionParameters": { + "token": { + "type": "oauthSetting", + "oAuthSettings": { + "identityProvider": "aad", + "clientId": "b37216c7-2651-4ee5-9c5d-617a30978148", + "scopes": [ + "Directory.ReadWrite.All", + "Group.ReadWrite.All", + "User.ReadWrite.All", + "offline_access", + "IdentityRiskEvent.Read.All", + "IdentityRiskEvent.ReadWrite.All", + "IdentityRiskyUser.Read.All", + "IdentityRiskyUser.ReadWrite.All" + ], + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "properties": { + "IsFirstParty": "False", + "AzureActiveDirectoryResourceId": "https://graph.microsoft.com/" + }, + "customParameters": { + "loginUri": { + "value": "https://login.windows.net" + }, + "tenantId": { + "value": "5b5a146c-eba8-46af-96f8-e31b50d15a3f" + }, + "resourceUri": { + "value": "https://graph.microsoft.com/" + } + } + } + }, + "token:TenantId": { + "type": "string", + "metadata": { + "sourceType": "AzureActiveDirectoryTenant" + }, + "uiDefinition": { + "constraints": { + "required": "false", + "hidden": "true" + } + } + } + }, + "iconBrandColor": "#2C75D5", + "capabilities": [], + "publisher":"Microsoft", + "stackOwner":"Microsoft" + } +} \ No newline at end of file diff --git a/custom-connectors/AzureAdIp/readme.md b/custom-connectors/AzureAdIp/readme.md new file mode 100644 index 000000000..e2ce98c15 --- /dev/null +++ b/custom-connectors/AzureAdIp/readme.md @@ -0,0 +1,14 @@ + +Identity Protection is a tool that allows organizations to discover, investigate, and remediate identity-based risks in their environment. +This connector will leverage the riskyUsers, riskDetections, and signIns APIs. + + +## Pre-requisites + +Azure AD Identity Protection is a premium feature. You need an Azure AD Premium P1 or P2 license to access the riskDetection API (note: P1 licenses receive limited risk information). The riskyUsers API is only available to Azure AD Premium P2 licenses only. + + +## API documentation + +https://docs.microsoft.com/en-us/graph/api/resources/identityprotectionroot?view=graph-rest-1.0 + From 9d9b197054584413807ec832accea4de2de6991c Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Sat, 19 Sep 2020 00:01:06 +0200 Subject: [PATCH 072/347] Tyntec portability check (#453) * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * Added tyntec Portability Check Co-authored-by: Marc Co-authored-by: Marc Hochleutner --- .../tyntec Portability Check/README.md | 43 ++++++ .../apiDefinition.swagger.json | 140 ++++++++++++++++++ .../apiProperties.json | 23 +++ 3 files changed, 206 insertions(+) create mode 100644 certified-connectors/tyntec Portability Check/README.md create mode 100644 certified-connectors/tyntec Portability Check/apiDefinition.swagger.json create mode 100644 certified-connectors/tyntec Portability Check/apiProperties.json diff --git a/certified-connectors/tyntec Portability Check/README.md b/certified-connectors/tyntec Portability Check/README.md new file mode 100644 index 000000000..7e9f93704 --- /dev/null +++ b/certified-connectors/tyntec Portability Check/README.md @@ -0,0 +1,43 @@ +## Tyntec Portability Check + +Adds the ability to check phone numbers against the tyntec number portability database to validate phone numbers. It can be used to increase conversion, improve phone number data mining, and reduce fraudulent SIM swaps attempts. + + +### Use Cases of this connector +- Validating Contact Phone numbers +- Mining more data on your Contact +- Understanding if you should use the SMS channel with the Contact +- Fraud Prevention (detect SIM swaps) +And many more! + + +## Pre-requisites +You will need the following to proceed: +- A Microsoft Power Apps or Power Automate plan with custom connector feature +- [tyntec API Key](http://my.tyntec.com/api-settings) + +## Supported requests +- **CheckPhoneNumber** using tyntec Portability Check API [reference](https://api.tyntec.com/reference/#number-information-global-number-portability) + - To make a successful request, please, populate the followings fields: + - *msisdn* - The Phone Number you want to check + +## Interpreting received values +- "requestId": The ID of your request +- "msisdn": The phone number of interest, given in the international format +- "ported": An indication of the porting status (True/False) +- "errorCode": The reason for an unsuccessful attempt (if 'ffff' then the phone number doesn't exist) +- "mcc": A representative MCC (Mobile Country Code) of the operator +- "mnc": A representative MNC (Mobile Network Code) of the operator +- "ttId": The respective tyntec ID of the network +- "operator": The operator's name +- "country": Country of its operator +- "timeZone": Timezone of the given Phone number +- "technology": The technology used by the operator's network. Possible values are: GSM, MVNO GSM, GSM/CDMA, Satellite, CDMA, iDen, iDen/GSM, Pager, Fixed +- "synchronous": true + +## How to get API key +Please [sign up for a free account](https://www.tyntec.com/create-account). In your account, select the [API settings](http://my.tyntec.com/api-settings) and copy your API key. + +## Deployment instructions +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as a custom connector in Microsoft Power Automate and Power Apps. + diff --git a/certified-connectors/tyntec Portability Check/apiDefinition.swagger.json b/certified-connectors/tyntec Portability Check/apiDefinition.swagger.json new file mode 100644 index 000000000..f87185973 --- /dev/null +++ b/certified-connectors/tyntec Portability Check/apiDefinition.swagger.json @@ -0,0 +1,140 @@ +{ + "swagger": "2.0", + "info": { + "title": "tyntec Portability Check", + "description": "tyntec Portability Check allows you to validate a phone number in the tyntec number portability database", + "contact": { + "name": "tyntec support", + "url": "https://www.tyntec.com/get-help-support", + "email": "support@tyntec.com" + }, + "version": "1.0" + }, + "host": "api.tyntec.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/nis/v1/gnp": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "requestId" + }, + "msisdn": { + "type": "string", + "description": "msisdn" + }, + "ported": { + "type": "string", + "description": "ported" + }, + "errorCode": { + "type": "string", + "description": "errorCode" + }, + "mcc": { + "type": "string", + "description": "mcc" + }, + "mnc": { + "type": "string", + "description": "mnc" + }, + "ttId": { + "type": "string", + "description": "ttId" + }, + "operator": { + "type": "string", + "description": "operator" + }, + "country": { + "type": "string", + "description": "country" + }, + "timeZone": { + "type": "string", + "description": "timeZone" + }, + "technology": { + "type": "string", + "description": "technology" + }, + "synchronous": { + "type": "boolean", + "description": "synchronous", + "x-ms-visibility": "internal" + } + } + } + }, + "400":{ + "description":"Bad request - Check if msisdn is numeric" + }, + "401":{ + "description":"Unauthorized - Invalid account credentials" + }, + "402":{ + "description":"Payment Required - The current credit balance is not sufficient for this request" + }, + "403":{ + "description":"Forbidden - Authorization information is missing" + }, + "500":{ + "description":"Internal Service Error" + } + }, + "operationId": "CheckPhoneNumber", + "summary": "Check Phone number using the Portability Check", + "parameters": [ + { + "name": "msisdn", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "Checked Phone number", + "description": "Checked Phone numbe", + "x-ms-visibility": "important" + } + ], + "description": "This Action get Portability Check data for a given phone number" + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "in": "header", + "name": "apikey" + } + }, + "security": [], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.tyntec.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.tyntec.com/data-privacy-statement" + }, + { + "propertyName": "Categories", + "propertyValue": "Communication;Marketing" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/tyntec Portability Check/apiProperties.json b/certified-connectors/tyntec Portability Check/apiProperties.json new file mode 100644 index 000000000..a3f025138 --- /dev/null +++ b/certified-connectors/tyntec Portability Check/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "apikey", + "description": "The apikey for this api", + "tooltip": "Provide your apikey", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#F8981D", + "capabilities": [], + "publisher": "tyntec GmbH", + "stackOwner": "tyntec GmbH" + } +} \ No newline at end of file From 5317dd88fa1918c82d74793880b015954c94e999 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Sat, 19 Sep 2020 00:24:29 +0200 Subject: [PATCH 073/347] Tyntec WhatsApp (typo fix) (#454) * added tyntec-WA * remove intro * add icon.png * replaced icon.png * Delete icon.png * Add icon.png * Delete icon.png * Add Icon.png * Delete Icon.png * Fix: Brand color * Added: API key requirement * Changes to the title * minor update * Update: Readme * production version * Returned: default responses Custom responses don't show consistently in Designer * responses update * Responses fix * update Readme * Update apiDefinition.swagger.json * fixed typo --- certified-connectors/tyntec-WA/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/tyntec-WA/apiDefinition.swagger.json b/certified-connectors/tyntec-WA/apiDefinition.swagger.json index eb76ff49c..efba525c6 100644 --- a/certified-connectors/tyntec-WA/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-WA/apiDefinition.swagger.json @@ -75,7 +75,7 @@ "/chat-api/v2/messages": { "post": { "responses": { - "2O2": { + "202": { "description": "Returned when the operation successfully connects to Conversations API", "schema": { "type": "object", From ce0956dd86817f2f177d15904e7a9b493fa9b480 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Sat, 19 Sep 2020 02:24:17 +0200 Subject: [PATCH 074/347] Update propertyValue value for Categories (#455) --- .../tyntec Portability Check/apiDefinition.swagger.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/tyntec Portability Check/apiDefinition.swagger.json b/certified-connectors/tyntec Portability Check/apiDefinition.swagger.json index f87185973..4f920b298 100644 --- a/certified-connectors/tyntec Portability Check/apiDefinition.swagger.json +++ b/certified-connectors/tyntec Portability Check/apiDefinition.swagger.json @@ -134,7 +134,7 @@ }, { "propertyName": "Categories", - "propertyValue": "Communication;Marketing" + "propertyValue": "Communication;Data" } ] -} \ No newline at end of file +} From 53322beb7f8050d4563b329914b33d26fda03695 Mon Sep 17 00:00:00 2001 From: Andreas Date: Mon, 21 Sep 2020 15:58:26 +0200 Subject: [PATCH 075/347] Using policy for url/token --- .../Peltarion/apiDefinition.swagger.json | 14 ++----------- .../Peltarion/apiProperties.json | 20 ++++++++----------- 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index d6081cdd2..18a47964f 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "title": "Peltarion", - "description": "Using this connector, you can connect your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data.", + "description": "Using this connector, you can connect your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data", "version": "1.0", "contact": { "name": "Peltarion", @@ -77,15 +77,5 @@ "definitions": {}, "parameters": {}, "responses": {}, - "securityDefinitions": { - "basic_auth": { - "type": "basic" - } - }, - "security": [ - { - "basic_auth": [] - } - ], - "tags": [] + "securityDefinitions": {} } \ No newline at end of file diff --git a/certified-connectors/Peltarion/apiProperties.json b/certified-connectors/Peltarion/apiProperties.json index b4372bc1a..4ed105239 100644 --- a/certified-connectors/Peltarion/apiProperties.json +++ b/certified-connectors/Peltarion/apiProperties.json @@ -1,28 +1,24 @@ { "properties": { "connectionParameters": { - "username": { - "type": "securestring", + "peltarionurl": { + "type": "string", "uiDefinition": { "displayName": "Peltarion API URL", - "description": "The Peltarion API URL for this api", + "description": "The Peltarion API URL for this app", "tooltip": "Provide the Peltarion API URL", "constraints": { - "tabIndex": 2, - "clearText": true, "required": "true" } } }, - "password": { - "type": "securestring", + "peltariontoken": { + "type": "string", "uiDefinition": { "displayName": "Peltarion API Token", - "description": "The Peltarion API Token for this api", + "description": "The Peltarion API Token for this app", "tooltip": "Provide the Peltarion API Token", "constraints": { - "tabIndex": 3, - "clearText": false, "required": "true" } } @@ -57,7 +53,7 @@ "title": "PeltarionURL", "parameters": { "x-ms-apimTemplateParameter.name": "peltarionurl", - "x-ms-apimTemplateParameter.value": "@connectionParameters('username','')", + "x-ms-apimTemplateParameter.value": "@connectionParameters('peltarionurl','')", "x-ms-apimTemplateParameter.existsAction": "override", "x-ms-apimTemplate-policySection": "Request" } @@ -67,7 +63,7 @@ "title": "PeltarionToken", "parameters": { "x-ms-apimTemplateParameter.name": "peltariontoken", - "x-ms-apimTemplateParameter.value": "@connectionParameters('password','')", + "x-ms-apimTemplateParameter.value": "@connectionParameters('peltariontoken','')", "x-ms-apimTemplateParameter.existsAction": "override", "x-ms-apimTemplate-policySection": "Request" } From c9cf35ac5aaf7383df9225793763d04488e93ea9 Mon Sep 17 00:00:00 2001 From: Sear Lin Date: Mon, 21 Sep 2020 17:49:45 +0000 Subject: [PATCH 076/347] Add AvePoint Cloud Governance connector (#457) * add AvePoint Cloud Governance artifacts * Update Readme.md * Update apiDefinition.swagger.json * update swagger definition * update swagger definition * update swagger definition * update color Co-authored-by: xlin --- .../AvePoint Cloud Governance/Readme.md | 29 + .../apiDefinition.swagger.json | 2859 +++++++++++++++++ .../apiProperties.json | 36 + 3 files changed, 2924 insertions(+) create mode 100644 certified-connectors/AvePoint Cloud Governance/Readme.md create mode 100644 certified-connectors/AvePoint Cloud Governance/apiDefinition.swagger.json create mode 100644 certified-connectors/AvePoint Cloud Governance/apiProperties.json diff --git a/certified-connectors/AvePoint Cloud Governance/Readme.md b/certified-connectors/AvePoint Cloud Governance/Readme.md new file mode 100644 index 000000000..d5f7da137 --- /dev/null +++ b/certified-connectors/AvePoint Cloud Governance/Readme.md @@ -0,0 +1,29 @@ + +## AvePoint Cloud Governance + +The AvePoint Cloud Governance connector offers automation and integration of Cloud Governance functions through Power Automate. You can use the Cloud Governance connector in Power Automate to automate your working processes. + + +## Pre-requisites + + +You will need the following to proceed: + +• You need to be an AvePoint Cloud Governance administrator. + +• You need to create an API Authentication Profile in AvePoint Cloud Governance to generate a client secret. The client secret will be used to call the Cloud Governance API. + + +## Supported Operations + +The connector supports the following operations: + +- `Get a request` : Get details of a request. +- `Submit a request` : Submit a request for a specific service. +- `List workspaces` : Retrieve a list of workspaces managed by Cloud Governance. +- `Update a request` : Update an existing request. + + +## Deployment instructions + +Please refer to [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as custom connector in Microsoft Power Automate and Power Apps. diff --git a/certified-connectors/AvePoint Cloud Governance/apiDefinition.swagger.json b/certified-connectors/AvePoint Cloud Governance/apiDefinition.swagger.json new file mode 100644 index 000000000..b55ba14c6 --- /dev/null +++ b/certified-connectors/AvePoint Cloud Governance/apiDefinition.swagger.json @@ -0,0 +1,2859 @@ +{ + "swagger": "2.0", + "info": { + "title": "AvePoint Cloud Governance", + "description": "Automate provisioning, management, and lifecycle for Teams, Groups, Communities, and Sites. Connect to AvePoint Cloud Governance to execute additional actions in Microsoft 365 such a creation of new content, add users, and update information in lists.", + "contact": { + "name": "AvePoint Support", + "url": "http://www.avepoint.com/support", + "email": "support@avepoint.com" + }, + "version": "1.0" + }, + "host": "go-api.avepointonlineservices.com", + "basePath": "/admin", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/flow/hooks/{id}": { + "delete": { + "tags": [ + "Flow" + ], + "summary": "Delete web hook", + "description": "Delete web hook by id.", + "operationId": "Flow_DeleteHookById", + "parameters": [ + { + "in": "path", + "name": "id", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Web Hook Id", + "description": "Id of the web hook." + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/hooks/errortask/created": { + "x-ms-notification-content": { + "description": "This operation triggers when an error task is generated.", + "schema": { + "$ref": "#/definitions/FlowErrorTaskCreatedHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When an error task is generated", + "description": "This operation triggers when an error task is generated.", + "operationId": "Flow_CreateHookForErrorTaskCreated", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/errortask/retried": { + "x-ms-notification-content": { + "description": "This operation triggers when the retry action is performed on an error task.", + "schema": { + "$ref": "#/definitions/FlowTaskCompletedHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When an error task is retried", + "description": "This operation triggers when the retry action is performed on an error task.", + "operationId": "Flow_CreateHookForErrorTaskRetried", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/request/cancelled": { + "x-ms-notification-content": { + "description": "This operation triggers when a request is canceled.", + "schema": { + "$ref": "#/definitions/FlowRequestHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When a request is canceled", + "description": "This operation triggers when a request is canceled.", + "operationId": "Flow_CreateHookForRequestCancelled", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/request/completed": { + "x-ms-notification-content": { + "description": "This operation triggers when a request is completed.", + "schema": { + "$ref": "#/definitions/FlowRequestHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When a request is completed", + "description": "This operation triggers when a request is completed.", + "operationId": "Flow_CreateHookForRequestCompleted", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/request/submitted": { + "x-ms-notification-content": { + "description": "This operation triggers when a request is submitted.", + "schema": { + "$ref": "#/definitions/FlowRequestHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When a request is submitted", + "description": "This operation triggers when a request is submitted.", + "operationId": "Flow_CreateHookForRequestSubmitted", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/approved": { + "x-ms-notification-content": { + "description": "This operation triggers when a request is approved.", + "schema": { + "$ref": "#/definitions/FlowTaskCompletedHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When a request is approved", + "description": "This operation triggers when a request is approved.", + "operationId": "Flow_CreateHookForTaskApproved", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/autoimport": { + "x-ms-notification-content": { + "description": "This operation triggers when an import process with pre-defined governance details is completed.", + "schema": { + "$ref": "#/definitions/FlowAutoImportHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When an import process with pre-defined governance details is completed", + "description": "This operation triggers when an import process with pre-defined governance details is completed.", + "operationId": "Flow_CreateHookForFullyAutoImportCompleted", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/confirm": { + "x-ms-notification-content": { + "description": "This operation triggers when an end user completes a governance details confirmation task for a workspace.", + "schema": { + "$ref": "#/definitions/FlowAutoImportHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When an end user completes a governance details confirmation task", + "description": "This operation triggers when an end user completes a governance details confirmation task for a workspace.", + "operationId": "Flow_CreateHookForConfirmDetailCompleted", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/created": { + "x-ms-notification-content": { + "description": "This operation triggers when an approval task is assigned.", + "schema": { + "$ref": "#/definitions/FlowTaskCreatedHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When an approval task is assigned", + "description": "This operation triggers when an approval task is assigned.", + "operationId": "Flow_CreateHookForTaskCreated", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/rejected": { + "x-ms-notification-content": { + "description": "This operation triggers when a request is rejected.", + "schema": { + "$ref": "#/definitions/FlowTaskCompletedHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When a request is rejected", + "description": "This operation triggers when a request is rejected.", + "operationId": "Flow_CreateHookForTaskRejected", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/renewal/completed": { + "x-ms-notification-content": { + "description": "This operation triggers when a renewal task is completed.", + "schema": { + "$ref": "#/definitions/FlowRenewalHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When a renewal task is completed", + "description": "This operation triggers when a renewal task is completed.", + "operationId": "Flow_CreateHookForRenewalTaskCompleted", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/renewal/exception": { + "x-ms-notification-content": { + "description": "This operation triggers when a renewal process encounters an exception.", + "schema": { + "$ref": "#/definitions/FlowRenewalExceptionHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When a renewal process encounters an exception", + "description": "This operation triggers when a renewal process encounters an exception.", + "operationId": "Flow_CreateHookForRenewalTaskException", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/renewal/overdue": { + "x-ms-notification-content": { + "description": "This operation triggers when a renewal task is overdue.", + "schema": { + "$ref": "#/definitions/FlowRenewalTaskHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When a renewal task is overdue", + "description": "This operation triggers when a renewal task is overdue.", + "operationId": "Flow_CreateHookForRenewalTaskOverdue", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/hooks/task/skipped": { + "x-ms-notification-content": { + "description": "This operation triggers when the skip action is performed on an error task.", + "schema": { + "$ref": "#/definitions/FlowTaskCompletedHookMessage" + } + }, + "post": { + "tags": [ + "Flow" + ], + "summary": "When an error task is skipped", + "description": "This operation triggers when the skip action is performed on an error task.", + "operationId": "Flow_CreateHookForErrorTaskSkipped", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-trigger": "single" + } + }, + "/flow/objectstatus": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get object status", + "description": "Get all statuses of object.", + "operationId": "Flow_GetObjectStatus", + "produces": [ + "text/plain", + "application/json" + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/StringModel" + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/objecttypes": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get object types", + "description": "Get all types of object.", + "operationId": "Flow_ObjectTypes", + "produces": [ + "text/plain", + "application/json" + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/StringModel" + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/requests/{requestId}": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get a request", + "description": "Get details of a request.", + "operationId": "Flow_GetRequestById", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "serviceType", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "Flow_GetServiceTypes", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Service Type", + "description": "Type of the service." + }, + { + "in": "query", + "name": "serviceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "Flow_GetServiceNamesByType", + "value-path": "id", + "parameters": { + "serviceType": { + "parameter": "serviceType" + } + }, + "value-title": "name" + }, + "x-ms-summary": "Service Name", + "description": "Name of the service." + }, + { + "in": "path", + "name": "requestId", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Request ID", + "description": "Unique ID of the request." + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "x-ms-dynamic-schema": { + "operationId": "Flow_GetViewRequestSchema", + "value-path": "schema", + "parameters": { + "serviceId": { + "parameter": "serviceId" + }, + "serviceType": { + "parameter": "serviceType" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + } + } + }, + "/flow/requests": { + "post": { + "tags": [ + "Flow" + ], + "summary": "Submit a request", + "description": "Submit a request for a specific service.", + "operationId": "Flow_SubmitRequest", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "serviceType", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "Flow_GetServiceTypes", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Service Type", + "description": "Type of the service." + }, + { + "in": "query", + "name": "serviceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "Flow_GetServiceNamesByType", + "value-path": "id", + "parameters": { + "serviceType": { + "parameter": "serviceType" + } + }, + "value-title": "name" + }, + "x-ms-summary": "Service Name", + "description": "Name of the service." + }, + { + "in": "query", + "name": "DelegateUserPrincipalName", + "type": "string", + "x-ms-summary": "Requester Username", + "description": "Username of the requester." + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "Flow_GetSubmitRequestSchema", + "value-path": "schema", + "parameters": { + "serviceId": { + "parameter": "serviceId" + }, + "serviceType": { + "parameter": "serviceType" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "format": "uuid", + "type": "string" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + } + }, + "put": { + "tags": [ + "Flow" + ], + "summary": "Update a request", + "description": "Update an existing request.", + "operationId": "Flow_EditRequest", + "consumes": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "serviceType", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "Flow_GetServiceTypes", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Service Type", + "description": "Type of the service." + }, + { + "in": "query", + "name": "serviceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "Flow_GetServiceNamesByType", + "value-path": "id", + "parameters": { + "serviceType": { + "parameter": "serviceType" + } + }, + "value-title": "name" + }, + "x-ms-summary": "Service Name", + "description": "Name of the service." + }, + { + "in": "query", + "name": "id", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-summary": "Request ID", + "description": "Unique ID of the request." + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "Flow_GetUpdateRequestSchema", + "value-path": "schema", + "parameters": { + "serviceId": { + "parameter": "serviceId" + }, + "serviceType": { + "parameter": "serviceType" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + } + } + }, + "/flow/schema/request/submit": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get submitting request schema", + "description": "Get schema for submitting request.", + "operationId": "Flow_GetSubmitRequestSchema", + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "serviceId", + "required": true, + "type": "string", + "x-ms-summary": "Service ID", + "description": "Unique ID of the service." + }, + { + "in": "query", + "name": "serviceType", + "required": true, + "type": "string", + "enum": [ + "CustomService", + "CreateTeams" + ], + "x-ms-summary": "Service Type", + "description": "Type of the service." + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/FlowSchemaResponse" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/schema/request/update": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get updating request schema", + "description": "Get schema for updating request.", + "operationId": "Flow_GetUpdateRequestSchema", + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "serviceId", + "required": true, + "type": "string", + "x-ms-summary": "Service ID", + "description": "Unique ID of the service." + }, + { + "in": "query", + "name": "serviceType", + "required": true, + "type": "string", + "enum": [ + "CustomService", + "CreateTeams" + ], + "x-ms-summary": "Service Type", + "description": "Type of the service." + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/FlowSchemaResponse" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/schema/request/view": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get viewing request schema", + "description": "Get schema for viewing request.", + "operationId": "Flow_GetViewRequestSchema", + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "serviceId", + "required": true, + "type": "string", + "x-ms-summary": "Service ID", + "description": "Unique ID of the service." + }, + { + "in": "query", + "name": "serviceType", + "required": true, + "type": "string", + "enum": [ + "CustomService", + "CreateTeams" + ], + "x-ms-summary": "Service Type", + "description": "Type of the service." + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/FlowSchemaResponse" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/schema/workspace": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get view request schema", + "description": "Get schema for workspace.", + "operationId": "Flow_GetWorkspaceSchema", + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "workspaceType", + "type": "string", + "enum": [ + "All", + "Site", + "Group", + "Teams" + ], + "x-ms-summary": "Workspace Type", + "description": "Type of workspace." + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/FlowSchemaResponse" + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/services": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get service names", + "description": "Get service names by specific type.", + "operationId": "Flow_GetServiceNamesByType", + "produces": [ + "text/plain", + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "serviceType", + "type": "string", + "enum": [ + "CustomService", + "CreateTeams" + ], + "x-ms-summary": "Service Type", + "description": "Type of the service." + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/StringModel" + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/servicetypes": { + "get": { + "tags": [ + "Flow" + ], + "summary": "Get service types", + "description": "Get supported service types.", + "operationId": "Flow_GetServiceTypes", + "produces": [ + "text/plain", + "application/json" + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/StringModel" + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + }, + "x-ms-visibility": "internal" + } + }, + "/flow/workspace": { + "get": { + "tags": [ + "Flow" + ], + "summary": "List workspaces", + "description": "Retrieve a list of workspaces managed by Cloud Governance.", + "operationId": "Flow_ListWorkspace", + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "query", + "name": "workspaceType", + "type": "string", + "default": "All", + "x-ms-dynamic-values": { + "operationId": "Flow_ObjectTypes", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Workspace Type", + "description": "Filter by the workspace type." + }, + { + "in": "query", + "name": "primaryContact", + "type": "string", + "default": "", + "x-ms-summary": "Primary Workspace Contact", + "description": "Filter by the primary workspace contact." + }, + { + "in": "query", + "name": "status", + "type": "string", + "default": "All", + "x-ms-dynamic-values": { + "operationId": "Flow_GetObjectStatus", + "value-path": "id", + "value-title": "name" + }, + "x-ms-visibility": "advanced", + "x-ms-summary": "Workspace Status", + "description": "Filter by the workspace status." + }, + { + "in": "query", + "name": "urlorIdorEmail", + "type": "string", + "default": "", + "x-ms-visibility": "advanced", + "x-ms-summary": "Workspace URL or E-mail Address", + "description": "Filter by the workspace URL or e-mail address." + }, + { + "in": "query", + "name": "secondaryContact", + "type": "string", + "default": "", + "x-ms-visibility": "advanced", + "x-ms-summary": "Secondary Workspace Contact", + "description": "Filter by the secondary workspace contact." + }, + { + "in": "query", + "name": "top", + "type": "integer", + "format": "int32", + "default": 2000, + "x-ms-visibility": "advanced", + "x-ms-summary": "Workspace Count", + "description": "Number of workspaces to retrieve (default = 2000, maximum = 3000)." + }, + { + "in": "query", + "name": "nextLink", + "type": "string", + "default": "", + "x-ms-visibility": "advanced", + "x-ms-summary": "Next Token", + "description": "Use the next token to retrieve remaining workspaces that have not been listed here." + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "x-ms-dynamic-schema": { + "operationId": "Flow_GetWorkspaceSchema", + "value-path": "schema", + "parameters": { + "workspaceType": { + "parameter": "workspaceType" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Internal server error" + } + } + } + } + }, + "definitions": { + "CreateWebHookModel": { + "required": [ + "url" + ], + "type": "object", + "properties": { + "url": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigge Url", + "description": "Url of trigger.", + "x-ms-notification-url": true + }, + "triggerType": { + "enum": [ + "None", + "RequestSubmitted", + "RequestCompleted", + "RequestCancelled", + "TaskCreated", + "TaskApproved", + "TaskRejected", + "ErrorTaskCreated", + "TaskRetried", + "TaskSkipped", + "RenewalSuccess", + "RenewalException", + "RenewalOverdue", + "FullyAutoImportSuccess", + "ConfirmDetailSuccess" + ], + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Trigger Type", + "description": "Type of trigger." + } + } + }, + "FlowErrorTaskCreatedHookMessage": { + "type": "object", + "properties": { + "summary": { + "type": "string", + "x-ms-summary": "Request Summary", + "description": "Summary of the request." + }, + "taskId": { + "type": "string", + "x-ms-summary": "Task ID", + "description": "Unique ID of the task." + }, + "taskLink": { + "type": "string", + "x-ms-summary": "Task Link", + "description": "Link of the task." + }, + "assigneeDisplayName": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Assignee Display Name", + "description": "Display name of the task assignee." + }, + "assigneeIdentityName": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Assignee Username", + "description": "Username of the task assignee." + }, + "message": { + "type": "string", + "x-ms-summary": "Error Details", + "description": "Details of the error task." + }, + "requestId": { + "type": "string", + "x-ms-summary": "Request Ticket Number", + "description": "Ticket number of the request." + }, + "requestGuid": { + "type": "string", + "x-ms-summary": "Request ID", + "description": "Unique ID of the request." + }, + "requesterIdentityName": { + "type": "string", + "x-ms-summary": "Requester Username", + "description": "Username of the requester." + }, + "requester": { + "type": "string", + "x-ms-summary": "Requester Display Name", + "description": "Display name of the requester." + }, + "serviceType": { + "type": "string", + "x-ms-summary": "Service Type", + "description": "Type of the service." + }, + "triggerTime": { + "type": "string", + "x-ms-summary": "Trigger Time", + "description": "The time that this trigger works." + }, + "objectUrl": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + } + } + }, + "FlowTaskCompletedHookMessage": { + "type": "object", + "properties": { + "summary": { + "type": "string", + "x-ms-summary": "Request Summary", + "description": "Summary of the request." + }, + "taskId": { + "type": "string", + "x-ms-summary": "Task ID", + "description": "Unique ID of the task." + }, + "taskLink": { + "type": "string", + "x-ms-summary": "Task Link", + "description": "Link of the task." + }, + "approverDisplayName": { + "type": "string", + "x-ms-summary": "Approver Display Name", + "description": "Display name of the approver." + }, + "approverIdentityName": { + "type": "string", + "x-ms-summary": "Approver Username", + "description": "Username of the approver." + }, + "requestId": { + "type": "string", + "x-ms-summary": "Request Ticket Number", + "description": "Ticket number of the request." + }, + "requestGuid": { + "type": "string", + "x-ms-summary": "Request ID", + "description": "Unique ID of the request." + }, + "requesterIdentityName": { + "type": "string", + "x-ms-summary": "Requester Username", + "description": "Username of the requester." + }, + "requester": { + "type": "string", + "x-ms-summary": "Requester Display Name", + "description": "Display name of the requester." + }, + "serviceType": { + "type": "string", + "x-ms-summary": "Service Type", + "description": "Type of the service." + }, + "triggerTime": { + "type": "string", + "x-ms-summary": "Trigger Time", + "description": "The time that this trigger works." + }, + "objectUrl": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + } + } + }, + "FlowRequestHookMessage": { + "type": "object", + "properties": { + "summary": { + "type": "string", + "x-ms-summary": "Request Summary", + "description": "Summary of the request." + }, + "requestId": { + "type": "string", + "x-ms-summary": "Request Ticket Number", + "description": "Ticket number of the request." + }, + "requestGuid": { + "type": "string", + "x-ms-summary": "Request ID", + "description": "Unique ID of the request." + }, + "requesterIdentityName": { + "type": "string", + "x-ms-summary": "Requester Username", + "description": "Username of the requester." + }, + "requester": { + "type": "string", + "x-ms-summary": "Requester Display Name", + "description": "Display name of the requester." + }, + "serviceType": { + "type": "string", + "x-ms-summary": "Service Type", + "description": "Type of the service." + }, + "serviceName": { + "type": "string", + "x-ms-summary": "Service Name", + "description": "Name of the service." + }, + "serviceId": { + "type": "string", + "x-ms-summary": "Service ID", + "description": "Unique ID of the service." + }, + "triggerTime": { + "type": "string", + "x-ms-summary": "Trigger Time", + "description": "The time that this trigger works." + }, + "objectUrl": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + } + } + }, + "FlowAutoImportHookMessage": { + "type": "object", + "properties": { + "autoImportProfileName": { + "type": "string", + "x-ms-summary": "Automatic Import Profile", + "description": "Name of the automatic import profile." + }, + "objectId": { + "type": "string", + "x-ms-summary": "Workspace ID", + "description": "Unique ID of the workspace." + }, + "objectTitle": { + "type": "string", + "x-ms-summary": "Workspace Name", + "description": "Name of the workspace." + }, + "objectType": { + "type": "string", + "x-ms-summary": "Workspace Type", + "description": "Type of workspace." + }, + "groupEmail": { + "type": "string", + "x-ms-summary": "Workspace E-mail Address", + "description": "E-mail address of the workspace." + }, + "triggerTime": { + "type": "string", + "x-ms-summary": "Trigger Time", + "description": "The time that this trigger works." + }, + "objectUrl": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + } + } + }, + "FlowTaskCreatedHookMessage": { + "type": "object", + "properties": { + "summary": { + "type": "string", + "x-ms-summary": "Request Summary", + "description": "Summary of the request." + }, + "taskId": { + "type": "string", + "x-ms-summary": "Task ID", + "description": "Unique ID of the task." + }, + "taskLink": { + "type": "string", + "x-ms-summary": "Task Link", + "description": "Link of the task." + }, + "assigneeDisplayName": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Assignee Display Name", + "description": "Display name of the task assignee." + }, + "assigneeIdentityName": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Assignee Username", + "description": "Username of the task assignee." + }, + "requestId": { + "type": "string", + "x-ms-summary": "Request Ticket Number", + "description": "Ticket number of the request." + }, + "requestGuid": { + "type": "string", + "x-ms-summary": "Request ID", + "description": "Unique ID of the request." + }, + "requesterIdentityName": { + "type": "string", + "x-ms-summary": "Requester Username", + "description": "Username of the requester." + }, + "requester": { + "type": "string", + "x-ms-summary": "Requester Display Name", + "description": "Display name of the requester." + }, + "serviceType": { + "type": "string", + "x-ms-summary": "Service Type", + "description": "Type of the service." + }, + "triggerTime": { + "type": "string", + "x-ms-summary": "Trigger Time", + "description": "The time that this trigger works." + }, + "objectUrl": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + } + } + }, + "FlowRenewalHookMessage": { + "type": "object", + "properties": { + "objectId": { + "type": "string", + "x-ms-summary": "Workspace ID", + "description": "Unique ID of the workspace." + }, + "objectTitle": { + "type": "string", + "x-ms-summary": "Workspace Name", + "description": "Name of the workspace." + }, + "objectType": { + "type": "string", + "x-ms-summary": "Workspace Type", + "description": "Type of workspace." + }, + "groupEmail": { + "type": "string", + "x-ms-summary": "Workspace E-mail Address", + "description": "E-mail address of the workspace." + }, + "phaseStartTime": { + "type": "string", + "x-ms-summary": "Renewal Process Start Time", + "description": "Start time of the renewal process." + }, + "renewalProfileName": { + "type": "string", + "x-ms-summary": "Renewal Profile", + "description": "Name of the renewal profile." + }, + "triggerTime": { + "type": "string", + "x-ms-summary": "Trigger Time", + "description": "The time that this trigger works." + }, + "objectUrl": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + } + } + }, + "FlowRenewalExceptionHookMessage": { + "type": "object", + "properties": { + "objectId": { + "type": "string", + "x-ms-summary": "Workspace ID", + "description": "Unique ID of the workspace." + }, + "objectTitle": { + "type": "string", + "x-ms-summary": "Workspace Name", + "description": "Name of the workspace." + }, + "objectType": { + "type": "string", + "x-ms-summary": "Workspace Type", + "description": "Type of workspace." + }, + "groupEmail": { + "type": "string", + "x-ms-summary": "Workspace E-mail Address", + "description": "E-mail address of the workspace." + }, + "phaseStartTime": { + "type": "string", + "x-ms-summary": "Renewal Process Start Time", + "description": "Start time of the renewal process." + }, + "dueDate": { + "type": "string", + "x-ms-summary": "Renewal Process Due Date", + "description": "Due date of the renewal process." + }, + "assigneeDisplayName": { + "type": "string", + "x-ms-summary": "Renewal Task Assignee Display Name", + "description": "Display name of the renewal task assignee." + }, + "assigneeIdentityName": { + "type": "string", + "x-ms-summary": "Renewal Task Assignee Username", + "description": "Username of the renewal task assignee." + }, + "renewalProfileName": { + "type": "string", + "x-ms-summary": "Renewal Profile", + "description": "Name of the renewal profile." + }, + "taskLink": { + "type": "string", + "x-ms-summary": "Renewal Task Link", + "description": "Link of the renewal task." + }, + "message": { + "type": "string", + "x-ms-summary": "Renewal Error Details", + "description": "Details of the renewal exception." + }, + "triggerTime": { + "type": "string", + "x-ms-summary": "Trigger Time", + "description": "The time that this trigger works." + }, + "objectUrl": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + } + } + }, + "FlowRenewalTaskHookMessage": { + "type": "object", + "properties": { + "objectId": { + "type": "string", + "x-ms-summary": "Workspace ID", + "description": "Unique ID of the workspace." + }, + "objectTitle": { + "type": "string", + "x-ms-summary": "Workspace Name", + "description": "Name of the workspace." + }, + "objectType": { + "type": "string", + "x-ms-summary": "Workspace Type", + "description": "Type of workspace." + }, + "groupEmail": { + "type": "string", + "x-ms-summary": "Workspace E-mail Address", + "description": "E-mail address of the workspace." + }, + "phaseStartTime": { + "type": "string", + "x-ms-summary": "Renewal Process Start Time", + "description": "Start time of the renewal process." + }, + "dueDate": { + "type": "string", + "x-ms-summary": "Renewal Process Due Date", + "description": "Due date of the renewal process." + }, + "assigneeDisplayName": { + "type": "string", + "x-ms-summary": "Renewal Task Assignee Display Name", + "description": "Display name of the renewal task assignee." + }, + "assigneeIdentityName": { + "type": "string", + "x-ms-summary": "Renewal Task Assignee Username", + "description": "Username of the renewal task assignee." + }, + "renewalProfileName": { + "type": "string", + "x-ms-summary": "Renewal Profile", + "description": "Name of the renewal profile." + }, + "taskLink": { + "type": "string", + "x-ms-summary": "Renewal Task Link", + "description": "Link of the renewal task." + }, + "triggerTime": { + "type": "string", + "x-ms-summary": "Trigger Time", + "description": "The time that this trigger works." + }, + "objectUrl": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + } + } + }, + "StringModel": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "FlowRequest": { + "required": [ + "serviceType" + ], + "type": "object", + "properties": { + "serviceId": { + "type": "string", + "x-ms-visibility": "internal", + "x-ms-summary": "Service Id", + "description": "Id of the requested service." + }, + "serviceType": { + "format": "int32", + "default": 0, + "type": "integer", + "x-ms-visibility": "internal", + "x-ms-summary": "Service Type", + "description": "Type of the requested service." + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true, + "x-ms-summary": "Request ID", + "description": "Unique ID of the request." + }, + "ticketNumber": { + "format": "int32", + "type": "integer", + "readOnly": true, + "x-ms-summary": "Request Ticket Number", + "description": "Ticket number of the request." + }, + "requester": { + "type": "string", + "readOnly": true, + "x-ms-summary": "Requester Username", + "description": "Username of the requester." + }, + "requesterDisplayName": { + "type": "string", + "readOnly": true, + "x-ms-summary": "Requester Display Name", + "description": "Requester Display Name" + }, + "summary": { + "maxLength": 255, + "type": "string", + "x-ms-summary": "Request Summary", + "description": "Summary of the request." + }, + "department": { + "type": "string", + "x-ms-summary": "Department", + "description": "Department that the request belongs to." + }, + "notesToApprovers": { + "maxLength": 1000, + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Notes to Approvers", + "description": "Additional notes to approvers." + } + }, + "additionalProperties": { + "type": "object" + } + }, + "FlowSchema": { + "type": "object", + "properties": { + "type": { + "type": "string" + } + } + }, + "FlowSchemaResponse": { + "type": "object", + "properties": { + "schema": { + "$ref": "#/definitions/FlowSchema" + } + } + }, + "Workspace": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "x-ms-summary": "Workspace ID", + "description": "Unique ID of the workspace." + }, + "Name": { + "type": "string", + "x-ms-summary": "Workspace Name", + "description": "Name of the workspace." + }, + "Description": { + "type": "string", + "x-ms-summary": "Workspace Description", + "description": "Description of the workspace." + }, + "Status": { + "type": "string", + "x-ms-summary": "Workspace Status", + "description": "Status of the workspace." + }, + "Type": { + "type": "string", + "x-ms-summary": "Workspace Type", + "description": "Type of workspace." + }, + "Url": { + "type": "string", + "x-ms-summary": "Site URL", + "description": "URL of the site." + }, + "Email": { + "type": "string", + "x-ms-summary": "Workspace E-mail Address", + "description": "E-mail address of the workspace." + }, + "PolicyName": { + "type": "string", + "x-ms-summary": "Policy", + "description": "Name of the policy." + }, + "PrimaryContact": { + "type": "string", + "x-ms-summary": "Primary Workspace Contact Username", + "description": "Username of the primary workspace contact." + }, + "PrimaryContactDisplayName": { + "type": "string", + "x-ms-summary": "Primary Workspace Contact Display Name", + "description": "Display name of the primary workspace contact." + }, + "SecondaryContact": { + "type": "string", + "x-ms-summary": "Secondary Workspace Contact Username", + "description": "Username of the secondary workspace contact." + }, + "SecondaryContactDisplayName": { + "type": "string", + "x-ms-summary": "Secondary Workspace Contact Display Name", + "description": "Display name of the secondary workspace contact." + }, + "PrimaryAdministrators": { + "type": "string", + "x-ms-summary": "Primary Site Collection Administrator Username", + "description": "Username of the primary site collection administrator." + }, + "PrimaryAdministratorDisplayNames": { + "type": "string", + "x-ms-summary": "Primary Site Collection Administrator Display Name", + "description": "Display name of the primary site collection administrator." + }, + "AdditionalAdministrators": { + "type": "string", + "x-ms-summary": "Additional Site Collection Administrator", + "description": "Username of the additional site collection administrator." + }, + "AdditionalAdministratorDisplayNames": { + "type": "string", + "x-ms-summary": "Additional Site Collection Administrator Display Name", + "description": "Display name of the additional site collection administrator." + }, + "Phase": { + "type": "string", + "x-ms-summary": "Phase", + "description": "The workspace's current phase." + }, + "PhaseAssigneeDisplayNames": { + "type": "string", + "x-ms-summary": "Task Assignee Display Name", + "description": "Display name of the current phase task assignee." + }, + "PhaseAssignees": { + "type": "string", + "x-ms-summary": "Task Assignee Username", + "description": "Username of the current phase task assignee." + }, + "PhaseProfileName": { + "type": "string", + "x-ms-summary": "Renewal Profile", + "description": "Name of the renewal profile." + }, + "PhaseStartTime": { + "type": "string", + "x-ms-summary": "Phase Start Time", + "description": "Start time of the current phase." + }, + "RenewalDueDate": { + "type": "string", + "x-ms-summary": "Renewal Process Due Date", + "description": "Due date of the renewal process." + }, + "NextRenewalDate": { + "type": "string", + "x-ms-summary": "Next Renewal Date", + "description": "Date of next renewal process." + }, + "Privacy": { + "type": "string", + "x-ms-summary": "Privacy", + "description": "Privacy of the workspace." + }, + "AssociateHubTitle": { + "type": "string", + "x-ms-summary": "Associated Hub", + "description": "Name of the associated hub." + }, + "GeoLocation": { + "type": "string", + "x-ms-summary": "Geo Location", + "description": "Geo location where the workspace is stored." + }, + "StorageLimit": { + "type": "string", + "x-ms-summary": "Storage Limit (GB)", + "description": "Maximum storage for the site." + }, + "StorageUsed": { + "type": "string", + "x-ms-summary": "Storage Used (GB)", + "description": "Storage used by the site." + }, + "SiteSharing": { + "type": "string", + "x-ms-summary": "Site External Sharing", + "description": "External sharing status of the site." + }, + "GroupSharing": { + "type": "string", + "x-ms-summary": "Group/Team External Sharing", + "description": "External sharing status of the group/team." + }, + "WorkspaceClassification": { + "type": "string", + "x-ms-summary": "Classification", + "description": "Classification of the workspace." + }, + "ClaimStatus": { + "type": "string", + "x-ms-summary": "Claim Status", + "description": "Status of the workspace contact election process." + }, + "CreatedTime": { + "type": "string", + "x-ms-summary": "Created Time", + "description": "Created time of the workspace." + }, + "LeaseExpirationTime": { + "type": "string", + "x-ms-summary": "Lease Expiration Time", + "description": "Lease expiration time of the workspace." + }, + "InactivityThresholdTime": { + "type": "string", + "x-ms-summary": "Inactivity Threshold Time", + "description": "Inactivity threshold time of the workspace." + } + }, + "additionalProperties": { + "type": "object" + } + }, + "WorkspacePageResult": { + "type": "object", + "properties": { + "nextLink": { + "type": "string", + "x-ms-summary": "Next Token", + "description": "Use the next token to retrieve remaining workspaces that have not been listed here." + }, + "value": { + "type": "array", + "items": { + "$ref": "#/definitions/Workspace" + } + } + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "Basic": { + "type": "basic", + "description": "Authenticated by UserPrincipalName and ClientSecret." + } + }, + "security": [ + { + "Basic": [] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.avepoint.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "http://www.avepoint.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/AvePoint Cloud Governance/apiProperties.json b/certified-connectors/AvePoint Cloud Governance/apiProperties.json new file mode 100644 index 000000000..19dca98ca --- /dev/null +++ b/certified-connectors/AvePoint Cloud Governance/apiProperties.json @@ -0,0 +1,36 @@ +{ + "properties": { + "connectionParameters": { + "username": { + "type": "securestring", + "uiDefinition": { + "displayName": "Username", + "description": "Enter your username. You must be an AvePoint Cloud Governance administrator.", + "tooltip": "Username", + "constraints": { + "tabIndex": 2, + "clearText": true, + "required": "true" + } + } + }, + "password": { + "type": "securestring", + "uiDefinition": { + "displayName": "Client Secret", + "description": "Enter the client secret to authenticate with AvePoint Cloud Governance API.", + "tooltip": "Client Secret", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#4D5966", + "capabilities": [], + "publisher":"AvePoint, inc.", + "stackOwner":"AvePoint, inc." + } +} \ No newline at end of file From f39d9deeb5b4b186578ccb83b414caf495a42da1 Mon Sep 17 00:00:00 2001 From: Andreas Date: Tue, 22 Sep 2020 10:34:44 +0200 Subject: [PATCH 077/347] Removed query param --- certified-connectors/Peltarion/apiProperties.json | 9 --------- 1 file changed, 9 deletions(-) diff --git a/certified-connectors/Peltarion/apiProperties.json b/certified-connectors/Peltarion/apiProperties.json index 4ed105239..966dbab2c 100644 --- a/certified-connectors/Peltarion/apiProperties.json +++ b/certified-connectors/Peltarion/apiProperties.json @@ -39,15 +39,6 @@ "x-ms-apimTemplate-policySection": "Request" } }, - { - "templateId": "setqueryparameter", - "title": "Query token", - "parameters": { - "x-ms-apimTemplateParameter.name": "code", - "x-ms-apimTemplateParameter.value": "FHWJvOJnrrBz8v7DOWoABLS1K2e9Im6q7YalAthQMGkqTa57jDYm/w==", - "x-ms-apimTemplateParameter.existsAction": "override" - } - }, { "templateId": "setheader", "title": "PeltarionURL", From e0284cff634991957b4b462a388f9ad1ba5bf630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Vr=C3=A5lstad?= Date: Tue, 22 Sep 2020 22:47:44 +0200 Subject: [PATCH 078/347] Set url/token with policy (#445) * Add url/token by policy instead of call parameter * Re-added metadata * minor * Re-added connector metadata * Using policy for url/token * Removed query param --- .../Peltarion/apiDefinition.swagger.json | 36 ++----------- .../Peltarion/apiProperties.json | 50 +++++++++++++++++-- 2 files changed, 48 insertions(+), 38 deletions(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index 92efa83ab..18a47964f 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "title": "Peltarion", - "description": "Using this connector, you can connect your your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data.", + "description": "Using this connector, you can connect your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data", "version": "1.0", "contact": { "name": "Peltarion", @@ -47,34 +47,6 @@ "operationId": "callapi", "x-ms-visibility": "important", "parameters": [ - { - "name": "code", - "in": "query", - "required": true, - "type": "string", - "default": "FHWJvOJnrrBz8v7DOWoABLS1K2e9Im6q7YalAthQMGkqTa57jDYm/w==", - "x-ms-visibility": "internal", - "description": "Authentication for the API proxy", - "x-ms-summary": "This is a key required by the API proxy" - }, - { - "name": "peltarionurl", - "in": "header", - "required": true, - "type": "string", - "x-ms-visibility": "important", - "description": "Peltarion URL", - "x-ms-summary": "URL to identify your Peltarion API" - }, - { - "name": "peltariontoken", - "in": "header", - "required": true, - "type": "string", - "x-ms-visibility": "important", - "description": "Peltarion token", - "x-ms-summary": "Token to identify your Peltarion API" - }, { "name": "peltarionbody", "in": "header", @@ -105,7 +77,5 @@ "definitions": {}, "parameters": {}, "responses": {}, - "securityDefinitions": {}, - "security": [], - "tags": [] -} + "securityDefinitions": {} +} \ No newline at end of file diff --git a/certified-connectors/Peltarion/apiProperties.json b/certified-connectors/Peltarion/apiProperties.json index 6b23fb129..966dbab2c 100644 --- a/certified-connectors/Peltarion/apiProperties.json +++ b/certified-connectors/Peltarion/apiProperties.json @@ -1,6 +1,29 @@ { "properties": { - "connectionParameters": {}, + "connectionParameters": { + "peltarionurl": { + "type": "string", + "uiDefinition": { + "displayName": "Peltarion API URL", + "description": "The Peltarion API URL for this app", + "tooltip": "Provide the Peltarion API URL", + "constraints": { + "required": "true" + } + } + }, + "peltariontoken": { + "type": "string", + "uiDefinition": { + "displayName": "Peltarion API Token", + "description": "The Peltarion API Token for this app", + "tooltip": "Provide the Peltarion API Token", + "constraints": { + "required": "true" + } + } + } + }, "iconBrandColor": "#061b22", "capabilities": [], "publisher": "Peltarion", @@ -13,10 +36,27 @@ "x-ms-apimTemplateParameter.name": "content-type", "x-ms-apimTemplateParameter.value": "application/json", "x-ms-apimTemplateParameter.existsAction": "override", - "x-ms-apimTemplate-policySection": "Request", - "x-ms-apimTemplate-operationName": [ - "callapi" - ] + "x-ms-apimTemplate-policySection": "Request" + } + }, + { + "templateId": "setheader", + "title": "PeltarionURL", + "parameters": { + "x-ms-apimTemplateParameter.name": "peltarionurl", + "x-ms-apimTemplateParameter.value": "@connectionParameters('peltarionurl','')", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplate-policySection": "Request" + } + }, + { + "templateId": "setheader", + "title": "PeltarionToken", + "parameters": { + "x-ms-apimTemplateParameter.name": "peltariontoken", + "x-ms-apimTemplateParameter.value": "@connectionParameters('peltariontoken','')", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplate-policySection": "Request" } } ] From cd80717a2c0ea27535edee7eeb5bad6bcd4fc31e Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Tue, 22 Sep 2020 22:52:16 +0200 Subject: [PATCH 079/347] Tyntec sms (#462) * added tyntec-sms * remove intro * Fix: Brand color * Fix: summary alphanumeric char * Fix: Major Fixes * FIX: Readme update * description items fix * fix: type based on resolve * Operation ID revert * production version * Returned: default responses Custom responses don't show consistently in Designer * Responses update * update Readme * readme update * description update --- certified-connectors/tyntec-SMS/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/tyntec-SMS/apiDefinition.swagger.json b/certified-connectors/tyntec-SMS/apiDefinition.swagger.json index ff3825f58..f814dfe75 100644 --- a/certified-connectors/tyntec-SMS/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-SMS/apiDefinition.swagger.json @@ -23,8 +23,8 @@ "post": { "responses": { "202": { - "description": "Returned when the operation successfully connects to Conversations API", + "description": "default", "schema": { "type": "object", "properties": { From bcb4bc6bf3e395a12e3dc531d69d602968678f85 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Tue, 22 Sep 2020 22:52:35 +0200 Subject: [PATCH 080/347] Tyntec viber (#463) * added tyntec-viber * remove intro * Fix: Brand color * minor Update * Readme updates * Returned: default responses Custom responses don't show in the Designer. * Responses update * quick typo fix * fixed typo * update Readme * response update --- certified-connectors/tyntec-Viber/apiDefinition.swagger.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json index 9d6cec159..9ad9e3732 100644 --- a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json @@ -22,7 +22,7 @@ "post": { "responses": { "202": { - "description": "Returned when the operation successfully connects to Conversations API", + "description": "default", "schema": { "type": "object", "properties": { @@ -203,5 +203,5 @@ "propertyValue": "Communication;Marketing" } ] - } + From 0db23f965ea32e103cabedfbb09db92a6bf10abf Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Tue, 22 Sep 2020 22:52:59 +0200 Subject: [PATCH 081/347] Update apiDefinition.swagger.json (#464) --- certified-connectors/tyntec-WA/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/tyntec-WA/apiDefinition.swagger.json b/certified-connectors/tyntec-WA/apiDefinition.swagger.json index efba525c6..04333883f 100644 --- a/certified-connectors/tyntec-WA/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-WA/apiDefinition.swagger.json @@ -22,7 +22,7 @@ "get": { "responses": { "202": { - "description": "Returned when the operation successfully connects to Conversations API", + "description": "default", "schema": { "type": "object", "properties": { From 17f2e53c9d83d60e6ef4a6eaf8d05421ae24ddc6 Mon Sep 17 00:00:00 2001 From: Encodian <45834050+Encodian@users.noreply.github.com> Date: Tue, 22 Sep 2020 23:16:07 +0100 Subject: [PATCH 082/347] Encodian Sept Release (#461) * Encodian May 20 Release * Minor Updates * Minor Updates * Encodian July 20 Relase - Amends * July 20 Update * Two new actions * Updated * [timeghost] usability improvements (#402) * [timeghost] Certified connector publishing * add x-function-key * add x-function key * usability improvements * add policyTemplateInstances * publisher and stackOwner added * validator fixes * validator fixes * contact and x-ms-connector-metadata added * x-ms-connector-metadata Categories changed * remove invalid characters * remove umlauts Co-authored-by: Marc Hochleutner * Updated category property value as requested * Updated ReadMe * Encodian Sept 20 Release * Encodian Sept 20 Release * Encodian Sept 2 Release Co-authored-by: Marc Co-authored-by: Marc Hochleutner --- certified-connectors/Encodian/Readme.md | 3 + .../Encodian/apiDefinition.swagger.json | 373 +++++++++++++++++- 2 files changed, 375 insertions(+), 1 deletion(-) diff --git a/certified-connectors/Encodian/Readme.md b/certified-connectors/Encodian/Readme.md index 73523c2cc..4a695f350 100644 --- a/certified-connectors/Encodian/Readme.md +++ b/certified-connectors/Encodian/Readme.md @@ -51,6 +51,9 @@ Perform OCR on an existing PDF document - https://support.encodian.com/hc/en-gb/ ### Split PDF Split a PDF Document into multiple PDF Documents - https://support.encodian.com/hc/en-gb/articles/360002953277-Split-PDF +### Split PDF by Text +Split a PDF Document into multiple PDF Documents using Text Search or Regular Expressions - https://support.encodian.com/hc/en-gb/articles/360012726397-Split-PDF-by-Text + ### Convert Word to PDF Form Convert the Word document provided (Legacy Form Controls Only) to a PDF form document. - https://support.encodian.com/hc/en-gb/articles/360012307133-Convert-Word-to-PDF-Form diff --git a/certified-connectors/Encodian/apiDefinition.swagger.json b/certified-connectors/Encodian/apiDefinition.swagger.json index 569372df8..59be7a84f 100644 --- a/certified-connectors/Encodian/apiDefinition.swagger.json +++ b/certified-connectors/Encodian/apiDefinition.swagger.json @@ -619,6 +619,51 @@ "description": "Split a PDF Document into multiple PDF Documents - https://support.encodian.com/hc/en-gb/articles/360002953277-Split-PDF" } }, + "/api/v1/Core/SplitPdfByText": { + "post": { + "tags": [ + "Core" + ], + "operationId": "SplitPdfByText", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "operation", + "in": "body", + "description": "Request object, refer to schema definition: DtoSplitPdfByText", + "required": false, + "schema": { + "$ref": "#/definitions/DtoSplitPdfByText" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseSplitPdfByText" + } + }, + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/DtoResponseSplitPdfByText" + } + }, + "400": { + "description": "Bad request" + } + }, + "x-ms-visibility": "important", + "summary": "Split PDF by Text", + "description": "Split a PDF Document by text into multiple PDF Documents - https://support.encodian.com/hc/en-gb/articles/360012726397-Split-PDF-by-Text" + } + }, "/api/v1/Core/WordToPdfForm": { "post": { "tags": [ @@ -2190,7 +2235,7 @@ } }, "x-ms-visibility": "important", - "summary": "Convert Mail Message", + "summary": "Convert Email Message", "description": "Convert an email to PDF - https://support.encodian.com/hc/en-gb/articles/360011566298-Convert-Mail-Message" } }, @@ -2239,6 +2284,50 @@ "description": "Convert Microsoft Excel documents to another document format - https://support.encodian.com/hc/en-gb/articles/360011804178-Convert-Excel" } }, + "/api/v1/Core/CreateHMAC": { + "post": { + "tags": [ + "Core" + ], + "operationId": "CreateHMAC", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "operation", + "in": "body", + "required": false, + "schema": { + "$ref": "#/definitions/DtoCreateHMAC" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseCreateHMAC" + } + }, + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/DtoResponseCreateHMAC" + } + }, + "400": { + "description": "Bad request" + } + }, + "x-ms-visibility": "important", + "summary": "Create HMAC", + "description": "Create a Hash-based message authentication code (HMAC) using a secret key - https://support.encodian.com/hc/en-gb/articles/360012782058-Create-HMAC" + } + }, "/api/v1/DynamicSchema/GetDynamicSchemaCreateBarcode": { "get": { "tags": [ @@ -2913,6 +3002,49 @@ "summary": "Get an Operation Status for ImageExtractText", "description": "Get the operation status of for the operation ID provided." } + }, + "/api/v1/Mgmt/GetOperationStatusCreateHMAC": { + "get": { + "tags": [ + "Mgmt" + ], + "operationId": "GetOperationStatusCreateHMAC", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "operationId", + "in": "query", + "description": "Retrieve the operation status of a GetOperationStatusCreateHMAC operation for the Operation ID provided.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseCreateHMAC" + } + }, + "202": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseCreateHMAC" + } + }, + "400": { + "description": "Bad Request" + } + }, + "x-ms-visibility": "internal", + "summary": "Get an Operation Status for CreateHMAC", + "description": "Retrieve the operation status of a CreateHMAC operation for the Operation ID provided." + } } }, "definitions": { @@ -5067,6 +5199,115 @@ } } }, + "DtoSplitPdfByText": { + "required": [ + "fileName", + "splitValue", + "splitPdfByTextType", + "splitAction" + ], + "type": "object", + "properties": { + "fileName": { + "type": "string", + "x-ms-summary": "Filename", + "description": "The filename of the source PDF file, the file extension is mandatory: 'file.pdf' and not 'file'" + }, + "fileContent": { + "format": "byte", + "type": "string", + "x-ms-summary": "File Content", + "description": "The file content of the PDF file" + }, + "splitValue": { + "type": "string", + "x-ms-summary": "Split Value", + "description": "Provide the split value used to perform the split operation" + }, + "isExpression": { + "default": false, + "type": "boolean", + "x-ms-summary": "Is Expression", + "description": "Set whether the 'Split Value' value should be evaluted as a regular expression, the default value is 'false'" + }, + "splitPdfByTextType": { + "default": "AllInstances", + "enum": [ + "AllInstances", + "FirstInstant", + "LastInstant" + ], + "type": "string", + "x-ms-summary": "Split Configuration", + "description": "Select a split configuration" + }, + "splitAction": { + "default": "SplitOn", + "enum": [ + "SplitOn", + "SplitAfter", + "SplitBefore", + "Remove" + ], + "type": "string", + "x-ms-summary": "Split Action", + "description": "Select a split action, whether to split before, after or remove the page containing the split value." + } + } + }, + "DtoResponseSplitPdfByText": { + "required": [ + "documents" + ], + "type": "object", + "properties": { + "documents": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/definitions/DocumentArray" + }, + "x-ms-visibility": "important", + "x-ms-summary": "Documents", + "description": "The array of documents split from the source PDF" + }, + "HttpStatusCode": { + "format": "int32", + "type": "integer", + "x-ms-visibility": "advanced", + "x-ms-summary": "HTTP Status Code", + "description": "The HTTP Status code for the response." + }, + "HttpStatusMessage": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "HTTP Status Message", + "description": "The HTTP Status message for the response." + }, + "OperationId": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Operation ID", + "description": "The unique ID assigned to this operation." + }, + "Errors": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "x-ms-visibility": "advanced", + "x-ms-summary": "Errors", + "description": "An array of error messages should an error occur." + }, + "Operation Status": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Operation Status", + "description": "Indicates whether the operation has completed, has been queued or has failed." + } + } + }, "DtoWordToPdfForm": { "required": [ "FileName", @@ -8378,6 +8619,13 @@ "x-ms-visibility": "advanced", "x-ms-summary": "Confidence", "description": "Set the confidence level for barcode detection" + }, + "barcodeRemoveControlChars": { + "default": true, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "Remove Control Characters", + "description": "Set whether recognised control characters should be removed" } } }, @@ -8460,6 +8708,13 @@ "x-ms-visibility": "advanced", "x-ms-summary": "Confidence", "description": "Set the confidence level for barcode detection" + }, + "barcodeRemoveControlChars": { + "default": true, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "Remove Control Characters", + "description": "Set whether recognised control characters should be removed" } } }, @@ -9129,6 +9384,13 @@ "x-ms-visibility": "advanced", "x-ms-summary": "Confidence", "description": "Set the confidence level for barcode detection" + }, + "barcodeRemoveControlChars": { + "default": true, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "Remove Control Characters", + "description": "Set whether recognised control characters should be removed" } } }, @@ -9211,6 +9473,13 @@ "x-ms-visibility": "advanced", "x-ms-summary": "Confidence", "description": "Set the confidence level for barcode detection" + }, + "barcodeRemoveControlChars": { + "default": true, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "Remove Control Characters", + "description": "Set whether recognised control characters should be removed" } } }, @@ -10257,6 +10526,108 @@ } } }, + "DtoCreateHMAC": { + "required": [ + "data", + "key", + "digestAlgorithm" + ], + "type": "object", + "properties": { + "data": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Data", + "description": "Provide the input string to be computed" + }, + "key": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Key", + "description": "Provide the key (secret) used to compute the hash-based message authentication code (HMAC)" + }, + "digestAlgorithm": { + "default": "SHA256", + "enum": [ + "SHA1", + "SHA256", + "SHA384", + "SHA512", + "MD5", + "RIPEMD160" + ], + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Digest Algorithm ", + "description": "Select the message digest algorithm" + }, + "encoding": { + "default": "ASCII", + "enum": [ + "UTF8", + "UTF7", + "UTF32", + "ASCII", + "Unicode", + "BigEndianUnicode", + "Default" + ], + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Encoding Type", + "description": "Select the encoding type." + } + } + }, + "DtoResponseCreateHMAC": { + "required": [ + "hmac" + ], + "type": "object", + "properties": { + "hmac": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "HMAC", + "description": "The computed HMAC" + }, + "HttpStatusCode": { + "format": "int32", + "type": "integer", + "x-ms-visibility": "advanced", + "x-ms-summary": "HTTP Status Code", + "description": "The HTTP Status code for the response." + }, + "HttpStatusMessage": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "HTTP Status Message", + "description": "The HTTP Status message for the response." + }, + "OperationId": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Operation ID", + "description": "The unique ID assigned to this operation." + }, + "Errors": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "x-ms-visibility": "advanced", + "x-ms-summary": "Errors", + "description": "An array of error messages should an error occur." + }, + "Operation Status": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Operation Status", + "description": "Indicates whether the operation has completed, has been queued or has failed." + } + } + }, "DtoResponseMgmtGetSubscriptionStatus": { "type": "object", "properties": { From a4d20d4804c32467ae762ab183ba5cd69450c46a Mon Sep 17 00:00:00 2001 From: WorkSpan-Engineering <66989254+WorkSpan-Engineering@users.noreply.github.com> Date: Tue, 22 Sep 2020 17:26:20 -0700 Subject: [PATCH 083/347] WorkSpan connector new trigger and actions (#465) New Action: Update External Id New Action: Get External Id New Actions: New Bulkload Action for ALL objects (leads/ accounts) New Action: Get Status New Action: Object Audit New Trigger: Submit to Partner Center Usability Enhancements: Enabled selection of integration by dynamically fetching list of integrations. No need to add integration_id Co-authored-by: Milind --- .../WorkSpan/apiDefinition.swagger.json | 811 +++++++++++++++++- .../WorkSpan/apiProperties.json | 37 +- 2 files changed, 799 insertions(+), 49 deletions(-) diff --git a/certified-connectors/WorkSpan/apiDefinition.swagger.json b/certified-connectors/WorkSpan/apiDefinition.swagger.json index cdb967749..521a11de6 100644 --- a/certified-connectors/WorkSpan/apiDefinition.swagger.json +++ b/certified-connectors/WorkSpan/apiDefinition.swagger.json @@ -2,8 +2,8 @@ "swagger": "2.0", "info": { "title": "WorkSpan", - "description": "WorkSpan is a collaborative platform for connecting with your partners and managing your partner programs. You can integrate your CRM, Partner Center and collaboration tools to WorkSpan.", - "version": "1.0.0", + "description": "WorkSpan is a collaborative platform to plan, execute, and drive revenue with partners. Manage your partner programs and partner initiatives on WorkSpan, and connect seamlessly with internal and partner applications. You can integrate your CRM, Partner Center, Collaboration tools and Productivity tools to WorkSpan.", + "version": "1.1.0", "contact": { "name": "WorkSpan API Support", "url": "https://support.workspan.com", @@ -25,7 +25,7 @@ } ], "host": "api.workspan.com", - "basePath": "/event/v1", + "basePath": "/", "schemes": [ "https" ], @@ -45,7 +45,7 @@ } ], "paths": { - "/subscriber": { + "/event/v1/subscriber": { "x-ms-notification-content": { "description": "Schema of event", "schema": { @@ -57,7 +57,7 @@ "webhook-subscribe" ], "summary": "Subscribe to WorkSpan Collaboration Events", - "description": "Subscribe to various collaboration events such as sharing, tasks and comments", + "description": "Subscribe to various collaboration events such as creates and updates on membership, tasks and comments to drive and enhance communication with your internal and partner network.", "operationId": "Subscribe", "x-ms-trigger": "single", "produces": [ @@ -148,7 +148,7 @@ } } }, - "/metadata/event/{event}": { + "/event/v1/metadata/event/{event}": { "get": { "operationId": "GetEventSchema", "summary": "Get schema of collaboration event", @@ -190,10 +190,11 @@ } } }, - "/metadata/event": { + "/event/v1/metadata/event": { "get": { "operationId": "GetEventList", "summary": "Get list of events", + "x-ms-summary": "Get list of events", "description": "Get a list of WorkSpan Collaboration events", "x-ms-visibility": "internal", "produces": [ @@ -231,7 +232,7 @@ } } }, - "/subscriber/{subscriber_id}": { + "/event/v1/subscriber/{subscriber_id}": { "get": { "tags": [ "read_subscriber" @@ -242,6 +243,7 @@ "produces": [ "application/json" ], + "x-ms-url-encoding": "single", "x-ms-visibility": "internal", "parameters": [ { @@ -304,7 +306,7 @@ "x-ms-visibility": "internal" } }, - "/metadata/integration": { + "/event/v1/metadata/integration": { "get": { "operationId": "GetIntegrationList", "summary": "Get list of integrations", @@ -351,7 +353,7 @@ "description": "Get list of integrations" } }, - "/subscriber/object_integration_event": { + "/event/v1/subscriber/object_integration_event": { "post": { "operationId": "SubscribeObjectEvent", "x-ms-trigger": "single", @@ -362,7 +364,7 @@ "application/json" ], "summary": "Subscribe to WorkSpan Object Events", - "description": "Subscribe to various object events such as creates and updates on Opportunities", + "description": "Subscribe to various object events such as creates and updates on Opportunities to increase the visibility of your partner influence", "tags": [ "webhook-subscribe" ], @@ -388,10 +390,20 @@ "description": "Should be 'webhook' for webhook" }, "event": { - "type": "string", - "x-ms-summary": "WorkSpan Events", - "x-ms-visibility": "internal", - "default": "object.all" + "x-ms-summary": "Subscribe to Object Events", + "type": "array", + "items": { + "type": "string", + "default": "object.all", + "enum": [ + "object.all", + "object.create", + "object.update", + "object.delete", + "object.stage_change", + "object.partner_center_referral_submit" + ] + } }, "name": { "type": "string", @@ -458,7 +470,103 @@ "description": "Schema of object event" } }, - "/metadata/integration/{integration_id}": { + "/event/v1/subscriber/submit_to_partner_center": { + "post": { + "operationId": "SubmitToPartnerCenterObjectEvent", + "x-ms-trigger": "single", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "summary": "Submit Referral to Microsoft Partner Center from WorkSpan", + "description": "This trigger is fired when WorkSpan user asks to submit opportunity to Microsoft Partner Center", + "tags": [ + "webhook-subscribe" + ], + "parameters": [ + { + "required": true, + "in": "body", + "name": "subscribe_body", + "schema": { + "required": [ + "integration_id", + "event", + "name", + "subscriber_type", + "webhook_settings" + ], + "type": "object", + "properties": { + "subscriber_type": { + "x-ms-visibility": "internal", + "default": "webhook", + "type": "string", + "description": "Should be 'webhook' for webhook" + }, + "event": { + "type": "string", + "x-ms-summary": "Submit to partner center event", + "x-ms-visibility": "internal", + "default": "object.partner_center_referral_submit" + }, + "name": { + "type": "string", + "description": "Name of event subscriber" + }, + "integration_id": { + "x-ms-summary": "Select Integration configured in WorkSpan", + "x-ms-dynamic-values": { + "operationId": "GetIntegrationList", + "value-collection": "integrations", + "value-path": "integration_id", + "value-title": "name" + }, + "type": "string" + }, + "webhook_settings": { + "required": [ + "callback_url" + ], + "type": "object", + "properties": { + "callback_url": { + "x-ms-summary": "Callback URL", + "x-ms-visibility": "internal", + "x-ms-notification-url": true, + "title": "Callback URL of Webhook", + "type": "string", + "description": "Callback URL" + } + } + } + } + }, + "description": "Subscribe Request" + } + ], + "responses": { + "200": { + "schema": { + "$ref": "#/definitions/subscribe_resp" + }, + "description": "successful operation" + }, + "400": { + "description": "Error when subscribing to event" + } + } + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/wsobject_event_payload" + }, + "description": "Schema of object event" + } + }, + "/event/v1/metadata/integration/{integration_id}": { "get": { "parameters": [ { @@ -500,14 +608,15 @@ } } }, - "/bulkload_opportunity": { + "/bulk/v1/bulkload_opportunity": { "post": { "consumes": [ "text/plain", "application/json" ], "summary": "Bulk Load Opportunities (data in body)", - "description": "Upload integration input data as request body. Allowed formats are .csv and .json", + "description": "Upload input data as a request body to your integration. Allowed formats are .csv and .json", + "x-ms-summary": "Bulk Load Opportunities (data in body)", "operationId": "BulkloadOpportunity", "parameters": [ { @@ -516,7 +625,13 @@ "name": "integration_id", "x-ms-summary": "Select Integration configured in WorkSpan", "required": true, - "type": "string" + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetIntegrationList", + "value-collection": "integrations", + "value-path": "integration_id", + "value-title": "name" + } }, { "default": "csv", @@ -550,17 +665,6 @@ "in": "header", "type": "string" }, - { - "name": "Content-Encoding", - "description": "Content Encoding", - "x-ms-summary": "Content Encoding", - "enum": [ - "gzip", - "" - ], - "in": "header", - "type": "string" - }, { "description": "For content type 'CSV': Data rows as csv. first row will be column headers. For content type 'JSON', data format is array: [ { key1 : value, key2 : value}, { key1 : value, key2 : value } ]", "x-ms-summary": "data to be uploaded", @@ -576,7 +680,7 @@ "200": { "description": "data uploaded", "schema": { - "$ref": "#/definitions/bulkload_response" + "$ref": "#/definitions/bulkload_opportunity_response" } }, "400": { @@ -589,13 +693,14 @@ "x-ms-visibility": "advanced" } }, - "/bulkload_opportunity/file": { + "/bulk/v1/bulkload_opportunity/file": { "post": { "consumes": [ "multipart/form-data" ], "summary": "Bulk Load Opportunities (attachment)", - "description": "Upload integration input file. Allowed formats are .xlsx, .json and .csv", + "x-ms-summary": "Bulk Load Opportunities (attachment)", + "description": "Upload an input file to your integration. Allowed formats are .xlsx, .json and .csv", "operationId": "BulkloadOpportunityFileAttachment", "parameters": [ { @@ -604,7 +709,13 @@ "name": "integration_id", "x-ms-summary": "Select Integration configured in WorkSpan", "required": true, - "type": "string" + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetIntegrationList", + "value-collection": "integrations", + "value-path": "integration_id", + "value-title": "name" + } }, { "default": "xlsx", @@ -639,6 +750,91 @@ "produces": [ "application/json" ], + "responses": { + "200": { + "description": "data uploaded", + "schema": { + "$ref": "#/definitions/bulkload_opportunity_response" + } + }, + "400": { + "description": "invalid input, object invalid" + }, + "401": { + "description": "Authorization Error" + } + }, + "x-ms-visibility": "advanced" + } + }, + "/bulk/v1/bulkload": { + "post": { + "consumes": [ + "application/json", + "text/plain" + ], + "summary": "Bulk Load Data (data in body)", + "description": "Upload input data as a request body to your integration. Allowed formats are .csv and .json", + "x-ms-summary": "Bulk Load Data (data in body)", + "operationId": "BulkloadData", + "parameters": [ + { + "description": "Integration Id of CRM intergation configured in WorkSpan", + "in": "query", + "name": "integration_id", + "x-ms-summary": "Select Integration configured in WorkSpan", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetIntegrationList", + "value-collection": "integrations", + "value-path": "integration_id", + "value-title": "name" + } + }, + { + "default": "csv", + "enum": [ + "json", + "csv" + ], + "in": "query", + "name": "data_format", + "description": "Format of data. Allowed formats are csv and json", + "x-ms-summary": "Content type of data. Allowed formats are .csv and .json", + "type": "string" + }, + { + "default": ",", + "in": "query", + "name": "column_delimiter", + "description": "column delimiter (used if content_type is csv)", + "x-ms-summary": "column delimiter (used if content_type is csv)", + "type": "string" + }, + { + "name": "Content-Type", + "default": "text/csv", + "enum": [ + "text/csv", + "application/json" + ], + "description": "Content type of data. text/csv or application/json.", + "x-ms-summary": "Content type of data. text/csv or application/json.", + "in": "header", + "type": "string" + }, + { + "description": "For content type 'CSV': Data rows as csv. first row will be column headers. For content type 'JSON', data format is array: [ { key1 : value, key2 : value}, { key1 : value, key2 : value } ]", + "x-ms-summary": "data to be uploaded", + "in": "body", + "name": "bulkload_request", + "schema": {} + } + ], + "produces": [ + "application/json" + ], "responses": { "200": { "description": "data uploaded", @@ -655,6 +851,273 @@ }, "x-ms-visibility": "advanced" } + }, + "/bulk/v1/bulkload/file": { + "post": { + "consumes": [ + "multipart/form-data" + ], + "summary": "Bulk Load Data (attachment)", + "x-ms-summary": "Bulk Load Data (attachment)", + "description": "Upload an input file to your integration. Allowed formats are .xlsx, .json and .csv", + "operationId": "BulkloadDataFileAttachment", + "parameters": [ + { + "description": "Integration Id of CRM intergation, that is configured in WorkSpan", + "in": "query", + "name": "integration_id", + "x-ms-summary": "Select Integration configured in WorkSpan", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetIntegrationList", + "value-collection": "integrations", + "value-path": "integration_id", + "value-title": "name" + } + }, + { + "default": "xlsx", + "enum": [ + "xlsx", + "csv", + "json" + ], + "in": "query", + "name": "data_format", + "description": "Format data. Allowed formats are .csv .xlsx and .json", + "x-ms-summary": "Format data. Allowed formats are .csv .xlsx and .json", + "type": "string" + }, + { + "name": "file", + "in": "formData", + "description": "file to upload", + "x-ms-summary": "file to upload", + "required": true, + "type": "file" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "data uploaded", + "schema": { + "$ref": "#/definitions/bulkload_response" + } + }, + "400": { + "description": "invalid input, object invalid" + }, + "401": { + "description": "Authorization Error" + } + }, + "x-ms-visibility": "advanced" + } + }, + "/bulk/v1/status/{integration_id}": { + "get": { + "operationId": "GetBulkloadStatus", + "summary": "Get the status of the bulkload operation", + "x-ms-summary": "Get the status of the bulkload operation", + "description": "Get status of bulkload operation", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "integration_id", + "x-ms-url-encoding": "single", + "in": "path", + "description": "Integration Id", + "x-ms-summary": "Integration Id", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetIntegrationList", + "value-collection": "integrations", + "value-path": "integration_id", + "value-title": "name" + } + }, + { + "name": "execution_id", + "in": "query", + "description": "Execution ID of an integration execution which is returned from bulk API", + "x-ms-summary": "Execution Id (returned bu bulkload step)", + "required": true, + "type": "string" + }, + { + "name": "include_errors", + "in": "query", + "description": "Include errors in the response if there are any errors", + "x-ms-summary": "Include errors in the response if there are any errors", + "type": "boolean", + "default": true + }, + { + "name": "max_errors", + "in": "query", + "description": "Maximum number of errors to return back in the response", + "x-ms-summary": "Maximum number of errors to return back in the response", + "type": "number", + "default": 5 + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/bulkload_status_response" + } + }, + "400": { + "description": "API Error" + }, + "401": { + "description": "Authorization Error" + }, + "404": { + "description": "Integration or execution id is not available" + } + } + } + }, + "/app/v1/object/{object_id}/external_id": { + "get": { + "operationId": "GetExternalId", + "description": "Get the external application\u2019s primary unique identifier", + "summary": "Get external ID for WorkSpan ID", + "x-ms-summary": "Get external ID for WorkSpan ID", + "parameters": [ + { + "name": "object_id", + "in": "path", + "description": "Object ID of WorkSpan Object (long ID)", + "x-ms-summary": "Object ID of WorkSpan Object (long ID)", + "required": true, + "x-ms-url-encoding": "single", + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Retrieving external ID of a WorkSpan Object is successful", + "schema": { + "$ref": "#/definitions/get_external_id_response" + } + }, + "401": { + "description": "Authorization Error" + }, + "404": { + "description": "WorkSpan object not found" + } + } + }, + "patch": { + "description": "Update WorkSpan Object with external application\u2019s primary unique identifier", + "operationId": "UpdateExternalId", + "summary": "Connect an external ID to a WorkSpan ID", + "x-ms-summary": "Connect an external ID to a WorkSpan ID", + "parameters": [ + { + "name": "object_id", + "in": "path", + "description": "Object ID of WorkSpan Object (long ID)", + "required": true, + "x-ms-summary": "Object ID of WorkSpan Object (long ID)", + "x-ms-url-encoding": "single", + "type": "string" + }, + { + "name": "request_body", + "in": "body", + "schema": { + "$ref": "#/definitions/connect_external_id_request" + }, + "description": "Request body which includes external_id and can include field_name" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Connection of external object to WorkSpan object is successful", + "schema": { + "$ref": "#/definitions/external_id_response" + } + }, + "401": { + "description": "Authorization Error" + }, + "404": { + "description": "WorkSpan object not found" + } + } + } + }, + "/app/v1/object/{object_id}/audit": { + "patch": { + "description": "Add Audit information to WorkSpanObject ", + "operationId": "ObjectAudit", + "x-ms-summary": "Add Audit information to WorkSpan Object", + "summary": "Add Audit information to WorkSpan Object", + "parameters": [ + { + "name": "audit_request_body", + "in": "body", + "description": "Request body containing audit information", + "required": true, + "schema": { + "$ref": "#/definitions/audit_request" + } + }, + { + "name": "object_id", + "in": "path", + "description": "Object ID (long ID) of WorkSpan object to be updated with integration status", + "x-ms-summary": "WorkSpan Object ID (long ID)", + "required": true, + "type": "string", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "update is successful", + "schema": { + "$ref": "#/definitions/audit_response" + } + }, + "400": { + "description": "Invalid input." + }, + "401": { + "description": "Authorization Error" + }, + "404": { + "description": "WorkSpan object not found" + } + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ] + } } }, "definitions": { @@ -763,7 +1226,7 @@ } } }, - "bulkload_response": { + "bulkload_opportunity_response": { "type": "object", "properties": { "integration_id": { @@ -780,6 +1243,284 @@ "format": "date-time" } } + }, + "bulkload_response": { + "type": "object", + "properties": { + "integration_id": { + "type": "string", + "description": "Integration Id" + }, + "execution_id": { + "type": "string", + "description": "Execution Id" + }, + "data_format": { + "type": "string", + "description": "Data Format" + }, + "created_at": { + "type": "string", + "description": "Creation time", + "format": "date-time" + } + } + }, + "bulkload_status_response": { + "type": "object", + "properties": { + "integration_id": { + "type": "string", + "description": "Integration ID" + }, + "execution_id": { + "type": "string", + "description": "Execution ID" + }, + "status": { + "type": "string", + "description": "Status of execution", + "enum": [ + "running", + "completed" + ] + }, + "succcess_count": { + "type": "number", + "description": "Number of records that were processed successfully" + }, + "error_count": { + "type": "number", + "description": "Number of records with errors" + }, + "input_count": { + "type": "number", + "description": "Number of records received" + }, + "skip_count": { + "type": "number", + "description": "Number of records skipped" + }, + "started_at": { + "type": "string", + "description": "Timestamp of starting execution", + "format": "date-time" + }, + "completed_at": { + "type": "string", + "description": "Timestamp of completing execution", + "format": "date-time" + }, + "include_errors": { + "type": "boolean", + "description": "Flag which indicates whether errors will be returned in the response if any" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Error message" + }, + "id": { + "type": "string", + "description": "ID of the record which failed" + }, + "data_row": { + "type": "string", + "description": "The data row which failed" + } + } + } + } + }, + "example": { + "integration_id": "WS-Integration_agpzfndzLW", + "execution_id": "a64690c2450", + "status": "completed", + "input_count": 200, + "error_count": 3, + "succcess_count": 197, + "skip_count": 0, + "started_at": "2020-05-07T14:06:57.572Z", + "completed_at": "2020-05-07T14:07:10.572Z", + "include_errors": true, + "errors": [ + { + "id": "aw00079", + "message": "invalid value in field 'close_date'", + "data_row": { + "opportunity_id": "aw00079", + "close_date": "20-jan-2020", + "amount": 250000 + } + }, + { + "id": "aw00082", + "message": "invalid value in field 'amount'", + "data_row": { + "opportunity_id": "aw00082", + "close_date": "2021-01-20", + "amount": "-" + } + }, + { + "id": "", + "message": "Missing value of key field", + "data_row": { + "opportunity_id": "", + "close_date": "2020-10-20", + "amount": 75000 + } + } + ] + } + }, + "external_id_response": { + "type": "object", + "properties": { + "external_id": { + "type": "string", + "description": "ID from external system (e.g. CRM)" + }, + "object_id": { + "type": "string", + "description": "WorkSpan Object ID (long ID)" + }, + "field_name": { + "type": "string", + "description": "WorkSpan field name where the external_id from an external system is stored" + } + }, + "example": { + "object_id": "WS-Project_agpzfndzLWF", + "external_id": "000owa24575", + "field_name": "sales_details.crm_opportunity_id" + } + }, + "get_external_id_response": { + "type": "object", + "properties": { + "object_id": { + "type": "string", + "description": "Object ID of WorkSpan Object (long ID)" + }, + "external_ids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field_name": { + "type": "string", + "description": "WorkSpan field name where the external_id from an external system is stored" + }, + "external_id": { + "type": "string", + "description": "ID from external system (e.g. CRM)" + } + } + } + } + }, + "example": { + "object_id": "WS-Project_agpzfndzLWF", + "external_ids": [ + { + "external_id": "000owa24575", + "field_name": "sales_details.crm_opportunity_id" + }, + { + "external_id": "pc-a1w09875", + "field_name": "partner_center.referral_id" + } + ] + } + }, + "connect_external_id_request": { + "type": "object", + "required": [ + "external_id" + ], + "properties": { + "field_name": { + "description": "Field name of external ID in WorkSpan. If empty, default field name of external id field will be used. Default field names are: opportunity object: 'sales_details.crm_opportunity_id'; Accound object: 'account_info.external_account_id'", + "type": "string", + "example": "sales_details.crm_opportunity_id" + }, + "external_id": { + "description": "ID from external system (ex. CRM)", + "type": "string", + "example": "000owa24575" + } + } + }, + "audit_request": { + "type": "object", + "required": [ + "field_name", + "status_code", + "message" + ], + "properties": { + "field_name": { + "description": "Field name of Audit Field in WorkSpan.", + "type": "string", + "enum": [ + "partner_center.integration_status" + ], + "example": "partner_center.integration_status" + }, + "integration_id": { + "description": "Integration Id (long ID) of related integration", + "type": "string", + "example": "WS-Integration_XYZabc123" + }, + "external_id": { + "description": "ID from external system (example. CRM Id)", + "type": "string", + "example": "000owa24575" + }, + "status_code": { + "description": "Code representing status of audit request.", + "type": "string", + "enum": [ + "SCHEDULED", + "CREATE_FAILED", + "UPDATE_FAILED", + "LINKED" + ], + "example": "CREATE_FAILED" + }, + "message": { + "description": "Additional information for recording in audit log", + "type": "string", + "example": "Successfully created Referral in Partner Center" + } + } + }, + "audit_response": { + "type": "object", + "properties": { + "object_id": { + "type": "string", + "description": "WorkSpan Object ID (long ID) that was updated" + }, + "field_name": { + "type": "string", + "description": "Name of WorkSpan field that was updated" + }, + "status_code": { + "type": "string", + "description": "Updates status" + } + }, + "example": { + "object_id": "WS-Project_agpzfndzLWF.", + "field_name": "partner_center.integration_status", + "status_code": "LINKED" + } } } } diff --git a/certified-connectors/WorkSpan/apiProperties.json b/certified-connectors/WorkSpan/apiProperties.json index 5c12fb968..117871251 100644 --- a/certified-connectors/WorkSpan/apiProperties.json +++ b/certified-connectors/WorkSpan/apiProperties.json @@ -135,7 +135,17 @@ "x-ms-apimTemplate-operationName": [ "SubscribeObjectEvent" ], - "x-ms-apimTemplateParameter.newPath": "/subscriber" + "x-ms-apimTemplateParameter.newPath": "/event/v1/subscriber" + } + }, + { + "templateId": "routerequesttoendpoint", + "title": "Route Submit to Partner Center event subscriber to common subscribe endpoint", + "parameters": { + "x-ms-apimTemplate-operationName": [ + "SubmitToPartnerCenterObjectEvent" + ], + "x-ms-apimTemplateParameter.newPath": "/event/v1/subscriber" } }, { @@ -145,7 +155,17 @@ "x-ms-apimTemplate-operationName": [ "BulkloadOpportunityFileAttachment" ], - "x-ms-apimTemplateParameter.newPath": "/bulkload_opportunity" + "x-ms-apimTemplateParameter.newPath": "/bulk/v1/bulkload_opportunity" + } + }, + { + "templateId": "routerequesttoendpoint", + "title": "Route bulkload_data in attachment request for fileupload", + "parameters": { + "x-ms-apimTemplate-operationName": [ + "BulkloadDataFileAttachment" + ], + "x-ms-apimTemplateParameter.newPath": "/bulk/v1/bulkload" } }, { @@ -162,18 +182,7 @@ "templateId": "dynamichosturl", "title": "Choose Host for connection", "parameters": { - "x-ms-apimTemplateParameter.urlTemplate": "@connectionParameters('token:env')/event/v1" - } - }, - { - "templateId": "dynamichosturl", - "title": "Bulk API URL Rewrite", - "parameters": { - "x-ms-apimTemplate-operationName": [ - "BulkloadOpportunityFileAttachment", - "BulkloadOpportunity" - ], - "x-ms-apimTemplateParameter.urlTemplate": "@connectionParameters('token:env')/bulk/v1" + "x-ms-apimTemplateParameter.urlTemplate": "@connectionParameters('token:env')" } } ] From d15a2be83f71075ffb9e46dc2063a4ccb4de5ad4 Mon Sep 17 00:00:00 2001 From: Marcus Nilsson Date: Wed, 23 Sep 2020 02:30:52 +0200 Subject: [PATCH 084/347] Update Scrive eSign connector (#458) * Update Scrive eSign connector * Remove non alphanumerical to pass microsoft validation --- .../Scrive eSign/apiDefinition.swagger.json | 374 +++++++++++++++--- 1 file changed, 330 insertions(+), 44 deletions(-) diff --git a/certified-connectors/Scrive eSign/apiDefinition.swagger.json b/certified-connectors/Scrive eSign/apiDefinition.swagger.json index 651391114..5cd2f3223 100644 --- a/certified-connectors/Scrive eSign/apiDefinition.swagger.json +++ b/certified-connectors/Scrive eSign/apiDefinition.swagger.json @@ -16,6 +16,21 @@ "type": "object" }, "type": "array" + }, + "GetAttachments": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": ["id", "title"], + "type": "object" + }, + "type": "array" } }, "host": "msflow.scrive.com", @@ -47,11 +62,11 @@ "paths": { "/documents/{templateID}/fields/schema": { "get": { - "description": "Gets the fields schema of the selected template", + "description": "Fetches the fields from a template that can be used to populate the fields of a new document from that template.", "operationId": "GetTemplateSchema", "parameters": [ { - "description": "Select Template you want outputs from", + "description": "Select template to fetch fields from.", "in": "path", "name": "templateID", "required": true, @@ -73,11 +88,11 @@ }, "/documents/{templateID}/properties/schema": { "get": { - "description": "Gets the properties schema of the selected template", + "description": "Fetches the properties fields of a template that can be used to populate the properties of a new document from that template.", "operationId": "GetTemplatePropertiesSchema", "parameters": [ { - "description": "Select Template you want outputs from", + "description": "Select template to fetch properties from.", "in": "path", "name": "templateID", "required": true, @@ -99,7 +114,7 @@ }, "/getdocumentjson": { "post": { - "description": "Gets the document JSON", + "description": "Gets the document JSON.", "operationId": "GetDocJson", "parameters": [ { @@ -119,7 +134,7 @@ "schema": { "properties": { "documentId": { - "description": "documentId", + "description": "The ID of the document to get JSON from.", "title": "Document ID", "type": "string" } @@ -135,7 +150,7 @@ "schema": { "description": "The document JSON", "title": "Document JSON", - "type": "string" + "type": "object" } } }, @@ -144,7 +159,7 @@ }, "/getdocumentpdfcontent": { "post": { - "description": "Gets the content of the document PDF", + "description": "Gets the content of the document PDF file.", "operationId": "GetDocumentPdfContent", "parameters": [ { @@ -164,7 +179,7 @@ "schema": { "properties": { "documentId": { - "description": "documentId", + "description": "The document ID to get the PDF file from.", "title": "Document ID", "type": "string" } @@ -184,16 +199,16 @@ } } }, - "summary": "Get document PDF content" + "summary": "Get document PDF file contents" } }, "/newfromtemplate/{templateId-dynamic}": { "post": { - "description": "Create a new document from the selected template", + "description": "Create a new document from the selected template.", "operationId": "NewDocumentFromTemplate", "parameters": [ { - "description": "Select Template you want outputs from", + "description": "Select template to start a new document from.", "in": "path", "name": "templateId-dynamic", "required": true, @@ -221,7 +236,7 @@ }, "/startsigning": { "post": { - "description": "Start the signing process for the document", + "description": "Start the signing process for a document.", "operationId": "StartSigning", "parameters": [ { @@ -241,8 +256,8 @@ "schema": { "properties": { "documentId": { - "description": "documentId", - "title": "Id of document to start signing", + "description": "The document ID for the document to start the signing process for.", + "title": "Document ID", "type": "string", "x-ms-visibility": "important" } @@ -269,7 +284,7 @@ }, "/templates": { "get": { - "description": "Get templates", + "description": "Fetches all templates for the Scrive e-archive templates.", "operationId": "GetTemplates", "parameters": [], "responses": { @@ -286,7 +301,7 @@ }, "/updatedocumentjson": { "post": { - "description": "Updates the document JSON with a provided JSON", + "description": "Updates the document JSON with a provided JSON.", "operationId": "UpdateDocJson", "parameters": [ { @@ -306,13 +321,13 @@ "schema": { "properties": { "documentId": { - "description": "documentId", - "title": "Id of document to update", + "description": "Document ID of the document to update.", + "title": "Document ID", "type": "string", "x-ms-visibility": "important" }, "documentJson": { - "description": "document", + "description": "The JSON that will be used to update the old one.", "title": "Document JSON", "type": "string", "x-ms-visibility": "important" @@ -335,11 +350,11 @@ }, "/updatepartiesfields/{templateID-dynamic}": { "post": { - "description": "Updates party fields based on the selected template - Uses Dynamic values and dynamic schema to draw form", + "description": "Updates party fields based on the selected template.", "operationId": "UpdatePartiesFields", "parameters": [ { - "description": "Select Template you want fields from", + "description": "Select Template you want fields from.", "in": "path", "name": "templateID-dynamic", "required": true, @@ -352,7 +367,7 @@ "x-ms-summary": "Select Template" }, { - "description": "Dynamic Schema of fields in selected template", + "description": "Dynamic Schema of fields in selected template.", "in": "body", "name": "dynamicTemplateSchema", "schema": { @@ -379,11 +394,11 @@ }, "/updatepartiesproperties/{templateID-dynamic}": { "post": { - "description": "Updates properties based on the selected template - Uses Dynamic values and dynamic schema to draw form", + "description": "Updates properties based on the selected template.", "operationId": "UpdatePartiesProperties", "parameters": [ { - "description": "Select Template you want meta parameters from", + "description": "Select template you want the property fields from.", "in": "path", "name": "templateID-dynamic", "required": true, @@ -396,7 +411,7 @@ "x-ms-summary": "Select Template" }, { - "description": "Dynamic Schema of meta from selected template", + "description": "Dynamic Schema of properties from selected template.", "in": "body", "name": "dynamicTemplateMetaSchema", "schema": { @@ -423,7 +438,7 @@ }, "/setfile": { "post": { - "description": "Sets the main PDF for the document", + "description": "Sets the main PDF file for the document.", "operationId": "SetFile", "summary": "Set file for document", "parameters": [ @@ -444,13 +459,13 @@ "schema": { "properties": { "documentId": { - "description": "documentId", - "title": "Id of document to update", + "description": "The document ID of the document to update.", + "title": "Document ID", "type": "string", "x-ms-visibility": "important" }, "pdfContent": { - "description": "The file contents of the new PDF", + "description": "The file contents of the new PDF file.", "title": "New PDF content", "format": "byte", "type": "string", @@ -470,19 +485,290 @@ "schema": { "description": "The document JSON", "title": "Document JSON", - "type": "string" + "type": "object" } } } } }, + "/newfrompdf": { + "post": { + "description": "Creates a document from a PDF file.", + "operationId": "NewFromPdf", + "parameters": [ + { + "default": "application/json", + "description": "Content type of parameter.", + "in": "header", + "name": "Content-Type", + "required": true, + "type": "string", + "x-ms-summary": "Content type", + "x-ms-visibility": "internal" + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "pdfContent": { + "description": "The file content of the PDF file that will be used for the new document.", + "title": "PDF content", + "format": "byte", + "type": "string", + "x-ms-visibility": "important" + }, + "authorRole": { + "description": "The role of the author in the signing process.", + "title": "Author role", + "type": "string", + "default": "signing_party", + "enum": ["signing_party", "viewer"], + "x-ms-visibility": "advanced" + } + }, + "required": ["pdfContent", "authorRole"], + "type": "object" + } + } + ], + "responses": { + "201": { + "description": "201 Created Document", + "schema": { + "description": "Document ID of the created document.", + "title": "Document ID", + "type": "string" + } + } + }, + "summary": "Create new document from PDF" + } + }, + "/addparty": { + "post": { + "description": "Adds a new party to the document. The party can be a signatory, viewer or approver of the document.", + "operationId": "AddParty", + "parameters": [ + { + "default": "application/json", + "description": "Content type of parameter.", + "in": "header", + "name": "Content-Type", + "required": true, + "type": "string", + "x-ms-summary": "Content type", + "x-ms-visibility": "internal" + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "documentId": { + "description": "ID of the document to add the new party to.", + "title": "Document ID", + "type": "string", + "x-ms-visibility": "important" + }, + "partyEmail": { + "description": "The email of the new party", + "title": "Party email", + "type": "string", + "x-ms-visibility": "important" + }, + "partyRole": { + "description": "The role of the party in the signing process.", + "title": "Party role", + "type": "string", + "default": "signing_party", + "enum": ["signing_party", "viewer", "approver"] + }, + "firstname": { + "description": "The firstname of the new party.", + "title": "Firstname", + "type": "string", + "x-ms-visibility": "advanced" + }, + "lastname": { + "description": "The lastname of the new party.", + "title": "Lastname", + "type": "string", + "x-ms-visibility": "advanced" + }, + "company": { + "description": "The company that the new party works with.", + "title": "Company", + "type": "string", + "x-ms-visibility": "advanced" + }, + "mobile": { + "description": "The mobile phone number of the new party.", + "title": "Mobile", + "type": "string", + "x-ms-visibility": "advanced" + }, + "personalNumber": { + "description": "The new party's personal number. Used for Swedish, Norwegian, Danish, and Finnish eID.", + "title": "Party ID number", + "type": "string", + "x-ms-visibility": "advanced" + }, + "signOrder": { + "description": "The new party's order in the signing process.", + "title": "Invitation order", + "type": "number", + "x-ms-visibility": "advanced" + }, + "deliveryMethod": { + "description": "The method of invitation for the new party.", + "title": "Invitation method", + "type": "string", + "default": "email", + "enum": ["email","mobile","email_mobile", "pad", "api"], + "x-ms-visibility": "advanced" + }, + "authenticationToView": { + "description": "The authentication method needed to view the document.", + "title": "Auth to view", + "type": "string", + "default": "standard", + "enum": ["standard","sms_pin","se_bankid", "no_bankid", "dk_nemid","fi_tupas","verimi","nl_idin"], + "x-ms-visibility": "advanced" + }, + "authenticationToViewArchived": { + "description": "The authentication method needed to view the archived document.", + "title": "Auth to view archived", + "type": "string", + "default": "standard", + "enum": ["standard","sms_pin","se_bankid", "no_bankid", "dk_nemid","fi_tupas","verimi","nl_idin"], + "x-ms-visibility": "advanced" + }, + "authenticationToSign": { + "description": "The authentication method needed to sign the document.", + "title": "Auth to sign", + "type": "string", + "default": "standard", + "enum": ["standard","sms_pin","se_bankid", "no_bankid", "dk_nemid", "fi_tupas", "onfido_document_check", "onfido_document_and_photo_check"], + "x-ms-visibility": "advanced" + }, + "confirmation": { + "description": "Method for sending confirmation.", + "title": "Confirmation", + "type": "string", + "default": "email", + "enum": ["email","mobile","email_mobile", "email_link", "email_link_mobile", "none"], + "x-ms-visibility": "advanced" + } + }, + "required": ["documentId", "partyEmail", "partyRole"], + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "200 Party Added" + } + }, + "summary": "Add new party" + } + }, + "/attachments": { + "get": { + "description": "Fetches all attachments from the Scrive e-archive.", + "operationId": "GetAttachments", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/GetAttachments" + } + } + }, + "summary": "Gets all the attachments you have access to", + "x-ms-visibility": "internal" + } + }, + "/setattachment": { + "post": { + "description": "Adds a PDF to a document as an attachment. Choose between existing attachments from your Scrive account or create a new attachment by providing a PDF file.", + "operationId": "SetAuthorAttachment", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "fileId": { + "description": "Select an existing attachment.", + "title": "Select Attachment", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetAttachments", + "value-path": "id", + "value-title": "title" + }, + "x-ms-visibility": "important" + }, + "documentId": { + "description": "The ID of the document to add the attachment to.", + "title": "Document ID", + "type": "string", + "x-ms-visibility": "important" + }, + "attachmentName": { + "description": "The name for the attachment.", + "title": "Name for the attachment.", + "type": "string", + "x-ms-visibility": "important" + }, + "required": { + "description": "Whether or not the attachment will be presented with a mandatory checkmark before signing.", + "title": "Required for signing", + "type": "string", + "enum": ["Yes", "No"], + "x-ms-visibility": "important" + }, + "addToSealedFile": { + "description": "Whether or not to include the attachment in the sealed document after signing.", + "title": "Add to sealed file", + "type": "string", + "enum": ["Yes", "No"], + "x-ms-visibility": "important" + }, + "pdfContent": { + "description": "The PDF file content for the new attachment. Use this OR \"Select Attachment\".", + "title": "New Attachment PDF", + "format": "byte", + "type": "string", + "x-ms-visibility": "advanced" + } + }, + "required": ["documentId", "attachmentName", "required", "addToSealedFile"], + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "200 Attachment Added" + } + }, + "summary": "Set attachment" + } + }, "/webhooks/delete/{webhook_id}": { "delete": { - "description": "Deletes a webhook", + "description": "Deletes a webhook.", "operationId": "DeleteWebhook", "parameters": [ { - "description": "ID of the webhook being deleted", + "description": "ID of the webhook being deleted.", "in": "path", "name": "webhook_id", "required": true, @@ -501,7 +787,7 @@ }, "/webhooks/signed/create": { "post": { - "description": "Creates a webhook", + "description": "Waits for a document to be signed.", "operationId": "WebhookOnDocumentSign", "parameters": [ { @@ -511,7 +797,7 @@ "schema": { "properties": { "documentId": { - "description": "documentId", + "description": "Document ID to trigger on when signed.", "title": "Document ID", "type": "string" }, @@ -532,7 +818,7 @@ "200": { "description": "Webhook Pushed", "schema": { - "description": "ID of the created document", + "description": "ID of the created document.", "title": "Signed document ID", "type": "string" } @@ -546,7 +832,7 @@ "schema": { "properties": { "signedDocumentId": { - "description": "Document ID for triggering document", + "description": "Document ID for triggering document.", "title": "Signed Document ID", "type": "string" } @@ -557,7 +843,7 @@ }, "/webhooks/signed/createandstart": { "post": { - "description": "Creates a webhook", + "description": "Starts the signing process for a document and waits for it to be signed.", "operationId": "StartAndOnDocumentSign", "parameters": [ { @@ -567,7 +853,7 @@ "schema": { "properties": { "documentId": { - "description": "documentId", + "description": "ID of document to start and trigger from on signed.", "title": "Document ID", "type": "string" }, @@ -588,7 +874,7 @@ "200": { "description": "Webhook Pushed", "schema": { - "description": "ID of the created document", + "description": "ID of the created document.", "title": "Signed document ID", "type": "string" } @@ -602,7 +888,7 @@ "schema": { "properties": { "signedDocumentId": { - "description": "Document ID for triggering document", + "description": "Document ID for triggering document.", "title": "Signed Document ID", "type": "string" } @@ -613,11 +899,11 @@ }, "/webhooks/signedfromtemplate/create/{templateId-dynamic}": { "post": { - "description": "Creates a webhook", + "description": "Watches a template and waits for one of its documents to be signed.", "operationId": "WebhookFromTemplateSign", "parameters": [ { - "description": "Select Template you want outputs from", + "description": "Choose template whose documents will trigger the flow when signed.", "in": "path", "name": "templateId-dynamic", "required": true, @@ -652,7 +938,7 @@ "200": { "description": "Webhook Pushed", "schema": { - "description": "ID of the triggering document", + "description": "ID of the triggering document.", "title": "Signed document ID", "type": "string" } From 073fd3674238ad9e5b56f930b3553d62ea9aca27 Mon Sep 17 00:00:00 2001 From: blanck Date: Wed, 23 Sep 2020 02:35:47 +0200 Subject: [PATCH 085/347] Add GetAccept connector (#400) * Add GetAccept connector * Update readme.md --- .../GetAccept/apiDefinition.swagger.json | 3460 +++++++++++++++++ .../GetAccept/apiProperties.json | 59 + certified-connectors/GetAccept/readme.md | 29 + 3 files changed, 3548 insertions(+) create mode 100644 certified-connectors/GetAccept/apiDefinition.swagger.json create mode 100644 certified-connectors/GetAccept/apiProperties.json create mode 100644 certified-connectors/GetAccept/readme.md diff --git a/certified-connectors/GetAccept/apiDefinition.swagger.json b/certified-connectors/GetAccept/apiDefinition.swagger.json new file mode 100644 index 000000000..75c5c14be --- /dev/null +++ b/certified-connectors/GetAccept/apiDefinition.swagger.json @@ -0,0 +1,3460 @@ +{ + "swagger": "2.0", + "info": { + "contact": { + "email": "integrations@getaccept.com", + "name": "GetAccept API Team", + "url": "https://app.getaccept.com/api" + }, + "description": "GetAccept provides a sales enablement platform for sales to design, send, promote, track, and e-sign sales documents, leveraging sales collateral, contract management, proposals, and electronic signatures in one place.", + "termsOfService": "https://www.getaccept.com/terms.html", + "title": "GetAccept", + "version": "1.6" + }, + "host": "api.getaccept.com", + "basePath": "/v1", + "schemes": [ + "https" + ], + "paths": { + "/attachments": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "attachments": { + "items": { + "properties": { + "attachment_id": { + "type": "string" + }, + "attachment_title": { + "type": "string" + }, + "attachment_type": { + "type": "string" + }, + "attachment_url": { + "type": "string" + }, + "library": { + "type": "boolean" + }, + "published": { + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Attachments" + ], + "description": "Receive a list of available attachments. You can add new attachments in GetAccept using a new document.", + "operationId": "ListAttachments", + "summary": "List attachments" + } + }, + "/auth": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "A JSON object containing authentication credentials", + "in": "body", + "name": "body", + "required": true, + "schema": { + "description": "Authentication model", + "properties": { + "client_id": { + "default": "", + "description": "The client id of your app if you received one from our API team", + "type": "string" + }, + "email": { + "description": "This is the email of the user in GetAccept", + "format": "email", + "type": "string" + }, + "entity_id": { + "default": "", + "description": "This specifies what entity to select if multiple entities are available for a user. If no value is specified the default entity will be selected.", + "type": "string" + }, + "password": { + "description": "This is the password of the user in GetAccept", + "format": "password", + "type": "string" + } + }, + "required": [ + "email", + "password" + ], + "type": "object", + "x-examples": { + "Example": { + "email": "user@example.com", + "password": "mysecret" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "access_token": { + "description": "Token to be used in consequtive requests using bearer header", + "type": "string" + }, + "expires_in": { + "description": "Seconds until the access token expires", + "format": "int64", + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "security": [], + "tags": [ + "Authentication" + ], + "description": "Token based authentication is recommended for server-based access or access from clients where OAuth is not suitable. Access tokens has to be requested using an administrators login credentials.\nRequests should include the header Content-Type with value application/json", + "operationId": "Authenticate", + "summary": "Authentication by token", + "x-ms-visibility": "internal" + } + }, + "/contacts": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": {}, + "type": "object" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Contacts" + ], + "description": "Receive a list of available contact for the current entity.\nAll contacts added as a recipient are saved as a contact and is available for later use on that entity.", + "operationId": "ListContacts", + "summary": "List contacts" + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "A JSON object containing contact information", + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "company_name": { + "description": "Associated company name", + "type": "string" + }, + "company_number": { + "description": "Associated company number", + "type": "string" + }, + "email": { + "description": "Email address of the contact", + "type": "string" + }, + "first_name": { + "description": "First name of the contact", + "type": "string" + }, + "fullname": { + "description": "Use to specify full name instead of first/last name", + "type": "string" + }, + "last_name": { + "description": "Last name of the contact", + "type": "string" + }, + "mobile": { + "description": "Mobile number in international format", + "type": "string" + }, + "note": { + "description": "Optional internal note for contact", + "type": "string" + }, + "phone": { + "description": "Phone number in international format", + "type": "string" + }, + "title": { + "description": "The title of the contact, ex. CEO, Sales manager", + "type": "string" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "contact_id": { + "description": "ID of the created contact", + "example": "abc58129f", + "type": "string", + "x-ms-summary": "Contact ID" + } + }, + "type": "object" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Contacts" + ], + "description": "This will create a new contact in the database for the current entity", + "operationId": "CreateContact", + "summary": "Create contact", + "x-ms-visibility": "important" + } + }, + "/documents": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Filter list on status", + "enum": [ + "draft", + "sent", + "viewed", + "reviewed", + "signed", + "rejected", + "recalled" + ], + "in": "query", + "name": "filter", + "type": "string", + "x-ms-summary": "Filter list on status" + }, + { + "description": "How to sort results", + "enum": [ + "name", + "value", + "created", + "recipient", + "status", + "owner" + ], + "in": "query", + "name": "sort_by", + "type": "string", + "x-ms-summary": "How to sort results" + }, + { + "description": "Sort order of results", + "enum": [ + "asc", + "desc" + ], + "in": "query", + "name": "sort_order", + "type": "string", + "x-ms-summary": "Sort order of results" + }, + { + "description": "Include documents from team members", + "enum": [ + true, + false + ], + "in": "query", + "name": "showteam", + "type": "boolean", + "x-ms-summary": "Include documents from team members" + }, + { + "description": "Include all documents from entity", + "enum": [ + true, + false + ], + "in": "query", + "name": "showall", + "type": "boolean", + "x-ms-summary": "Include all documents from entity" + }, + { + "description": "An external ID is a custom field which can contain a unique record identifier from a system outside of GetAccept", + "in": "query", + "name": "external_id", + "type": "string", + "x-ms-summary": "External ID" + }, + { + "description": "Start list from record x until limit", + "in": "query", + "name": "offset", + "type": "number", + "x-ms-summary": "Offset" + }, + { + "description": "Number of records to list", + "in": "query", + "name": "limit", + "type": "number", + "x-ms-summary": "Limit" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Documents" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "Get a list of available documents", + "operationId": "ListDocuments", + "summary": "List documents" + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "A JSON object containing document information", + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "attachments": { + "description": "Attachments", + "items": { + "properties": { + "id": { + "description": "Attachment ID received from list or after upload", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListAttachments", + "value-collection": "attachments", + "value-path": "attachment_id", + "value-title": "attachment_title" + }, + "x-ms-summary": "ID" + }, + "require_view": { + "description": "Require that recipient view the attachment", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Require view", + "x-nullable": true + }, + "type": { + "description": "file or external where file is an uploaded file and external is a link to an external file", + "enum": [ + "file", + "external" + ], + "type": "string", + "x-ms-summary": "Type" + } + }, + "type": "object" + }, + "type": "array", + "x-ms-summary": "Attachment" + }, + "custom_fields": { + "description": "Custom field", + "items": { + "properties": { + "id": { + "description": "ID of custom template field", + "type": "string", + "x-ms-summary": "Field ID" + }, + "name": { + "description": "Name of custom template field", + "type": "string", + "x-ms-summary": "Field Name" + }, + "value": { + "description": "Value of custom template field", + "type": "string", + "x-ms-summary": "Field Value" + } + }, + "type": "object" + }, + "type": "array", + "x-ms-summary": "Custom" + }, + "expiration_date": { + "description": "Date and time when the document should expire", + "format": "date-time", + "type": "string", + "x-ms-summary": "Expiration date", + "x-ms-visibility": "advanced" + }, + "external_id": { + "description": "External system ID for identification", + "type": "string", + "x-ms-summary": "External ID" + }, + "file_content": { + "description": "Base64 encoded file content", + "type": "string", + "x-ms-summary": "File content" + }, + "file_ids": { + "description": "Comma-separated, unique file-ids received when uploading files", + "type": "string", + "x-ms-summary": "File IDs" + }, + "file_url": { + "description": "Url to document file. Documents must be public available for download", + "type": "string", + "x-ms-summary": "File URL" + }, + "is_automatic_sending": { + "description": "If the document should be sent after creation", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Send automatically", + "x-ms-visibility": "important", + "x-nullable": true + }, + "is_reminder_sending": { + "description": "Should automatic reminders be sent", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Send reminders", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "is_scheduled_sending": { + "description": "Should the sending be scheduled for sending in the future", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Schedule sending", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "is_signing": { + "description": "Should the document be sent for signing", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Sign document", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "is_signing_biometric": { + "description": "Use handwritten signature", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Handwritten signature", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "is_signing_forward": { + "description": "Should recipients be able to transfer signature rights", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Allow signature transfer", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "is_signing_initials": { + "description": "Sign document using recipient initials", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Sign with initials", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "is_sms_sending": { + "description": "Should the document be sent to recipient mobile by text", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Send SMS", + "x-nullable": true + }, + "name": { + "description": "Enter a name of the document", + "type": "string", + "x-ms-summary": "Document name", + "x-ms-visibility": "important" + }, + "recipients": { + "items": { + "properties": { + "company_name": { + "description": "Company name of the recipient", + "type": "string", + "x-ms-summary": "Company name", + "x-ms-visibility": "important" + }, + "company_number": { + "description": "Company number of the recipient", + "type": "string", + "x-ms-summary": "Company number", + "x-ms-visibility": "important" + }, + "email": { + "description": "Email address of the recipient", + "type": "string", + "x-ms-summary": "Email", + "x-ms-visibility": "important" + }, + "first_name": { + "description": "Recipient first name", + "type": "string", + "x-ms-summary": "First name", + "x-ms-visibility": "important" + }, + "last_name": { + "description": "Last name of recipient", + "type": "string", + "x-ms-summary": "Last name", + "x-ms-visibility": "important" + }, + "mobile": { + "description": "Mobile phone in international format", + "type": "string", + "x-ms-summary": "Mobile" + }, + "note": { + "description": "Additional note for a recipient", + "type": "string", + "x-ms-summary": "Note", + "x-ms-visibility": "advanced" + }, + "order_num": { + "description": "If signing order is enabled", + "example": 1, + "format": "int32", + "type": "integer", + "x-ms-summary": "Signing order", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "role": { + "description": "The kind of recipient in the document", + "enum": [ + "signer", + "approver", + "cc" + ], + "type": "string", + "x-ms-summary": "Recipient type", + "x-ms-visibility": "important" + }, + "role_name": { + "description": "The name of the role in a template", + "type": "string", + "x-ms-summary": "Template role", + "x-ms-visibility": "important" + }, + "verify_eid": { + "description": "Verify using EID", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Verify EID", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "verify_eid_type": { + "description": "EID type to be used for personal verification", + "type": "string", + "x-ms-summary": "EID type", + "x-ms-visibility": "advanced" + }, + "verify_qna": { + "description": "Should a question be asked", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Enable question", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "verify_qna_answer": { + "description": "The answer to question", + "example": "123456789", + "type": "string", + "x-ms-summary": "Verification answer", + "x-ms-visibility": "advanced" + }, + "verify_qna_open": { + "description": "Should question be asked before opening document", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Question on open", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "verify_qna_question": { + "description": "Question to ask for verification", + "example": "Enter your SSN", + "type": "string", + "x-ms-summary": "Verification question", + "x-ms-visibility": "advanced" + }, + "verify_qna_sign": { + "description": "Should a question be asked before signing", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Sign question", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "verify_sms": { + "description": "Verify recipient by SMS", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Verify SMS", + "x-ms-visibility": "advanced", + "x-nullable": true + }, + "verify_sms_open": { + "description": "Verify SMS on open", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Verify SMS on open", + "x-ms-visibility": "advanced" + }, + "verify_sms_sign": { + "description": "Should a SMS verify the recipient before signing", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "Verify by SMS", + "x-ms-visibility": "advanced", + "x-nullable": true + } + }, + "type": "object" + }, + "type": "array", + "x-ms-summary": "Recipient" + }, + "scheduled_sending_time": { + "description": "Date and time when the document should be sent out", + "format": "date-time", + "type": "string", + "x-ms-summary": "Schedule send date", + "x-ms-visibility": "advanced" + }, + "sender_email": { + "description": "Send from other email than authenticated user", + "type": "string", + "x-ms-summary": "Sender email override", + "x-ms-visibility": "advanced" + }, + "sender_id": { + "description": "Send from other user than authenticated", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListUsers", + "value-collection": "users", + "value-path": "user_id", + "value-title": "email" + }, + "x-ms-summary": "Sender user override", + "x-ms-visibility": "advanced" + }, + "template_id": { + "description": "Select a template to use for the sending", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListTemplates", + "value-collection": "templates", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Template ID", + "x-ms-visibility": "important" + }, + "type": { + "default": "sales", + "description": "Set the type/category of the document", + "enum": [ + "sales", + "introduction", + "hr", + "other" + ], + "example": "sales", + "type": "string", + "x-ms-summary": "Document type", + "x-ms-visibility": "important" + }, + "value": { + "description": "Value of deal or document", + "format": "int32", + "type": "integer", + "x-ms-summary": "Document value", + "x-ms-visibility": "important", + "x-nullable": true + }, + "video_id": { + "description": "Select a video to use for the sending", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListVideos", + "value-collection": "videos", + "value-path": "video_id", + "value-title": "video_title" + }, + "x-ms-summary": "Video ID", + "x-ms-visibility": "advanced" + } + }, + "required": [ + "name" + ], + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Document" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "You must create a document to be able to send it to a recipient. When creating a document you can refer to previously uploaded files with file_id or you can choose to create a document and upload the files in on API post. You can only upload ONE file when including a file in the create document POST.\n\nUse either file_ids parameter to use existing uploaded file(s), file_content to send the document as base64 encoded string or do a multipart post with file parameter.\n\nAll recipients must have either a valid e-mail or a mobile number.\n\nAll events are recorded using requestor IP address. You can override this using header CLIENT_IP containing the end-users public IP address.", + "operationId": "CreateDocument", + "summary": "Create and send document or template" + } + }, + "/documents/{documentId}": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Document ID", + "in": "path", + "name": "documentId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListDocuments", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Document ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Document" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "403": { + "description": "Access denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "Get document details by specifying a document id.", + "operationId": "GetDocumentDetails", + "summary": "Get document details" + } + }, + "/documents/{documentId}/download": { + "get": { + "produces": [ + "application/json", + "application/pdf" + ], + "parameters": [ + { + "description": "Document ID", + "in": "path", + "name": "documentId", + "required": true, + "type": "string", + "x-ms-summary": "Document ID", + "x-ms-url-encoding": "single" + }, + { + "default": "true", + "description": "Return the binary file directly", + "enum": [ + "true", + "false" + ], + "in": "query", + "name": "direct", + "type": "string", + "x-ms-summary": "Return the binary file directly" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "properties": { + "document_url": { + "type": "string" + }, + "file": { + "type": "string" + } + }, + "type": "object" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "Document file can always be downloaded but most likely you want to download it when it has status Signed. \n\nYou can select to receive a download-url or get the binary file.\n\nThe download URL is accessable 10 minutes after a request has been made.", + "operationId": "DownloadDocument", + "summary": "Download document", + "x-ms-visibility": "important" + } + }, + "/documents/{documentId}/fields": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Document ID", + "in": "path", + "name": "documentId", + "required": true, + "type": "string", + "x-ms-summary": "Document ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Fields" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "Get a list of fields for a document or template. Can be used both before and after a document has been signed.", + "operationId": "ListDocumentFields", + "summary": "Get document fields" + } + }, + "/documents/{documentId}/recipients": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Document ID", + "in": "path", + "name": "documentId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListDocuments", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Document ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Recipients" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "Get a list of recipients for a specific document.", + "operationId": "ListRecipients", + "summary": "Get document recipients" + } + }, + "/documents/{documentId}/seal": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Document ID", + "in": "path", + "name": "documentId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListDocuments", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Document ID", + "x-ms-url-encoding": "single" + }, + { + "description": "An optional JSON object containing seal information", + "in": "body", + "name": "body", + "schema": { + "properties": { + "sender_email": { + "description": "Use this to specify the sender user/owner by email address to be used for self-signing the document.", + "type": "string" + }, + "sender_id": { + "description": "Use this to specify the sender user/owner by id to be used for self-signing the document.", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListUsers", + "value-collection": "users", + "value-path": "user_id", + "value-title": "name" + } + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "If you prefer to send the document manually you can use this method to seal the document. Do not use this method if you send the document automatically or if you use the send document method above.\n\nThis API call triggers the document seal action and can only be performed on documents with document_status = draft. The method will return individual access/signing links for each recipient.\n\nIf document was created using self-sign option it will also be self-signed by the authenticated or specified user before sealing.", + "operationId": "SealDocument", + "summary": "Seal document", + "x-ms-visibility": "internal" + } + }, + "/documents/{documentId}/send": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Document ID", + "in": "path", + "name": "documentId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListDocuments", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Document ID", + "x-ms-url-encoding": "single" + }, + { + "description": "An optional JSON object containing sending information", + "in": "body", + "name": "body", + "schema": { + "properties": { + "sender_email": { + "description": "Use this to specify the sender user/owner by email address to be used for self-signing the document.", + "format": "email", + "type": "string" + }, + "sender_id": { + "description": "Use this to specify the sender user/owner by id to be used for self-signing the document.", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListUsers", + "value-collection": "users", + "value-path": "user_id", + "value-title": "name" + } + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Document" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "When you send a document via GetAccept, we deliver an email to all recipients, each containing a unique, secured link. This API call triggers the document send action and can only be performed on documents with document_status = draft. The document will be sent to recipients you provided when it was created.\n\nIf document was created using self-sign option it will also be self-signed by the authenticated or specified user before sending.", + "operationId": "SendDocument", + "summary": "Send existing document", + "x-ms-visibility": "advanced" + } + }, + "/refresh": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "access_token": { + "type": "string" + }, + "expires_in": { + "format": "int64", + "type": "integer" + } + }, + "type": "object" + } + } + }, + "tags": [ + "Authentication" + ], + "description": "You can request a refreshed of the access token before the original token has expired.", + "operationId": "RefreshToken", + "summary": "Refresh an access token", + "x-ms-visibility": "internal" + } + }, + "/subscriptions": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "A JSON object containing subscription information", + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "host": { + "description": "The host name to send the post to", + "type": "string", + "x-ms-visibility": "internal" + }, + "event": { + "description": "Event trigger", + "enum": [ + "document.created", + "document.sent", + "document.viewed", + "document.reviewed", + "document.signed", + "document.approved", + "document.expired", + "document.rejected", + "document.downloaded", + "document.printed", + "document.forwarded", + "document.partially_signed", + "document.commented", + "document.hardbounced", + "document.imported" + ], + "example": "document.signed", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListSubscriptionEvents", + "value-path": "value", + "value-title": "name" + }, + "x-ms-summary": "Select event", + "x-ms-visibility": "important" + }, + "global": { + "default": true, + "description": "If the webhook should catch events for all entity users.", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "All entity users", + "x-nullable": true + }, + "notification_email": { + "description": "If the event fails, send a notification to this email instead of the sender", + "example": "hostmaster@example.com", + "type": "string", + "x-ms-summary": "Error email", + "x-ms-visibility": "advanced" + }, + "payload": { + "description": "Additional payload data to post", + "type": "string", + "x-ms-summary": "Payload", + "x-ms-visibility": "advanced" + }, + "target_url": { + "description": "The URL to post payload to on event", + "example": "https://abc.x.pipedream.net/", + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + }, + "required": [ + "event", + "target_url" + ], + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Subscription" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Subscriptions" + ], + "description": "This call will create a new subscription.\nThe response will be wrapped in an array even for single object according to REST hook standards.\n\n>Events\n * `document.created` - Document is created\n * `document.sent` - Document is sent\n * `document.viewed` - Document is sent\n * `document.signed` - Document is signed\n * `document.approved` - Document is approved\n * `document.expired` - Document has expired\n * `document.rejected` - Document is rejected\n * `document.downloaded` - Document is downloaded\n * `document.printed` - Document is printed\n * `document.forwarded` - Document is forwarded\n * `document.partially_signed` - Document has been partially signed\n * `document.commented` - Document is commented\n * `document.hardbounced` - Document is hardbounced\n * `document.imported` - Document is imported", + "operationId": "CreateSubscription", + "summary": "Subscribe to document events", + "x-ms-summary": "When a document status changes", + "x-ms-trigger": "single", + "x-ms-trigger-hint": "Trigger when a document status is changed", + "x-ms-visibility": "important" + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/Webhook" + } + } + }, + "/subscriptions/events": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "items": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Subscriptions" + ], + "description": "This call will return a list of available subscription events", + "operationId": "ListSubscriptionEvents", + "summary": "List available subscription events", + "x-ms-visibility": "internal" + } + }, + "/subscriptions/events/rejected": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "A JSON object containing subscription information", + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "host": { + "description": "The host name to send the post to", + "type": "string", + "x-ms-visibility": "internal" + }, + "event": { + "default": "document.rejected", + "description": "Event trigger", + "type": "string", + "x-ms-summary": "Event trigger", + "x-ms-visibility": "internal" + }, + "global": { + "default": true, + "description": "If the webhook should catch events for all entity users.", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "All entity users", + "x-nullable": true + }, + "notification_email": { + "description": "If the event fails, send a notification to this email instead of the sender", + "example": "hostmaster@example.com", + "type": "string", + "x-ms-summary": "Error email", + "x-ms-visibility": "advanced" + }, + "payload": { + "description": "Additional payload data to post", + "type": "string", + "x-ms-summary": "Payload", + "x-ms-visibility": "advanced" + }, + "target_url": { + "description": "The URL to post payload to on event", + "example": "https://abc.x.pipedream.net/", + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + }, + "required": [ + "event", + "target_url" + ], + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Subscription" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Others" + ], + "description": "Triggers when a document has been rejected by any of the recipients", + "operationId": "CreateRejectedSubscription", + "summary": "When a document has been rejected", + "x-ms-summary": "When a document has been rejected", + "x-ms-trigger": "single", + "x-ms-visibility": "important" + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/Webhook" + } + } + }, + "/subscriptions/events/reviewed": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "A JSON object containing subscription information", + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "host": { + "description": "The host name to send the post to", + "type": "string", + "x-ms-visibility": "internal" + }, + "event": { + "default": "document.reviewed", + "description": "Event trigger", + "type": "string", + "x-ms-summary": "Event trigger", + "x-ms-visibility": "internal" + }, + "global": { + "default": true, + "description": "If the webhook should catch events for all entity users.", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "All entity users", + "x-nullable": true + }, + "notification_email": { + "description": "If the event fails, send a notification to this email instead of the sender", + "example": "hostmaster@example.com", + "type": "string", + "x-ms-summary": "Error email", + "x-ms-visibility": "advanced" + }, + "payload": { + "description": "Additional payload data to post", + "type": "string", + "x-ms-summary": "Payload", + "x-ms-visibility": "advanced" + }, + "target_url": { + "description": "The URL to post payload to on event", + "example": "https://abc.x.pipedream.net/", + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + }, + "required": [ + "event", + "target_url" + ], + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Subscription" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Others" + ], + "description": "Triggers when a document has been reviewed by any of the recipients", + "operationId": "CreateReviewedSubscription", + "summary": "When a document has been reviewed", + "x-ms-summary": "When a document has been reviewed", + "x-ms-trigger": "single", + "x-ms-visibility": "important" + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/Webhook" + } + } + }, + "/subscriptions/events/signed": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "A JSON object containing subscription information", + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "host": { + "description": "The host name to send the post to", + "type": "string", + "x-ms-visibility": "internal" + }, + "event": { + "default": "document.signed", + "description": "Event trigger", + "type": "string", + "x-ms-summary": "Event trigger", + "x-ms-visibility": "internal" + }, + "global": { + "default": true, + "description": "If the webhook should catch events for all entity users.", + "enum": [ + true, + false + ], + "example": true, + "type": "boolean", + "x-ms-summary": "All entity users", + "x-nullable": true + }, + "notification_email": { + "description": "If the event fails, send a notification to this email instead of the sender", + "example": "hostmaster@example.com", + "type": "string", + "x-ms-summary": "Error email", + "x-ms-visibility": "advanced" + }, + "payload": { + "description": "Additional payload data to post", + "type": "string", + "x-ms-summary": "Payload", + "x-ms-visibility": "advanced" + }, + "target_url": { + "description": "The URL to post payload to on event", + "example": "https://abc.x.pipedream.net/", + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + }, + "required": [ + "event", + "target_url" + ], + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Subscription" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Others" + ], + "description": "Triggers when a document has been signed by all signing parties", + "operationId": "CreateSignedSubscription", + "summary": "When a document has been signed", + "x-ms-summary": "When a document has been signed", + "x-ms-trigger": "single", + "x-ms-visibility": "important" + }, + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/Webhook" + } + } + }, + "/subscriptions/{subscriptionId}": { + "delete": { + "parameters": [ + { + "description": "Subscription ID", + "in": "path", + "name": "subscriptionId", + "required": true, + "type": "string", + "x-ms-summary": "Subscription ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "tags": [ + "Subscriptions" + ], + "description": "Delete a single subscription.", + "operationId": "DeleteSubscription", + "summary": "Delete subscription", + "x-ms-visibility": "internal" + }, + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Subscription ID", + "in": "path", + "name": "subscriptionId", + "required": true, + "type": "string", + "x-ms-summary": "Subscription ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Subscription" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Subscriptions" + ], + "description": "This call will return details of a single subscription", + "operationId": "GetSubscriptionDetails", + "summary": "Get subscription details", + "x-ms-visibility": "internal" + } + }, + "/templates": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "default": "true", + "description": "Show all templates for entity", + "in": "query", + "name": "showall", + "type": "string", + "x-ms-summary": "Show all" + }, + { + "description": "Show templates in a specific folder", + "in": "query", + "name": "folder_id", + "type": "string", + "x-ms-summary": "Folder ID" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "templates": { + "items": { + "properties": { + "tags": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "external_editor_type": { + "type": "string" + }, + "field_count": { + "format": "int32", + "type": "integer" + }, + "id": { + "type": "string" + }, + "is_editable": { + "type": "boolean" + }, + "is_private": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "page_count": { + "format": "int32", + "type": "integer" + }, + "role_count": { + "format": "int32", + "type": "integer" + }, + "sender_name": { + "type": "string" + }, + "sender_thumb_url": { + "type": "string" + }, + "thumb_url": { + "type": "string" + }, + "type": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "video_id": { + "type": "string" + }, + "video_thumb_url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Templates" + ], + "description": "Receive a list of available document templates. You can add new templates under the Templates-section in GetAccept.", + "operationId": "ListTemplates", + "summary": "List templates", + "x-ms-visibility": "important" + } + }, + "/templates/{templateId}/fields": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Template ID", + "in": "path", + "name": "templateId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListTemplates", + "value-collection": "templates", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Template ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Fields" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Templates" + ], + "description": "Receive a list of fields for a specific template.", + "operationId": "ListFields", + "summary": "Get template fields" + } + }, + "/templates/{templateId}/roles": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Template ID", + "in": "path", + "name": "templateId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListTemplates", + "value-collection": "templates", + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Template ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "roles": { + "items": { + "properties": { + "email": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "mobile": { + "type": "string" + }, + "role": { + "type": "string" + }, + "role_id": { + "type": "string" + }, + "role_name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Templates" + ], + "description": "Receive a list of roles for a specific template.", + "operationId": "ListRoles", + "summary": "Get template roles" + } + }, + "/upload": { + "post": { + "consumes": [ + "multipart/form-data", + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Binary File", + "format": "binary", + "in": "formData", + "name": "file", + "type": "string", + "x-ms-summary": "Binary File", + "x-ms-visibility": "important" + }, + { + "description": "Filename of the document, with the extension. This will be helpful for converting different file-types.", + "in": "formData", + "name": "file_name", + "type": "string", + "x-ms-summary": "File name" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "file_id": { + "description": "ID of the uploaded file to be used in file_ids when creating a document", + "type": "string" + }, + "file_status": { + "description": "Status of the uploaded file", + "type": "string" + } + }, + "type": "object" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Documents" + ], + "description": "You can upload one file at a time and get a file id. The file id is used to connect a file with a GetAccept document which is sent to recipients. If you want to upload mutliple files you run multiple POST. We only accept files up to 10 MB as default. Uploaded file need to be imported/added to a document within 48 hours after uploading.\n\nWe recommended you to upload PDF files in order to guarantee the same look when sent. Other file types can be converted, such as:\n\nMirosoft Office: doc, docx, xl, xls, xlsx, ppt, pptx\nMac: numbers, key\nImages: jpg, jpeg, png\nOther: html, tex, csv", + "operationId": "UploadDocument", + "summary": "Upload a document file", + "x-ms-visibility": "important" + } + }, + "/upload/attachment": { + "post": { + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Binary File", + "format": "binary", + "in": "formData", + "name": "file", + "type": "string", + "x-ms-summary": "Binary File" + }, + { + "description": "Filename of the document, with the extension. This will be helpful for converting different file-types.", + "in": "formData", + "name": "file_name", + "type": "string", + "x-ms-summary": "File name" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "filename": { + "description": "File name of the attachment", + "type": "string", + "x-ms-summary": "File name" + }, + "id": { + "description": "ID of the uploaded attachment to be used in attachment_id when creating a document", + "type": "string", + "x-ms-summary": "Attachment ID" + }, + "title": { + "description": "Title of the attachment", + "type": "string", + "x-ms-summary": "Attachment title" + }, + "type": { + "description": "Type of the attachment", + "type": "string", + "x-ms-summary": "Attachment type" + } + }, + "type": "object" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Attachments" + ], + "description": "You can upload attachment files to include with documents you send.\nSuccessful request will return the attachment_id. Use attachment_id to assign an attachment to a document.", + "operationId": "UploadAttachment", + "summary": "Upload an attachment" + } + }, + "/upload/video": { + "post": { + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "Binary File", + "format": "binary", + "in": "formData", + "name": "file", + "type": "string", + "x-ms-summary": "Binary File" + }, + { + "description": "Filename of the video, with the extension. This will be helpful for converting different file-types.", + "in": "formData", + "name": "file_name", + "type": "string", + "x-ms-summary": "File name" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "file_status": { + "description": "Status of the video", + "type": "string", + "x-ms-summary": "File status" + }, + "filename": { + "description": "File name of the video", + "type": "string", + "x-ms-summary": "File name" + }, + "job_id": { + "description": "Id of the processing job converting and compressing the video. Poll for job status updates using /video/job/.", + "type": "string", + "x-ms-summary": "Job ID" + }, + "video_id": { + "description": "ID of the uploaded video to be used in video_id when creating a document", + "type": "string", + "x-ms-summary": "Video ID" + } + }, + "type": "object" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Videos" + ], + "description": "You can upload attachment files to include with documents you send.\nSuccessful request will return the attachment_id. Use attachment_id to assign an attachment to a document.", + "operationId": "UploadVideo", + "summary": "Upload a video" + } + }, + "/users": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Users" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Users" + ], + "description": "Fetch a list of active users for the current authenticated entity", + "operationId": "ListUsers", + "summary": "List users" + }, + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "A JSON object containing user information", + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "company_name": { + "description": "Associated company name", + "type": "string" + }, + "company_number": { + "description": "Associated company number", + "type": "string" + }, + "email": { + "description": "Email address of the contact", + "type": "string" + }, + "first_name": { + "description": "First name of the contact", + "type": "string" + }, + "fullname": { + "description": "Use to specify full name instead of first/last name", + "type": "string" + }, + "last_name": { + "description": "Last name of the contact", + "type": "string" + }, + "mobile": { + "description": "Mobile number in international format", + "type": "string" + }, + "note": { + "description": "Optional internal note for contact", + "type": "string" + }, + "phone": { + "description": "Phone number in international format", + "type": "string" + }, + "title": { + "description": "The title of the contact, ex. CEO, Sales manager", + "type": "string" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/User" + } + }, + "400": { + "description": "Invalid data", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Users" + ], + "description": "This will create a new contact in the database for the current entity", + "operationId": "CreateUser", + "summary": "Create user", + "x-ms-visibility": "important" + } + }, + "/users/{userId}": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [ + { + "description": "User ID", + "in": "path", + "name": "userId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "ListUsers", + "value-collection": "users", + "value-path": "user_id", + "value-title": "name" + }, + "x-ms-summary": "User ID", + "x-ms-url-encoding": "single" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/User" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "The specified resource was not found", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Users" + ], + "description": "This call will return details of a single user.\nReceive details and available entities of the current authenticated user using user-id *me*", + "operationId": "GetUserDetails", + "summary": "Get user details" + } + }, + "/videos": { + "get": { + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "videos": { + "items": { + "properties": { + "editable": { + "type": "boolean" + }, + "published": { + "type": "boolean" + }, + "saved": { + "type": "boolean" + }, + "thumb_url": { + "type": "string" + }, + "video_id": { + "type": "string" + }, + "video_title": { + "type": "string" + }, + "video_type": { + "type": "string" + }, + "video_url": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "tags": [ + "Videos" + ], + "description": "Receive a list of available videos on the entity. You can add new videos in the mobile app or inside GetAccept.", + "operationId": "ListVideos", + "summary": "List videos" + } + } + }, + "definitions": { + "Document": { + "description": "A document is one or multiple uploaded file(s) that is to be sent to one or many recipients created by a user.", + "properties": { + "tags": { + "type": "string", + "x-ms-summary": "Tags" + }, + "auto_comment_email": { + "type": "string", + "x-ms-visibility": "internal" + }, + "auto_comment_text": { + "type": "string", + "x-ms-summary": "Automatic chat text", + "x-ms-visibility": "advanced" + }, + "company_id": { + "type": "string", + "x-ms-visibility": "internal" + }, + "company_logo_url": { + "type": "string", + "x-ms-visibility": "internal" + }, + "company_name": { + "type": "string", + "x-ms-visibility": "advanced" + }, + "company_number": { + "type": "string", + "x-ms-visibility": "internal" + }, + "created_at": { + "type": "string", + "x-ms-summary": "Created at", + "x-ms-visibility": "advanced" + }, + "download_url": { + "type": "string", + "x-ms-summary": "Download URL" + }, + "email_send_message": { + "type": "string", + "x-ms-summary": "Email message", + "x-ms-visibility": "advanced" + }, + "email_send_subject": { + "type": "string", + "x-ms-summary": "Email Subject", + "x-ms-visibility": "advanced" + }, + "email_send_template_id": { + "type": "string", + "x-ms-summary": "Email send template ID", + "x-ms-visibility": "internal" + }, + "entity_auto_comment_text": { + "type": "string", + "x-ms-visibility": "internal" + }, + "expiration_date": { + "type": "string", + "x-ms-summary": "Expiration date" + }, + "external_client_id": { + "type": "string", + "x-ms-summary": "External Client ID", + "x-ms-visibility": "advanced" + }, + "external_editor_id": { + "type": "string", + "x-ms-visibility": "advanced" + }, + "external_editor_type": { + "type": "string", + "x-ms-visibility": "advanced" + }, + "external_id": { + "type": "string", + "x-ms-summary": "External ID" + }, + "field_count": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Field count", + "x-ms-visibility": "advanced" + }, + "id": { + "type": "string", + "x-ms-summary": "ID", + "x-ms-visibility": "important" + }, + "is_auto_comment": { + "type": "boolean", + "x-ms-summary": "Auto comment", + "x-ms-visibility": "advanced" + }, + "is_auto_comment_email": { + "type": "boolean", + "x-ms-visibility": "advanced" + }, + "is_identify_recipient": { + "type": "boolean", + "x-ms-visibility": "advanced" + }, + "is_private": { + "type": "boolean", + "x-ms-summary": "Is private", + "x-ms-visibility": "advanced" + }, + "is_reminder_sending": { + "type": "boolean", + "x-ms-summary": "Send reminders", + "x-ms-visibility": "advanced" + }, + "is_scheduled_sending": { + "type": "boolean", + "x-ms-summary": "Scheduled sending", + "x-ms-visibility": "advanced" + }, + "is_selfsign": { + "type": "boolean", + "x-ms-summary": "Is Self-signing", + "x-ms-visibility": "advanced" + }, + "is_signed": { + "type": "boolean", + "x-ms-summary": "Is signed", + "x-ms-visibility": "advanced" + }, + "is_signing": { + "type": "boolean", + "x-ms-visibility": "advanced" + }, + "is_signing_biometric": { + "type": "boolean", + "x-ms-summary": "Handwritten signature", + "x-ms-visibility": "advanced" + }, + "is_signing_forward": { + "type": "boolean", + "x-ms-summary": "Allow signature transfer", + "x-ms-visibility": "advanced" + }, + "is_signing_initials": { + "type": "boolean", + "x-ms-visibility": "internal" + }, + "is_signing_order": { + "type": "boolean", + "x-ms-summary": "Signature order", + "x-ms-visibility": "advanced" + }, + "is_video": { + "type": "boolean", + "x-ms-visibility": "advanced" + }, + "name": { + "type": "string", + "x-ms-summary": "Name", + "x-ms-visibility": "important" + }, + "parent_id": { + "type": "string", + "x-ms-summary": "Parent ID" + }, + "preview_url": { + "type": "string", + "x-ms-summary": "Preview URL", + "x-ms-visibility": "advanced" + }, + "recipients": { + "items": { + "$ref": "#/definitions/Recipient" + }, + "type": "array" + }, + "scheduled_sending_time": { + "type": "string", + "x-ms-summary": "Scheduled sending time", + "x-ms-visibility": "advanced" + }, + "send_date": { + "type": "string", + "x-ms-summary": "Send date" + }, + "sender_email": { + "type": "string", + "x-ms-summary": "Sender email" + }, + "sender_name": { + "type": "string", + "x-ms-summary": "Sender name" + }, + "sender_thumb_url": { + "type": "string", + "x-ms-summary": "Sender thumb URL", + "x-ms-visibility": "advanced" + }, + "sign_date": { + "type": "string", + "x-ms-summary": "Sign date" + }, + "status": { + "type": "string", + "x-ms-summary": "Status", + "x-ms-visibility": "important" + }, + "thumb_url": { + "type": "string", + "x-ms-summary": "Thumb URL", + "x-ms-visibility": "advanced" + }, + "type": { + "type": "string", + "x-ms-summary": "Type" + }, + "unique_id": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Unique ID" + }, + "user_id": { + "type": "string", + "x-ms-summary": "User ID", + "x-ms-visibility": "advanced" + }, + "value": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Value" + } + }, + "title": "Document", + "type": "object", + "x-ms-summary": "Document" + }, + "Documents": { + "description": "Document list", + "items": { + "properties": { + "tags": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "expiration_date": { + "type": "string" + }, + "id": { + "type": "string" + }, + "is_private": { + "type": "boolean" + }, + "is_signing": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "sender_name": { + "type": "string" + }, + "sender_thumb": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "title": "Documents", + "type": "array", + "x-ms-summary": "Documents" + }, + "Error": { + "properties": { + "description": { + "type": "string" + }, + "error": { + "type": "string" + }, + "status": { + "type": "number" + } + }, + "title": "Error", + "type": "object", + "x-ms-summary": "Error" + }, + "Field": { + "description": "Field details", + "properties": { + "field_height": { + "format": "int32", + "type": "integer" + }, + "field_id": { + "type": "string" + }, + "field_label": { + "type": "string" + }, + "field_left": { + "format": "int32", + "type": "integer" + }, + "field_top": { + "format": "int32", + "type": "integer" + }, + "field_type": { + "type": "string" + }, + "field_value": { + "type": "string" + }, + "field_width": { + "format": "int32", + "type": "integer" + }, + "is_collectable": { + "type": "boolean" + }, + "is_editable": { + "type": "boolean" + }, + "is_required": { + "type": "boolean" + }, + "page_id": { + "type": "string" + }, + "recipient_id": { + "type": "string" + }, + "recipient_name": { + "type": "string" + }, + "validation_regex": { + "type": "string" + }, + "validation_warning": { + "type": "string" + } + }, + "title": "Field", + "type": "object", + "x-ms-summary": "Field" + }, + "Fields": { + "description": "Field list", + "properties": { + "fields": { + "items": { + "$ref": "#/definitions/Field" + }, + "type": "array" + } + }, + "title": "Fields", + "type": "object", + "x-ms-summary": "Fields" + }, + "Recipient": { + "description": "Every unique e-mail address (or mobile number) that is connected to a document is a recipient.", + "properties": { + "company_name": { + "description": "Company name of the recipient", + "type": "string", + "x-ms-summary": "Company name" + }, + "company_number": { + "description": "Company number of the recipient", + "type": "string", + "x-ms-summary": "Company number" + }, + "document_url": { + "description": "Unique URL for the recipient to view/sign", + "type": "string", + "x-ms-summary": "Document URL", + "x-ms-visibility": "important" + }, + "email": { + "description": "Name of the created document", + "type": "string", + "x-ms-summary": "Recipient email" + }, + "first_name": { + "description": "First name of the recipient", + "type": "string", + "x-ms-summary": "First name" + }, + "fullname": { + "description": "Full name of the recipient", + "type": "string", + "x-ms-summary": "Full name" + }, + "gender": { + "description": "Gender of the recipient", + "type": "string", + "x-ms-summary": "Gender", + "x-ms-visibility": "advanced" + }, + "id": { + "description": "ID of the recipient", + "type": "string", + "x-ms-summary": "ID", + "x-ms-visibility": "advanced" + }, + "last_name": { + "description": "Last name of the recipient", + "type": "string", + "x-ms-summary": "Last name" + }, + "mobile": { + "description": "Mobile number of the recipient", + "type": "string", + "x-ms-summary": "Mobile" + }, + "note": { + "description": "Note of the recipient", + "type": "string", + "x-ms-summary": "Note", + "x-ms-visibility": "advanced" + }, + "order_num": { + "description": "Signing order of the recipient", + "type": "string", + "x-ms-summary": "Signing order num", + "x-ms-visibility": "advanced" + }, + "role": { + "type": "string", + "x-ms-visibility": "internal" + }, + "status": { + "description": "Status of the recipient", + "type": "string", + "x-ms-summary": "Status" + }, + "thumb_url": { + "description": "Thumb URL of the recipient", + "type": "string", + "x-ms-summary": "Thumb URL" + }, + "title": { + "description": "Title of the recipient", + "type": "string", + "x-ms-summary": "Title" + } + }, + "title": "Recipient", + "type": "object", + "x-ms-summary": "Recipient" + }, + "Recipients": { + "description": "Recipient list", + "properties": { + "recipients": { + "items": { + "$ref": "#/definitions/Recipient" + }, + "type": "array" + } + }, + "title": "Recipients", + "type": "object", + "x-ms-summary": "Recipients" + }, + "Subscription": { + "description": "Subscription details", + "properties": { + "host": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "event": { + "type": "string" + }, + "global": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "notification_email": { + "type": "string" + }, + "payload": { + "type": "string" + }, + "status": { + "format": "int32", + "type": "integer", + "x-nullable": true + }, + "subscription_id": { + "type": "string" + }, + "target_url": { + "type": "string" + } + }, + "title": "Subscription", + "type": "object", + "x-ms-summary": "Subscription" + }, + "User": { + "description": "A user is defined by it´s e-mail address and is connected to one or many entities.\n\n### User Roles\n\n#### Administrator:\n- View all documents\n- Edit all documents\n- Change entity settings, info and billing\n- Add new users to the entity\n- Assign entity roles\n\n#### Manager:\n- View team documents\n- Edit all documents\n- Add new users to the entity\n\n## Entity\nAn entity is the top node and all users and corresponding documents are connected to an entity. An entity is often the same as a company, a country or a department in a large organization.\n", + "properties": { + "app_mode": { + "type": "string", + "x-ms-summary": "App Mode" + }, + "disallow_create": { + "type": "boolean" + }, + "email": { + "description": "Email address of the user", + "type": "string", + "x-ms-summary": "Email" + }, + "entity_id": { + "type": "string", + "x-ms-summary": "Entity ID" + }, + "entity_name": { + "type": "string", + "x-ms-summary": "Entity Name" + }, + "first_name": { + "description": "First name of the user", + "type": "string", + "x-ms-summary": "First name" + }, + "id": { + "description": "ID of the user", + "type": "string", + "x-ms-summary": "ID" + }, + "language": { + "type": "string", + "x-ms-summary": "Language" + }, + "last_name": { + "description": "Last name of the user", + "type": "string", + "x-ms-summary": "Last name" + }, + "mobile": { + "description": "Mobile number in international format", + "type": "string", + "x-ms-summary": "mobile" + }, + "note": { + "description": "Optional internal note for user", + "type": "string", + "x-ms-summary": "Note" + }, + "phone": { + "description": "Phone number in international format", + "type": "string", + "x-ms-summary": "Phone" + }, + "role": { + "enum": [ + "user", + "manager", + "admin" + ], + "example": "user", + "type": "string", + "x-ms-summary": "Role" + }, + "skip_invitation": { + "enum": [ + true, + false + ], + "example": false, + "type": "boolean", + "x-ms-summary": "Skip sending invitation", + "x-nullable": true + }, + "status": { + "type": "string", + "x-ms-summary": "Status" + }, + "team_id": { + "type": "string", + "x-ms-summary": "Team ID" + }, + "thumb_url": { + "type": "string", + "x-ms-summary": "Thumb URL" + }, + "timezone": { + "type": "string", + "x-ms-summary": "Timezone" + }, + "title": { + "description": "The title of the user, ex. CEO, Sales manager", + "type": "string", + "x-ms-summary": "Title" + } + }, + "title": "User", + "type": "object", + "x-ms-summary": "User" + }, + "Users": { + "description": "User list", + "properties": { + "users": { + "items": { + "properties": { + "email": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "last_login": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "status": { + "type": "string" + }, + "team_name": { + "type": "string" + }, + "user_id": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "title": "Users", + "type": "object", + "x-ms-summary": "Users" + }, + "Webhook": { + "description": "Webhook payload", + "properties": { + "custom_fields": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "document": { + "$ref": "#/definitions/Document" + }, + "entity": { + "properties": { + "custom_domain": { + "type": "string", + "x-ms-summary": "Entity custom domain", + "x-ms-visibility": "advanced" + }, + "email_send_message": { + "type": "string", + "x-ms-summary": "Default email message", + "x-ms-visibility": "advanced" + }, + "email_send_subject": { + "type": "string", + "x-ms-summary": "Default email subject", + "x-ms-visibility": "advanced" + }, + "sub_domain": { + "type": "string", + "x-ms-summary": "Entity sub-domain", + "x-ms-visibility": "advanced" + } + }, + "type": "object" + }, + "event": { + "type": "string", + "x-ms-summary": "Event name" + }, + "event_action": { + "type": "string", + "x-ms-summary": "Event action" + }, + "event_type": { + "type": "string", + "x-ms-summary": "Event type" + }, + "recipient": { + "$ref": "#/definitions/Recipient" + }, + "subscription_id": { + "type": "string", + "x-ms-summary": "Subscription ID" + } + }, + "title": "Webhook", + "type": "object", + "x-ms-summary": "Webhook" + } + }, + "securityDefinitions": { + "Oauth2": { + "authorizationUrl": "https://app.getaccept.com/oauth2/authorize", + "description": "For testing purpose, use client_id **api** and client_secret **app**", + "flow": "accessCode", + "scopes": { + "basic": "Grants basic access to operations" + }, + "tokenUrl": "https://app.getaccept.com/oauth2/token", + "type": "oauth2" + }, + "Token": { + "description": "Enter your bearer token", + "in": "header", + "name": "Authorization", + "type": "apiKey" + } + }, + "security": [ + { + "Oauth2": [ + "basic" + ] + }, + { + "Token": [] + } + ], + "tags": [ + { + "externalDocs": { + "url": "https://app.getaccept.com/api/#authentication" + }, + "description": "Authentication with the GetAccept API can be made using JWT tokens (JSON Web Tokens) or OAuth 2.0 Authorization Framework http://oauth.net/2/ All requests must be made via HTTPS. All configuration URLs (webhooks, etc) should begin with https:// as well.", + "name": "Authentication" + }, + { + "externalDocs": { + "url": "https://app.getaccept.com/api/#contacts" + }, + "description": "Everything related to contacts", + "name": "Contacts" + }, + { + "externalDocs": { + "url": "https://app.getaccept.com/api/#documents" + }, + "description": "Everything related to documents", + "name": "Documents" + }, + { + "externalDocs": { + "url": "https://app.getaccept.com/api/#subscriptions" + }, + "description": "To simplify the process of checking a documents status and make it more efficient in an integrated application, you can enable API Webhooks. Enable webhooks as a user with administrator privileges in the Settings | Integration | Webhooks. We support multiple webhooks for one application. Events will be POSTed to your webhook URLs and should be handled by you. A POST must be answered and your endpoint will need to return a 2xx HTTP. Otherwise, the callback will be considered a failure and will be retried later. Retries will be made after 1, 12, 24, and 48 hours. The sender (or notification_email) will receive an email notification after a failed attempt.", + "name": "Subscriptions" + }, + { + "externalDocs": { + "url": "https://app.getaccept.com/api/#templates" + }, + "description": "GetAccept has extensive support for creating templates in different formats. You can use form fields to receive input data from a recipient or word files to merge custom data into a document.", + "name": "Templates" + }, + { + "externalDocs": { + "url": "https://app.getaccept.com/api/#users" + }, + "description": "General user methods for creating, listing of users, single user details and statistics and managing existing users.", + "name": "Users" + }, + { + "externalDocs": { + "url": "https://app.getaccept.com/api/#attachments" + }, + "description": "You can upload an attachment and reuse it in many documents.", + "name": "Attachments" + }, + { + "externalDocs": { + "url": "https://app.getaccept.com/api/#video" + }, + "description": "You can upload videos and reuse it in many documents.", + "name": "Videos" + }, + { + "description": "Additional endpoints used in various integrations.", + "name": "Others" + } + ], + "x-components": { + "responses": { + "AccessDenied": { + "content": { + "application/json": { + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "description": "Access denied" + }, + "Invalid": { + "content": { + "application/json": { + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "description": "Invalid data" + }, + "NotFound": { + "content": { + "application/json": { + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "description": "The specified resource was not found" + }, + "Unauthorized": { + "content": { + "application/json": { + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "description": "Unauthorized" + } + }, + "headers": { + "X-Rate-Limit-Limit": { + "description": "The number of allowed requests in the current period", + "schema": { + "format": "int32", + "type": "integer" + } + }, + "X-Rate-Limit-Remaining": { + "description": "The number of remaining requests in the current period", + "schema": { + "format": "int32", + "type": "integer" + } + }, + "X-Rate-Limit-Reset": { + "description": "The number of seconds left in the current period", + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.getaccept.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.getaccept.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Sales and CRM;Productivity" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/GetAccept/apiProperties.json b/certified-connectors/GetAccept/apiProperties.json new file mode 100644 index 000000000..e6c82a466 --- /dev/null +++ b/certified-connectors/GetAccept/apiProperties.json @@ -0,0 +1,59 @@ +{ + "properties": { + "capabilities": [ + "actions", + "triggers" + ], + "connectionParameters": { + "token": { + "oAuthSettings": { + "clientId": "Flow", + "customParameters": { + "authorizationUrlTemplate": { + "value": "https://app.getaccept.com/oauth2/authorize" + }, + "tokenUrlTemplate": { + "value": "https://app.getaccept.com/oauth2/token" + }, + "refreshUrlTemplate": { + "value": "https://app.getaccept.com/oauth2/token" + }, + "refreshBodyTemplate": { + "value": "client_id={ClientId}&scope={Scopes}&refresh_token={RefreshToken}&redirect_uri={RedirectUrl}&grant_type=refresh_token&client_secret={ClientSecret}" + }, + "scopeListDelimiter": { + "value": " " + } + }, + "identityProvider": "oauth2generic", + "properties": { + "IsFirstParty": false + }, + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "scopes": [ + "basic" + ] + }, + "type": "oauthSetting" + } + }, + "iconBrandColor": "#393A42", + "publisher": "GetAccept, Inc.", + "policyTemplateInstances": [ + { + "parameters": { + "x-ms-apimTemplate-operationName": [ + "CreateDocument" + ], + "x-ms-apimTemplate-policySection": "Response", + "x-ms-apimTemplateParameter.existsAction": "override", + "x-ms-apimTemplateParameter.name": "Content-Encoding", + "x-ms-apimTemplateParameter.value": "deflate" + }, + "templateId": "setheader", + "title": "Set Content-Encoding" + } + ] + } +} \ No newline at end of file diff --git a/certified-connectors/GetAccept/readme.md b/certified-connectors/GetAccept/readme.md new file mode 100644 index 000000000..5b969a2ba --- /dev/null +++ b/certified-connectors/GetAccept/readme.md @@ -0,0 +1,29 @@ +## GetAccept Connector +GetAccept provides a sales enablement platform for sales to design, send, promote, track, and e-sign sales documents, leveraging sales collateral, contract management, proposals, and electronic signatures in one place. +This connector helps to automate your workflows for document storage, retrieval, task assignment, and customized notifications. + +## Pre-requisites + +A GetAccept account is required to use this connection. +Goto [getaccept.com](https://www.getaccept.com) to register a free account. + +## API documentation +<> + +## How to get credentials? + +Only a valid GetAccept account is required as OAuth2 is used to authenticate the current logged-in user in GetAccept. + +## Supported Operations +- You can create signature requests based on templates or files provided by the connector +- Flows can be triggered based on status changes of documents, viewed/signed etc. +- Send documents for viewing and tracking automatically from example Sharepoint +- Automatically retrieve field data from fillable fields and update your CRM +- Manage users, create contacts and much more with ease + +## Deployment instructions +Please use [these instructions](https://github.com/getaccept/openapi#creating-microsoft-custom-connector) to deploy this connector as custom connector in Microsoft Power Automate and Power Apps + + +## Report issues and feedback +Please contact our [mailto:support@getaccept.com](technical support) for any integration related issues. From 5ac9c9879d8ab1be562565b12813b9358a013841 Mon Sep 17 00:00:00 2001 From: Dmitry Kubyshev Date: Tue, 22 Sep 2020 17:37:02 -0700 Subject: [PATCH 086/347] Replace deprecated 'x-ms-editor-options' with 'x-ms-enum-values' (#440) --- .../apiDefinition.swagger.json | 27 +- .../RecordedFuture/apiDefinition.swagger.json | 334 +++++++++--------- 2 files changed, 180 insertions(+), 181 deletions(-) diff --git a/certified-connectors/AXtension Content Gate/apiDefinition.swagger.json b/certified-connectors/AXtension Content Gate/apiDefinition.swagger.json index 6e2a8bdfb..4b639d962 100644 --- a/certified-connectors/AXtension Content Gate/apiDefinition.swagger.json +++ b/certified-connectors/AXtension Content Gate/apiDefinition.swagger.json @@ -174,19 +174,20 @@ "default": "BinaryContent", "enum": ["BinaryContent", "UriLink", "BinaryLink"], "x-ms-visibility": "important", - "x-ms-editor-options": { - "items": [ - { - "title": "File Contents", - "value": "BinaryContent" - }, - { "title": "Web Link (URL)", "value": "UriLink" }, - { - "title": "Existing File (URL)", - "value": "BinaryLink" - } - ] - } + "x-ms-enum-values": [ + { + "displayName": "File Contents", + "value": "BinaryContent" + }, + { + "displayName": "Web Link (URL)", + "value": "UriLink" + }, + { + "displayName": "Existing File (URL)", + "value": "BinaryLink" + } + ] }, "content": { "type": "string", diff --git a/certified-connectors/RecordedFuture/apiDefinition.swagger.json b/certified-connectors/RecordedFuture/apiDefinition.swagger.json index 3d9dc31b0..63774431e 100644 --- a/certified-connectors/RecordedFuture/apiDefinition.swagger.json +++ b/certified-connectors/RecordedFuture/apiDefinition.swagger.json @@ -4,11 +4,11 @@ "title": "Recorded Future", "description": "Recorded Future Connector enables access to the Recorded Future Intelligence. The connector has dedicated actions for pulling Recorded Future indicators (IP, Domain, URL, Hash) and associated context (Risk Score, Risk Rules, Intelligence Card Link and Related Entities) , Vulnerabilities, Recorded Future Alerts and enables access to Recorded Future SOAR API and Fusion Files", "contact": { - "name": "Recorded Future Support", - "url": "https://support.recordedfuture.com", - "email": "support@recordedfuture.com" - }, - "version": "1.0" + "name": "Recorded Future Support", + "url": "https://support.recordedfuture.com", + "email": "support@recordedfuture.com" + }, + "version": "1.0" }, "host": "api.recordedfuture.com", "basePath": "/v2/", @@ -270,158 +270,156 @@ "/public/prevent/weaponized_domains.json", "/public/prevent/weaponized_urls.json" ], - "x-ms-editor-options": { - "items": [ - { - "title": "IP - Default RiskList", - "value": "/public/MicrosoftAzure/ip_default.json" - }, - { - "title": "IP - 90+ (Very Malicious) RiskList", - "value": "/public/MicrosoftAzure/ip_gt_90.json" - }, - { - "title": "IP - Actively Communicating C&C Server", - "value": "/public/MicrosoftAzure/ip_active_c2.json" - }, - { - "title": "IP - Current C&C Server", - "value": "/public/MicrosoftAzure/ip_current_c2.json" - }, - { - "title": "IP - Recent Botnet Traffic", - "value": "/public/MicrosoftAzure/ip_botnet.json" - }, - { - "title": "IP - Recently Reported by Insikt Group", - "value": "/public/MicrosoftAzure/ip_insikt.json" - }, - { - "title": "IP - Phishing Host", - "value": "/public/MicrosoftAzure/ip_phishing.json" - }, - { - "title": "DOMAIN - Default RiskList", - "value": "/public/MicrosoftAzure/domain_default.json" - }, - { - "title": "DOMAIN - 90+ (Very Malicious) RiskList", - "value": "/public/MicrosoftAzure/domain_gt_90.json" - }, - { - "title": "DOMAIN - C&C DNS Name", - "value": "/public/MicrosoftAzure/domain_c2_dns.json" - }, - { - "title": "DOMAIN - Ransomware Payment DNS Name", - "value": "/public/MicrosoftAzure/domain_ransomware_payment.json" - }, - { - "title": "DOMAIN - Recently Active Weaponized Domain", - "value": "/public/MicrosoftAzure/domain_recent_weaponized.json" - }, - { - "title": "DOMAIN - Recently Reported by Insikt Group", - "value": "/public/MicrosoftAzure/domain_insikt.json" - }, - { - "title": "DOMAIN - Recent COVID-19-Related Domain Lure: Malicious", - "value": "/public/MicrosoftAzure/domain_covid_lure.json" - }, - { - "title": "DOMAIN - Recent Phishing Lure: Malicious", - "value": "/public/MicrosoftAzure/domain_phishing.json" - }, - { - "title": "URL - 90+ (Very Malicious) RiskList", - "value": "/public/MicrosoftAzure/url_gt_90.json" - }, - { - "title": "URL - C&C URL", - "value": "/public/MicrosoftAzure/url_c2.json" - }, - { - "title": "URL - Ransomware Distribution URL", - "value": "/public/MicrosoftAzure/url_ransomware_distribution.json" - }, - { - "title": "URL - Compromised URL", - "value": "/public/MicrosoftAzure/url_compromised.json" - }, - { - "title": "URL - Recently Reported by Insikt Group", - "value": "/public/MicrosoftAzure/url_insikt.json" - }, - { - "title": "URL - Positive Malware Verdict", - "value": "/public/MicrosoftAzure/url_malware_verdict.json" - }, - { - "title": "HASH - Recently Active Targeting Vulnerabilities in the Wild", - "value": "/public/MicrosoftAzure/hash_targeting_vulns.json" - }, - { - "title": "HASH - Observed in Underground Virus Testing Sites ", - "value": "/public/MicrosoftAzure/hash_observed_testing.json" - }, - { - "title": "HASH - Malware SSL Certificate Fingerprint", - "value": "/public/MicrosoftAzure/hash_malware_ssl.json" - }, - { - "title": "(SCF) Security Control Feed: Command and Control IPs", - "value": "/public/prevent/c2_communicating_ips.json" - }, - { - "title": "(SCF) Security Control Feed: Weaponized Domains", - "value": "/public/prevent/weaponized_domains.json" - }, - { - "title": "(SCF) Security Control Feed: Weaponized URLs", - "value": "/public/prevent/weaponized_urls.json" - }, - { - "title": "VULNERABILITY - Default RiskList", - "value": "/public/MicrosoftAzure/vuln_default.json" - }, - { - "title": "VULNERABILITY - 90+ (Very Malicious) RiskList", - "value": "/public/MicrosoftAzure/vuln_gt_90.json" - }, - { - "title": "VULNERABILITY - Exploited in the Wild by Recently Active Malware", - "value": "/public/MicrosoftAzure/vuln_recent_active_malware.json" - }, - { - "title": "VULNERABILITY - Recently Linked to Exploit Kit", - "value": "/public/MicrosoftAzure/vuln_recent_exploit_kit.json" - }, - { - "title": "VULNERABILITY - Recently Linked to Ransomware", - "value": "/public/MicrosoftAzure/vuln_recent_ransomware.json" - }, - { - "title": "VULNERABILITY - Recently Linked to Remote Access Trojan", - "value": "/public/MicrosoftAzure/vuln_recent_rat.json" - }, - { - "title": "VULNERABILITY - Recent Verified Proof of Concept Available Using Remote Execution", - "value": "/public/MicrosoftAzure/vuln_recent_poc_remote.json" - }, - { - "title": "VULNERABILITY - Recently Observed Exploit/Tool Development in the Wild", - "value": "/public/MicrosoftAzure/vuln_recent_exploit_dev_itw.json" - }, - { - "title": "VULNERABILITY - Exploited in the Wild by Malware", - "value": "/public/MicrosoftAzure/vuln_exploited_itw_malware.json" - }, - { - "title": "VULNERABILITY - Cyber Exploit Signal: Critical", - "value": "/public/MicrosoftAzure/vuln_critical_cyber_signal.json" - } - ] - }, + "x-ms-enum-values": [ + { + "displayName": "IP - Default RiskList", + "value": "/public/MicrosoftAzure/ip_default.json" + }, + { + "displayName": "IP - 90+ (Very Malicious) RiskList", + "value": "/public/MicrosoftAzure/ip_gt_90.json" + }, + { + "displayName": "IP - Actively Communicating C&C Server", + "value": "/public/MicrosoftAzure/ip_active_c2.json" + }, + { + "displayName": "IP - Current C&C Server", + "value": "/public/MicrosoftAzure/ip_current_c2.json" + }, + { + "displayName": "IP - Recent Botnet Traffic", + "value": "/public/MicrosoftAzure/ip_botnet.json" + }, + { + "displayName": "IP - Recently Reported by Insikt Group", + "value": "/public/MicrosoftAzure/ip_insikt.json" + }, + { + "displayName": "IP - Phishing Host", + "value": "/public/MicrosoftAzure/ip_phishing.json" + }, + { + "displayName": "DOMAIN - Default RiskList", + "value": "/public/MicrosoftAzure/domain_default.json" + }, + { + "displayName": "DOMAIN - 90+ (Very Malicious) RiskList", + "value": "/public/MicrosoftAzure/domain_gt_90.json" + }, + { + "displayName": "DOMAIN - C&C DNS Name", + "value": "/public/MicrosoftAzure/domain_c2_dns.json" + }, + { + "displayName": "DOMAIN - Ransomware Payment DNS Name", + "value": "/public/MicrosoftAzure/domain_ransomware_payment.json" + }, + { + "displayName": "DOMAIN - Recently Active Weaponized Domain", + "value": "/public/MicrosoftAzure/domain_recent_weaponized.json" + }, + { + "displayName": "DOMAIN - Recently Reported by Insikt Group", + "value": "/public/MicrosoftAzure/domain_insikt.json" + }, + { + "displayName": "DOMAIN - Recent COVID-19-Related Domain Lure: Malicious", + "value": "/public/MicrosoftAzure/domain_covid_lure.json" + }, + { + "displayName": "DOMAIN - Recent Phishing Lure: Malicious", + "value": "/public/MicrosoftAzure/domain_phishing.json" + }, + { + "displayName": "URL - 90+ (Very Malicious) RiskList", + "value": "/public/MicrosoftAzure/url_gt_90.json" + }, + { + "displayName": "URL - C&C URL", + "value": "/public/MicrosoftAzure/url_c2.json" + }, + { + "displayName": "URL - Ransomware Distribution URL", + "value": "/public/MicrosoftAzure/url_ransomware_distribution.json" + }, + { + "displayName": "URL - Compromised URL", + "value": "/public/MicrosoftAzure/url_compromised.json" + }, + { + "displayName": "URL - Recently Reported by Insikt Group", + "value": "/public/MicrosoftAzure/url_insikt.json" + }, + { + "displayName": "URL - Positive Malware Verdict", + "value": "/public/MicrosoftAzure/url_malware_verdict.json" + }, + { + "displayName": "HASH - Recently Active Targeting Vulnerabilities in the Wild", + "value": "/public/MicrosoftAzure/hash_targeting_vulns.json" + }, + { + "displayName": "HASH - Observed in Underground Virus Testing Sites ", + "value": "/public/MicrosoftAzure/hash_observed_testing.json" + }, + { + "displayName": "HASH - Malware SSL Certificate Fingerprint", + "value": "/public/MicrosoftAzure/hash_malware_ssl.json" + }, + { + "displayName": "(SCF) Security Control Feed: Command and Control IPs", + "value": "/public/prevent/c2_communicating_ips.json" + }, + { + "displayName": "(SCF) Security Control Feed: Weaponized Domains", + "value": "/public/prevent/weaponized_domains.json" + }, + { + "displayName": "(SCF) Security Control Feed: Weaponized URLs", + "value": "/public/prevent/weaponized_urls.json" + }, + { + "displayName": "VULNERABILITY - Default RiskList", + "value": "/public/MicrosoftAzure/vuln_default.json" + }, + { + "displayName": "VULNERABILITY - 90+ (Very Malicious) RiskList", + "value": "/public/MicrosoftAzure/vuln_gt_90.json" + }, + { + "displayName": "VULNERABILITY - Exploited in the Wild by Recently Active Malware", + "value": "/public/MicrosoftAzure/vuln_recent_active_malware.json" + }, + { + "displayName": "VULNERABILITY - Recently Linked to Exploit Kit", + "value": "/public/MicrosoftAzure/vuln_recent_exploit_kit.json" + }, + { + "displayName": "VULNERABILITY - Recently Linked to Ransomware", + "value": "/public/MicrosoftAzure/vuln_recent_ransomware.json" + }, + { + "displayName": "VULNERABILITY - Recently Linked to Remote Access Trojan", + "value": "/public/MicrosoftAzure/vuln_recent_rat.json" + }, + { + "displayName": "VULNERABILITY - Recent Verified Proof of Concept Available Using Remote Execution", + "value": "/public/MicrosoftAzure/vuln_recent_poc_remote.json" + }, + { + "displayName": "VULNERABILITY - Recently Observed Exploit/Tool Development in the Wild", + "value": "/public/MicrosoftAzure/vuln_recent_exploit_dev_itw.json" + }, + { + "displayName": "VULNERABILITY - Exploited in the Wild by Malware", + "value": "/public/MicrosoftAzure/vuln_exploited_itw_malware.json" + }, + { + "displayName": "VULNERABILITY - Cyber Exploit Signal: Critical", + "value": "/public/MicrosoftAzure/vuln_critical_cyber_signal.json" + } + ], "description": "Path to file", "x-ms-summary": "Path to file" } @@ -1407,17 +1405,17 @@ }, "x-ms-connector-metadata": [ { - "propertyName": "Website", - "propertyValue": "https://www.recordedfuture.com" - }, - { - "propertyName": "Privacy Policy", - "propertyValue": "https://www.recordedfuture.com/privacy-policy/" - }, - { - "propertyName": "Categories", - "propertyValue": "AI;Data" - } + "propertyName": "Website", + "propertyValue": "https://www.recordedfuture.com" + }, + { + "propertyName": "Privacy Policy", + "propertyValue": "https://www.recordedfuture.com/privacy-policy/" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Data" + } ], "definitions": {}, "parameters": {}, From 2c045633f4f3fdd1fa4290fcdebd1677e69aaaf7 Mon Sep 17 00:00:00 2001 From: David Rosmon <49154541+workpoint-dar@users.noreply.github.com> Date: Wed, 23 Sep 2020 02:39:09 +0200 Subject: [PATCH 087/347] Work point (#451) * Initial connector open sourcing * Add to CODEOWNERS * Remove from CODEOWNERS * New entity actions added - Entity_Create - Entity_Update - Entity_ChangeStage - Entity_GetEntityFieldSchema --- .../WorkPoint/apiDefinition.swagger.json | 343 ++++++++++++++++++ 1 file changed, 343 insertions(+) diff --git a/certified-connectors/WorkPoint/apiDefinition.swagger.json b/certified-connectors/WorkPoint/apiDefinition.swagger.json index 7130d0636..5f4c1f77c 100644 --- a/certified-connectors/WorkPoint/apiDefinition.swagger.json +++ b/certified-connectors/WorkPoint/apiDefinition.swagger.json @@ -2327,6 +2327,349 @@ } } } + }, + "/api/Entity/{businessModuleId}/GetEntityFieldSchema": { + "get": { + "tags": [ + "Entity" + ], + "summary": "Get field schema used for other entity actions in the WorkPoint Connector", + "description": "Get field schema used for other entity actions in the WorkPoint Connector", + "operationId": "Entity_GetEntityFieldSchema", + "x-ms-visibility": "internal", + "consumes": [], + "produces": [ + "application/json", + "text/json" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "businessModuleId", + "in": "path", + "description": "Business Module Id", + "required": true, + "type": "string", + "format": "uuid" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + } + } + }, + "/api/Entity/{businessModuleId}/ChangeStage/{entityId}/{stageId}/{overrideConstraints}/{overrideRequiredFields}": { + "post": { + "tags": [ + "ListItem" + ], + "operationId": "Entity_ChangeStage", + "consumes": [ + "application/json", + "text/plain" + ], + "description": "Changes the stage for an entity and set field values", + "x-ms-visibility": "important", + "summary": "Changes the stage for an entity and set field values", + "produces": [ + "application/json", + "text/plain" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "businessModuleId", + "in": "path", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Business module id", + "description": "The id of the business module", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + { + "name": "entityId", + "x-ms-summary": "The id of the entity", + "in": "path", + "description": "Entity Id", + "required": true, + "type": "integer" + }, + { + "name": "stageId", + "required": true, + "type": "string", + "x-ms-summary": "Stage id", + "description": "The id for the content type (stage) to change to", + "in": "path" + }, + { + "name": "overrideConstraints", + "required": true, + "in": "path", + "enum": [ + "NoOverride", + "OverrideWarnings", + "OverrideErrors", + "OverrideWarningsAndErrors" + ], + "type": "string", + "x-ms-summary": "Stage contraints behaviour", + "description": "Stage contraints behaviour", + "x-ms-visibility": "important" + }, + { + "name": "overrideRequiredFields", + "in": "path", + "required": true, + "type": "boolean", + "x-ms-summary": "Override required fields", + "description": "If true, it is accepted that required fields does not have a value", + "x-ms-visibility": "important" + }, + { + "name": "data", + "in": "body", + "description": "Dynamic Schema of items in selected list", + "required": true, + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "Entity_GetEntityFieldSchema", + "value-path": "jsonItems", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + }, + "businessModuleId": { + "parameter": "businessModuleId" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "boolean", + "description": "Stage was changed", + "title": "StageChanged", + "x-ms-visibility": "important" + } + } + } + } + }, + "/api/Entity/{businessModuleId}/Create/{createSite}": { + "post": { + "tags": [ + "Entity" + ], + "summary": "Create business module entity in WorkPoint", + "description": "Create business module entity in WorkPoint", + "operationId": "Entity_Create", + "consumes": [ + "application/json", + "text/json" + ], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "businessModuleId", + "in": "path", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Business module id", + "description": "The id of the business module", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + { + "name": "createSite", + "x-ms-summary": "Create site", + "in": "path", + "description": "Create site", + "required": true, + "type": "boolean" + }, + { + "name": "data", + "in": "body", + "description": "Dynamic Schema of items in selected list", + "required": true, + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "Entity_GetEntityFieldSchema", + "value-path": "jsonItems", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + }, + "businessModuleId": { + "parameter": "businessModuleId" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "int32", + "type": "integer" + } + } + } + } + }, + "/api/Entity/{businessModuleId}/Update/{entityId}": { + "post": { + "tags": [ + "Entity" + ], + "summary": "Update business module entity in WorkPoint", + "description": "Update business module entity in WorkPoint", + "operationId": "Entity_Update", + "consumes": [ + "application/json", + "text/json" + ], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [ + { + "name": "WorkPoint365Url", + "in": "header", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "WorkPoint365 URL", + "description": "SharePoint site with WorkPoint365 installed" + }, + { + "name": "businessModuleId", + "in": "path", + "required": true, + "type": "string", + "format": "uuid", + "x-ms-url-encoding": "single", + "x-ms-summary": "Business module id", + "description": "The id of the business module", + "x-ms-dynamic-values": { + "operationId": "BusinessModules_Get", + "value-path": "Id", + "value-title": "Title", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + } + } + } + }, + { + "name": "entityId", + "x-ms-summary": "The id of the entity", + "in": "path", + "description": "Entity Id", + "required": true, + "type": "integer" + }, + { + "name": "data", + "in": "body", + "description": "Dynamic Schema of items in selected list", + "required": true, + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "Entity_GetEntityFieldSchema", + "value-path": "jsonItems", + "parameters": { + "WorkPoint365Url": { + "parameter": "WorkPoint365Url" + }, + "businessModuleId": { + "parameter": "businessModuleId" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "format": "int32", + "type": "integer" + } + } + } + } } }, "produces": [ From cb2468dba84451b86c882726898aabbc91519a84 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Wed, 23 Sep 2020 12:43:50 +0200 Subject: [PATCH 088/347] Update apiDefinition.swagger.json --- .../tyntec-Viber/apiDefinition.swagger.json | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json index 9ad9e3732..7eb17585c 100644 --- a/certified-connectors/tyntec-Viber/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-Viber/apiDefinition.swagger.json @@ -33,15 +33,6 @@ } } } - }, - "400": { - "description": "There was an issue with your channel." - }, - "401": { - "description": "The Viber Service ID or WhatsApp Business Account Number is not authorized with used API key." - }, - "403" :{ - "description":"You attempting to use a number that is not assigned to your account" } }, "summary": "Send Viber Message", @@ -152,12 +143,6 @@ } } } - }, - "404":{ - "description": "No message was found on given ID" - }, - "403":{ - "description": "Invalid authentication credentials" } }, "summary": "Status Check", From b868814c89cbb17e9506b2aaf67c608a3c2e67a8 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Wed, 23 Sep 2020 20:40:12 +0200 Subject: [PATCH 089/347] Update apiDefinition.swagger.json (#470) --- .../tyntec-WA/apiDefinition.swagger.json | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/certified-connectors/tyntec-WA/apiDefinition.swagger.json b/certified-connectors/tyntec-WA/apiDefinition.swagger.json index 04333883f..bfc3b43e8 100644 --- a/certified-connectors/tyntec-WA/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-WA/apiDefinition.swagger.json @@ -48,12 +48,6 @@ } } } - }, - "404":{ - "description": "No message was found on given ID" - }, - "403":{ - "description": "Invalid authentication credentials" } }, "summary": "Status Check", @@ -87,15 +81,6 @@ } } } - }, - "400": { - "description": "There was an issue with your channel." - }, - "401": { - "description": "The Viber Service ID or WhatsApp Business Account Number is not authorized with used API key." - }, - "403":{ - "description": "You attempting to use a number that is not assigned to your account" } }, "summary": "Send WhatsApp Template message", From f10cc2c8d06c345896c9d011dd8820808f8ba111 Mon Sep 17 00:00:00 2001 From: Martin <45198686+ridlees@users.noreply.github.com> Date: Wed, 23 Sep 2020 20:40:43 +0200 Subject: [PATCH 090/347] Updated Responses (#468) --- .../tyntec-SMS/apiDefinition.swagger.json | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/certified-connectors/tyntec-SMS/apiDefinition.swagger.json b/certified-connectors/tyntec-SMS/apiDefinition.swagger.json index f814dfe75..7ec5f4279 100644 --- a/certified-connectors/tyntec-SMS/apiDefinition.swagger.json +++ b/certified-connectors/tyntec-SMS/apiDefinition.swagger.json @@ -35,15 +35,6 @@ } } } - }, - "400": { - "description": "There was an issue with your channel." - }, - "401": { - "description": "The Viber Service ID or WhatsApp Business Account Number is not authorized with used API key." - }, - "403": { - "description": "You attempting to use a number that is not assigned to your account" } }, "summary": "Send a custom SMS", @@ -142,12 +133,6 @@ } } } - }, - "404":{ - "description": "No message was found on given ID" - }, - "403":{ - "description": "Invalid authentication credentials" } }, "summary": "Status Check", @@ -194,4 +179,4 @@ } ] -} \ No newline at end of file +} From 02048de83265f80dc02a885da8af47e98daa5925 Mon Sep 17 00:00:00 2001 From: Andreas Date: Thu, 24 Sep 2020 14:16:00 +0200 Subject: [PATCH 091/347] Updated readme --- certified-connectors/Peltarion/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/certified-connectors/Peltarion/README.md b/certified-connectors/Peltarion/README.md index 7497a7527..e652a59ea 100644 --- a/certified-connectors/Peltarion/README.md +++ b/certified-connectors/Peltarion/README.md @@ -13,24 +13,24 @@ See below for some of the things you can build. 1. Sign up for free on the Peltarion Platform ([link](https://bit.ly/3llPmTf)) 1. Build and train your AI model on the Peltarion platform -1. Add the Peltarion plugin to your app -1. Connect the Peltarion action to your workflow +1. Add the Peltarion connector to your app. Enter the URL and token for your build model (see image below) The connector only support one operation, called *callapi*. To use the connector and store the value into a variable *res*, you can call the API like this: ``` ClearCollect(dd, { : TextInput1.Text}); -Set(jdata,JSON(dd,JSONFormat.IncludeBinaryData)); -Set(res, PeltarionConnector.callapi("https://a.gcp-eu-west-1.platform.peltarion.com/deployment//forward","",jdata)) +Set(jdata, JSON(dd, JSONFormat.IncludeBinaryData)); +Set(res, PeltarionConnector.callapi(jdata)) ``` The *res* is an object with three values: -- *key* is the name of the predicted class. For regression problems, the *key* is always "value" +- *key* is the name of the predicted class. For regression problems, the *key* is always "value" - *val* is the probability of the class - *errorMessage* holds the error message, if any Your URL, token and input name is found on the Deployment view on the Peltarion Platform. See screenshot below. + ![URL, token and input](screenshot.png) For information on how to build and train an AI model on the Peltarion platform, visit our knowledge center (link: https://bit.ly/3gC6XCN) From b927aa94d368f3759d8ee7c7db450c11031e2d79 Mon Sep 17 00:00:00 2001 From: Philippe Marzouk Date: Fri, 25 Sep 2020 17:18:45 +0200 Subject: [PATCH 092/347] add the Connective eSignatures Connector --- .../Connective eSignatures/Readme.md | 44 + .../apiDefinition.swagger.json | 1890 +++++++++++++++++ .../Connective eSignatures/apiProperties.json | 36 + 3 files changed, 1970 insertions(+) create mode 100644 certified-connectors/Connective eSignatures/Readme.md create mode 100644 certified-connectors/Connective eSignatures/apiDefinition.swagger.json create mode 100644 certified-connectors/Connective eSignatures/apiProperties.json diff --git a/certified-connectors/Connective eSignatures/Readme.md b/certified-connectors/Connective eSignatures/Readme.md new file mode 100644 index 000000000..631aa0318 --- /dev/null +++ b/certified-connectors/Connective eSignatures/Readme.md @@ -0,0 +1,44 @@ +## Connective eSignatures Connector + +Connective, a specialist in digital signatures, identity services, and smart document generation, has made the Connective eSignatures Connector for Power Automate available for usage. The Connector allows companies to forward documents that require a digital signature directly from their favorite Microsoft 365 applications – from Microsoft Teams to Word, SharePoint, Dynamics, OneDrive, and many others. + +## Prerequisites + +To start making use of the connector, reach out to your Relationship manager at Connective or go to our [contact page](https://connective.eu/contact/) on our website to receive the credentials. + +This page will further detail the different actions available, as well as provide insight on the different ways these actions can be implemented. + +## Documentation + +Don't hesitate to have a look at our [documentation website](https://documentation.connective.eu/) for further information or reach out to the support team through or [support contact form](https://connective.eu/contact-support/) or support mailbox: service@connective.eu + +A [glossary](https://documentation.connective.eu/en-us/eSignaturesGlossary/Glossary.html) is available to explain the different terms being used within this documentation + +## Supported Operations + +The Connective eSignatures connector is based on API v3 of eSignatures. The eSignatures API is a REST API that allows external applications to integrate with and use the features listed in this document to create and manage signing flows. + +The available actions can be grouped into different groups + +| Action Group | Available Actions | +| ----------------------------------- | ------------------------------------------------------------ | +| Uploading documents | [Create Package](https://documentation.connective.eu/en-us/eSignatures5.5/api/CreatePackage.html) | +| | [Add Document to Package](https://documentation.connective.eu/en-us/eSignatures5.5/api/DocToPackage.html) | +| | [Get Signing Locations](https://documentation.connective.eu/en-us/eSignatures5.5/api/GetSigningLocations.html) | +| | [Set Process Information](https://documentation.connective.eu/en-us/eSignatures5.5/api/SetProcessInformationV3.1.html) | +| | [Set Package Status](https://documentation.connective.eu/en-us/eSignatures5.5/api/SetPackageStatus.html) | +| | [Create Instant Package](https://documentation.connective.eu/en-us/eSignatures5.5/api/InstantPackageCreation.html) | +| Retrieving the status of a document | [Get Package Status](https://documentation.connective.eu/en-us/eSignatures5.5/api/GetPackageStatus.html) | +| | [Get Package List](https://documentation.connective.eu/en-us/eSignatures5.5/api/Packagelist.html) | +| Miscellaneous actions | [Skip Signers](https://documentation.connective.eu/en-us/eSignatures5.5/api/SkipSigners.html) | +| | [Download Package](https://documentation.connective.eu/en-us/eSignatures5.5/api/DownloadPackage.html) | +| | [Package Expiry Extension](https://documentation.connective.eu/en-us/eSignatures5.5/api/PackageExpiryExtension.html) | +| | [Send Package Reminder](https://documentation.connective.eu/en-us/eSignatures5.5/api/SendPackageReminders.html) | +| | [Delete Package](https://documentation.connective.eu/en-us/eSignatures5.5/api/SendPackageReminders.html) | +| Retrieving Audit Proof | [Retrieve Package Audit Proofs](https://documentation.connective.eu/en-us/eSignatures5.5/api/RetrieveAuditProofs.html) | +| | [Retrieve Document Audit Proofs](https://documentation.connective.eu/en-us/eSignatures5.5/api/RetrieveAuditProofs.html) | +| | [Retrieve Package Audit Proofs with Correlation ID](https://documentation.connective.eu/en-us/eSignatures5.5/api/RetrievePackageCorrelation.html) | +| | [Retrieve Document Audit Proofs with Correlation ID](https://documentation.connective.eu/en-us/eSignatures5.5/api/RetrievePackageCorrelation.html) | +| | [Add Proof from an External Source](https://documentation.connective.eu/en-us/eSignatures5.5/api/AddProoffromexternalsource.html) | + + diff --git a/certified-connectors/Connective eSignatures/apiDefinition.swagger.json b/certified-connectors/Connective eSignatures/apiDefinition.swagger.json new file mode 100644 index 000000000..0207389c4 --- /dev/null +++ b/certified-connectors/Connective eSignatures/apiDefinition.swagger.json @@ -0,0 +1,1890 @@ +{ + "swagger": "2.0", + "info": { + "description": "Connective eSignatures is a renowned digital signature solution offering a vast amount of signature methods & compliance to the most stringent (inter)national regulations. eSignatures allows you to transform any paper-based process into an end-to-end digital flow with an unparalleled user experience. Streamline the signing process exactly how you want it to and send, sign & track all types of documents directly from your favorite business applications. Join more than 500 satisfied customers.", + "version": "0.1", + "title": "Connective eSignatures", + "contact": { + "name": "Connective Support", + "url": "https://connective.eu/contact-support/", + "email": "service@connective.eu" + } + }, + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "host": "esignatures.connective.eu", + "basePath": "/webportalapi/v3", + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "definitions": { + "Package": { + "type": "object", + "properties": { + "Id": { + "type": "string" + }, + "PackageStatus": { + "type": "string" + }, + "ExternalPackageReference": { + "type": "string" + } + } + }, + "SigningType": { + "type": "object", + "properties": { + "SigningType": { + "type": "string", + "description": "The signing type used in this actor's session." + }, + "CommitmentTypes": { + "description": "One or more OIDs of commitment types. Can only be passed when signature policy is used.", + "type": "array", + "items": { + "type": "string" + } + }, + "MandatedSignerValidation": { + "type": "string", + "description": "Type of validation to execute during eID other smart card, or itsme signing session." + }, + "MandatedSignerIds": { + "description": "Defines which eID or other smart cards are allowed to sign during this session.", + "type": "array", + "items": { + "type": "string" + } + }, + "SignaturePolicyId": { + "type": "string", + "description": "Signing policy details for the signature." + } + } + }, + "SigningField": { + "type": "object", + "properties": { + "PageNumber": { + "type": "integer", + "description": "Number of the page on which to add a signing location" + }, + "Width": { + "type": "string", + "description": "Width" + }, + "Height": { + "type": "string", + "description": "Height" + }, + "Left": { + "type": "string", + "description": "Position from the left of the page" + }, + "Top": { + "type": "string", + "description": "Position from top of the page" + }, + "MarkerOrFieldId": { + "type": "string", + "description": "Unique reference to a signing field, text marker or textfield." + } + } + }, + "Request.Actor": { + "description": "This object gives information about what the stakeholder must do.", + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "Signer / Receiver" + }, + "OrderIndex": { + "type": "integer", + "format": "int32", + "description": "This number specifies in which order actors need to execute their action." + }, + "SigningFields": { + "description": "Define the locations where this actor should sign", + "type": "array", + "items": { + "$ref": "#/definitions/SigningField" + } + }, + "SigningTypes": { + "description": "One or more signing type info objects.", + "type": "array", + "items": { + "$ref": "#/definitions/SigningType" + } + }, + "Phonenumber": { + "type": "string", + "description": "Phone number to receive an SMS OTP." + }, + "RedirectUrl": { + "type": "string", + "description": "Url to which the end user is redirected after signing." + }, + "SendNotifications": { + "type": "boolean", + "description": "eSignatures can send e-mails to all the people who are allowed to sign." + }, + "UserRoles": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Role or function of the signer." + }, + "LegalNoticeCode": { + "type": "string", + "description": "Legal Notice" + }, + "LegalNoticeText": { + "type": "string", + "description": "Custom legal notice text in case none of the three predefined legal notices apply. " + } + } + }, + "Stakeholder": { + "description": "Information about the people who are involved in the process.", + "type": "object", + "properties": { + "Actors": { + "type": "array", + "items": { + "$ref": "#/definitions/Request.Actor" + } + }, + "EmailAddress": { + "type": "string", + "description": "EmailAddress" + }, + "FirstName": { + "type": "string", + "description": "FirstName" + }, + "LastName": { + "type": "string", + "description": "LastName" + }, + "BirthDate": { + "type": "string", + "description": "BirthDate" + }, + "Language": { + "type": "string", + "description": "Language" + }, + "ExternalStakeholderReference": { + "type": "string", + "description": "ExternalStakeholderReference" + } + } + }, + "ErrorHandlingResponse": { + "description": "The eSignatures API v3 uses HTTP error codes to give a rough idea of whether a call succeeded or failed, and a system of error codes in the response body to give more information incase things went wrong.", + "type": "object", + "properties": { + "ErrorCode": { + "type": "string", + "description": "Error code with variable information." + }, + "Message": { + "type": "string", + "description": "Error message detail text, not localized" + } + } + }, + "PackageDocument": { + "type": "object", + "description": "Details for each of the documents in the package", + "properties": { + "DocumentId": { + "type": "string", + "description": "Unique id of the document" + }, + "ExternalDocumentReference": { + "type": "string", + "description": "Returns the external reference of this document as it was passed in through the Add document to package call." + }, + "DocumentName": { + "type": "string", + "description": "Name of the document" + }, + "DocumentType": { + "type": "string", + "description": "Type of document within the package." + } + } + }, + "PackageStatus": { + "description": "Description for the Package shown to the eSignatures Portal user as file name.", + "type": "object", + "properties": { + "PackageName": { + "type": "string", + "description": "Description for the Package shown to the eSignatures Portal user as file name." + }, + "CreationTimestamp": { + "type": "string", + "description": "Date and time when the package was created according to the server." + }, + "Initiator": { + "type": "string", + "description": "Initiator field of the package as it was passed in at creation time." + }, + "ExpiryTimestamp": { + "type": "string", + "description": "UTC formatted time at which the document expires. Can be null." + }, + "ExternalPackageReference": { + "type": "string", + "description": "Returns the external reference id of the package as it was passed in at creation time." + }, + "F2FSigningUrl": { + "type": "string", + "description": "Link to the package which allows to pick from all the signing session at once." + }, + "PackageStatus": { + "type": "string", + "description": "Status of the package as a whole:" + }, + "PackageDocuments": { + "type": "array", + "description": "Details for each of the documents in the package.", + "items": { + "$ref": "#/definitions/PackageDocument" + } + }, + "Stakeholders": { + "type": "array", + "description": "Details for each of the persons which will interact with the package.", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "description": "Type of stakeholder: Person, PersonGroup, or ContactGroup." + }, + "PersonGroupName": { + "type": "string", + "description": "Name of the person group. Only returned if Type was set to PersonGroup in the request." + }, + "ContactGroupCode": { + "type": "string", + "description": "Code of the contact group. Only returned if Type was set to ContactGroup in the request." + }, + "EmailAddress": { + "type": "string", + "description": "Email address of the signer." + }, + "ExternalStakeholderReference": { + "type": "string", + "description": "External reference identifying this person in the external system." + }, + "StakeholderId": { + "type": "string", + "description": "Unique id." + }, + "Actors": { + "type": "array", + "description": "Details of all steps to take.", + "items": { + "type": "object", + "properties": { + "ActorId": { + "type": "string", + "description": "Unique id for this combination of action, stakeholder and document." + }, + "ActionUrl": { + "type": "string", + "description": "URL that this person can open to interact with the package." + }, + "ActionUrls": { + "type": "array", + "description": "Array of URLs that the different persons of the PersonGroup or ContactGroup can open to interact with the package.", + "items": { + "description": "Array of URLs that the different persons can open to interact with the package.", + "type": "object", + "properties": { + "EmailAddress": { + "type": "string", + "description": "Email address of the person." + }, + "Url": { + "type": "string", + "description": "URL that this person can open to interact with the package." + } + } + } + }, + "ActorStatus": { + "type": "string", + "description": "Draft (package has status Draft)" + }, + "Type": { + "type": "string", + "description": "Signer / Receiver" + }, + "CompletedBy": { + "type": "string", + "description": "The name of the end user who completed the action. " + }, + "CompletedTimestamp": { + "type": "string", + "description": "Timestamp of the moment on which this action was completed." + }, + "Reason": { + "type": "string", + "description": "Returns the text entered by the person who changed the status of a package to a final state (e.g. a reject)." + }, + "Locations": { + "type": "array", + "description": "Represents a possible location for a signature.", + "items": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "Unique id for this location " + }, + "UsedSigningType": { + "type": "string", + "description": "Returns the signing type that was used to sign the document." + } + } + } + } + } + } + } + } + } + } + }, + "example": { + "PackageName": "package-docu1.pdf", + "Initiator": "signer@gmail.com", + "ExpiryTimestamp": null, + "ExternalPackageReference": "reference", + "F2FSigningUrl": "http://myserver/signinit?packageSignId=6bc402eb-6cbd-423a-bf00-1157e8d68f37&f2f=True", + "PackageStatus": "Pending", + "PackageDocuments": [ + { + "DocumentId": "dc2691d8-e3c0-470b-9715-e55b489ea493", + "DocumentType": "application/pdf", + "ExternalDocumentReference": null, + "DocumentName": "docu1" + } + ], + "Stakeholders": [ + { + "Type": "PersonGroup", + "EmailAddress": null, + "ContactGroupCode": null, + "ExternalStakeholderReference": "stakeref", + "StakeholderId": "6b2cda0c-ab81-4984-9e16-159fe20d983f", + "Actors": [ + { + "Type": "Signer", + "Reason": null, + "CompletedBy": null, + "CompletedTimestamp": null, + "Locations": [ + { + "Id": "24ab070a-29e4-496e-9b79-e66c0edcced7", + "UsedSigningType": null + } + ], + "ActorId": "2806f94d-2a45-4168-8667-cbd4ce4ce090", + "ActionUrl": null, + "ActionUrls": [ + { + "EmailAddress": "john.smith@mail.com", + "Url": "https://MyURL.com" + }, + { + "EmailAddress": "jane.jefferson@mail.com", + "Url": "https://HerURL.com" + } + ], + "ActorStatus": "Available" + }, + { + "Type": "Receiver", + "ActorId": "e3da1877-fac9-43c4-9949-bacef76718fa", + "ActionUrl": null, + "ActionUrls": [], + "ActorStatus": "asd" + } + ], + "PersonGroupName": "APIGroup" + }, + { + "Type": "Person", + "EmailAddress": "signer@gmail.com", + "ContactGroupCode": null, + "ExternalStakeholderReference": "3", + "StakeholderId": "490e242f-43c4-4bc0-a1b4-e2d67dc1fdac", + "Actors": { + "Type": "Receiver", + "ActorId": "0903c863-9197-4abf-93f4-694fddde9d99", + "ActionUrl": null, + "ActionUrls": [], + "ActorStatus": "" + }, + "PersonGroupName": null + } + ], + "CreationTimestamp": "2019-10-23T13:34:12Z" + } + }, + "Content": { + "type": "object", + "xml": { + "prefix": "xs" + }, + "properties": { + "uploads": { + "type": "array", + "minimum": 0, + "items": { + "type": "object", + "properties": { + "upload": { + "type": "array", + "minimum": 1, + "items": { + "type": "object", + "properties": { + "start": { + "type": "string", + "format": "date-time" + }, + "end": { + "type": "string", + "format": "date-time" + }, + "signatures": { + "type": "array", + "minimum": 1, + "items": { + "type": "object", + "properties": { + "proofs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "proof": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "index": { + "type": "boolean" + }, + "ipAddress": { + "type": "string", + "xml": { + "attribute": true + } + } + } + } + } + } + }, + "locationId": { + "type": "string", + "xml": { + "attribute": true + } + } + } + } + } + } + } + }, + "indexes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "object", + "properties": { + "identifier": { + "type": "boolean" + }, + "content": { + "type": "string" + } + } + } + } + } + }, + "packageCorrelationId": { + "type": "string", + "xml": { + "attribute": true + } + }, + "packageId": { + "type": "string", + "xml": { + "attribute": true + } + } + } + } + } + } + } + }, + "paths": { + "/packages/instant": { + "post": { + "summary": "Create Instant Package", + "description": "This call creates a package with a single document in it and instantly prepares it for signing", + "operationId": "CreateInstantPackage", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "Document": { + "type": "string", + "description": "Attached document in base64 encoded format. Required unless Multipart format is used.", + "default": "", + "format":"byte" + }, + "DocumentLanguage": { + "type": "string", + "enum": [ + "en", + "nl", + "de", + "fr", + "es" + ], + "description": "Language to use in signature texts. Currently supported: en, nl, de, fr, es.", + "example": "en" + }, + "DocumentName": { + "type": "string", + "description": "Name of the document and package to be shown in the eSignatures Portal." + }, + "ExternalPackageData": { + "type": "string", + "description": "ExternalPackageData" + }, + "Initiator": { + "type": "string", + "description": "Email address of a registered user" + }, + "Stakeholders": { + "type": "array", + "description": "Information about the people who are involved in the process.", + "items": { + "$ref": "#/definitions/Stakeholder" + } + }, + "CallBackUrl": { + "type": "string", + "description": "REST API URL that will be called each time an action has been completed for this package" + }, + "CorrelationId": { + "type": "string", + "description": "Id that indicates which packages or documents are correlated" + }, + "DocumentGroupCode": { + "type": "string", + "description": "The \u2018Code\u2019 which identifies a document group in which the document should be shown", + "default": "\"00001\"" + }, + "ThemeCode": { + "type": "string", + "description": "Theme that must be applied to the package" + }, + "DownloadUnsignedFiles": { + "type": "boolean", + "description": "This parameter determines whether packages can be downloaded from the WYSIWYS before signing" + }, + "ExpiryTimestamp": { + "type": "string", + "description": "Reference given by the calling application. This parameter will not be used by the eSignatures Portal" + }, + "ExternalDocumentReference": { + "type": "string", + "description": "Reference given by the calling application, this parameter will not be used by the eSignatures Portal" + }, + "ExternalPackageReference": { + "type": "string", + "description": "Reference given by the calling application, this parameter will not be used by the eSignatures Portal" + }, + "F2FRedirectUrl": { + "type": "string", + "description": "Url to which the end user is redirected after all fields have been signed with \u2018face to face\u2019 signing, or when all fields have been rejected." + }, + "NotificationCallBackUrl": { + "type": "string", + "description": "REST API URL that will be called when an end user requests to be notified. If no URL is supplied no call back is performed" + }, + "PdfErrorHandling": { + "type": "string", + "description": "How to deal with PDFs containing minor flaws" + }, + "Representation": { + "type": "string", + "description": "Attached representation document in base64 format" + }, + "RepresentationType": { + "type": "string", + "description": "Type of the representation document, must be present when Representation is filled. Only \u201capplication/pdf\u201d is supported." + }, + "SigningTemplateCode": { + "type": "string", + "description": "The template configured in the portal will provide all necessary information" + }, + "TargetType": { + "type": "string", + "description": "The TargetType defines if an extra conversion to PDF/A needs to be done before signing" + } + }, + "example": { + "PackageId": "3bb6a2d1-35db-4a3a-a434-868c01bcca9d", + "PackageName": "instant Package", + "Initiator": "john.smith@mail.com", + "ExpiryTimestamp": null, + "ExternalPackageReference": "reference", + "F2FSigningUrl": "https://yourFTFSignUrl", + "PackageStatus": "Pending", + "PackageDocuments": [ + { + "DocumentId": "97cfc102-70c2-4c17-9fb7-74b29360d53f", + "DocumentType": "application/pdf", + "ExternalDocumentReference": null, + "DocumentName": "instant package", + "Locations": [ + { + "Id": "e3ba68ac-e737-4e15-b61f-229034cf0797", + "Label": "d28d483a-824d-43c9-93d1-026117d8ebaf", + "PageNumber": 2 + } + ] + } + ], + "Stakeholders": [ + { + "Type": "Person", + "EmailAddress": "john.smith@mail.com", + "ContactGroupCode": null, + "ExternalStakeholderReference": "stakeref", + "StakeholderId": "7aa76f03-7981-44c1-8b91-598256edf260", + "Actors": [ + { + "Type": "Signer", + "Reason": null, + "CompletedBy": null, + "CompletedTimestamp": null, + "Locations": [ + { + "Id": "e3ba68ac-e737-4e15-b61f-229034cf0797", + "UserSigningType": null + } + ], + "ActorId": "db4a380f-fbd8-4bd7-b9e3-23507e986f66", + "ActionUrl": "https://ActionUrl", + "ActionUrls": [], + "ActorStatus": "Available" + } + ], + "PersonGroupName": null + } + ], + "CreationTimestamp": "2019-10-24T11:20:55Z", + "Warnings": [] + } + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "PackageId": { + "type": "string", + "description": "Unique identifier of the package." + }, + "CreationTimestamp": { + "type": "string", + "description": "Date and time when the package was created according to the server." + } + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages": { + "get": { + "summary": "Package List", + "description": "Get a list of packages with their current status", + "operationId": "PackageList", + "parameters": [ + { + "name": "ContinuationToken", + "in": "query", + "type": "string", + "required": false, + "description": "The continuation token / guid to know what page to return. MUST BE EMPTY or the token returned from a PREVIOUS call.", + "x-ms-summary": "The continuation token / guid to know what page to return." + }, + { + "name": "MaxQuantity", + "in": "query", + "type": "integer", + "format": "int32", + "required": false, + "description": "Gets or sets the maximum quantity.", + "x-ms-summary": "Gets or sets the maximum quantity." + }, + { + "name": "SortField", + "in": "query", + "type": "string", + "required": false, + "description": "Gets or sets the sort field.", + "x-ms-summary": "Gets or sets the sort field." + }, + { + "name": "SortOrder", + "default": "\"ASC\"", + "in": "query", + "type": "string", + "required": false, + "description": "Gets or sets the sort field.", + "x-ms-summary": "Gets or sets the sort field." + }, + { + "name": "CreatedBeforeDate", + "default": "{{$timestamp}}", + "in": "query", + "type": "string", + "required": false, + "description": "Gets or sets the created before date.", + "x-ms-summary": "Gets or sets the created before date." + }, + { + "name": "Status", + "in": "query", + "type": "string", + "required": false, + "description": "Gets or sets the status.", + "x-ms-summary": "Gets or sets the status." + }, + { + "name": "createdAfterDate", + "default": "{{eSigner - FutureDate}}", + "in": "query", + "type": "string", + "required": false, + "description": "Gets or sets the created after date.", + "x-ms-summary": "Gets or sets the created after date." + } + ], + "responses": { + "200": { + "description": "The packagelist gets returned successfully", + "schema": { + "type": "object", + "properties": { + "ContinuationToken": { + "type": "string", + "description": "ContinuationToken", + "example": "68036c7f-db6c-4dd0-bc1d-cb7337b2259f" + }, + "MaxQuantity": { + "type": "integer", + "format": "int32", + "description": "MaxQuantity", + "example": "2" + }, + "Total": { + "type": "integer", + "format": "int32", + "description": "Total", + "example": 21 + }, + "Items": { + "type": "array", + "items": { + "$ref": "#/definitions/Package" + } + } + }, + "example": { + "Id": "c3940cf6-fa80-441f-8971-55af6d00fb9d", + "PackageStatus": "DRAFT", + "ExternalPackageReference": "INVOICE-18-0048" + } + } + }, + "400": { + "description": "A request parameter was invalid." + } + }, + "x-ms-visibility": "advanced" + }, + "post": { + "summary": "Create Package", + "description": "This call creates an empty package, allowing documents to be added to it", + "operationId": "CreatePackage", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": " application/json", + "description": "Content-Type", + "x-ms-summary": "Content-Type" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "Initiator": { + "type": "string", + "description": "Email address of a registered user." + }, + "PackageName": { + "type": "string", + "description": "Package name, seen in the eSignatures Portal and when downloading as zip file." + }, + "CallBackUrl": { + "type": "string", + "description": "REST API URL that will be called each time an action has been completed for this package." + }, + "CorrelationId": { + "type": "string", + "description": "Id that indicates which packages are correlated." + }, + "DocumentGroupCode": { + "type": "string", + "description": "The \u2018Code\u2019 which identifies a document group in which the package should be shown." + }, + "ThemeCode": { + "type": "string", + "description": "Theme that must be applied to the package" + }, + "DownloadUnsignedFiles": { + "type": "boolean", + "description": "This parameter determines whether packages can be downloaded from the WYSIWYS before signing." + }, + "ExpiryTimestamp": { + "type": "string", + "description": "The date and time when this package expires and can no longer be signed." + }, + "ExternalPackageReference": { + "type": "string", + "description": "Reference given by the calling application. This parameter will not be used by the eSignatures Portal." + }, + "ExternalPackageData": { + "type": "string", + "description": "This field is reserved for future use. It can be used for customer-specific extensions to integrate with third-party services, such as Debit Card signing." + }, + "F2FRedirectUrl": { + "type": "string", + "description": "URL to which the end user is redirected after all fields have been signed with 'face to face' signing, or when all fields have been rejected." + }, + "NotificationCallBackUrl": { + "type": "string", + "description": "REST API URL that will be called when an end user requests to be notified." + } + }, + "example": { + "PackageName": "Contracts Mr. Doe", + "Initiator": "info@mail.com", + "DocumentGroupCode": "00001", + "ExternalPackageReference": "2019-CR-5891" + } + } + } + ], + "responses": { + "201": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "PackageId": { + "type": "string", + "description": "Unique identifier of the package." + }, + "CreationTimestamp": { + "type": "string", + "description": "Date and time when the package was created according to the server." + } + }, + "example": { + "PackageId": "25892e17-80f6-415f-9c65-7395632f0223", + "CreationTimestamp": "2019-02-28T14:05:11+00:00" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{PackageId}/documents": { + "post": { + "summary": "Add document to package", + "description": "This call will add a document to an existing package.", + "operationId": "AddDocumentToPackage", + "parameters": [ + { + "name": "PackageId", + "in": "path", + "type": "string", + "required": true, + "description": "Package Unique Id", + "x-ms-summary": "The package identifier." + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "Document": { + "type": "string", + "description": "Attached document in base64 encoded format." + }, + "DocumentLanguage": { + "type": "string", + "description": "Language to use in signature texts." + }, + "DocumentName": { + "type": "string", + "description": "Name of the document to be shown in the eSignatures Portal." + }, + "SigningFields": { + "type": "array", + "items": { + "$ref": "#/definitions/SigningField" + }, + "description": "One or more signing locations in the document." + }, + "CorrelationId": { + "type": "string", + "description": "Id that indicates which documents within this package are correlated with documents that have been signed in the past in other packages." + }, + "DocumentType": { + "type": "string", + "description": "Type of document that will be signed." + }, + "ExternalDocumentReference": { + "type": "string", + "description": "Reference given by the calling application." + }, + "PdfErrorHandling": { + "type": "array", + "items": { + "$ref": "#/definitions/ErrorHandlingResponse" + } + }, + "Representation": { + "type": "string", + "description": "Attached representation document in base64 format. This must be PDF data." + }, + "RepresentationType": { + "type": "string", + "description": "Type of the representation document." + }, + "TargetType": { + "type": "string", + "description": "The TargetType defines if an extra conversion to PDF/A needs to be done before signing." + } + }, + "example": { + "Document": "JVBERi....rest-of-the-document", + "DocumentName": "Invoice", + "DocumentLanguage": "nl", + "ExternalDocumentReference": "INV-2019-04-01-0038", + "SigningFields": [ + { + "PageNumber": 1, + "Width": "120", + "Height": "200", + "Left": "100", + "Top": "200", + "Label": "ThisIdentifiesJohnDoeHisSignatureLabel" + } + ] + } + } + } + ], + "responses": { + "200": { + "description": "The document was correctly added to the package. The response contains more information about the locations where a signer can place a signature.", + "schema": { + "type": "object", + "properties": { + "DocumentId": { + "type": "string", + "description": "Unique id for the document" + }, + "CreationTimestamp": { + "type": "string", + "description": "Date and time the flow was created. Format: YYYY-MM-DDThh:mm:ss+zz:zz" + }, + "Locations": { + "type": "array", + "description": "Represents a possible location for a signature", + "items": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "Unique id for this location" + }, + "Label": { + "type": "string", + "description": "Detected or specified label" + }, + "PageNumber": { + "type": "boolean", + "description": "The page on which the location was found." + } + } + } + } + }, + "example": { + "DocumentId": "e0cb4de4-673d-49fc-9bd1-7c81248984f9", + "CreationTimestamp": "2019-03-28T08:54:38+00:00", + "Locations": [ + { + "Id": "8a96613f-b6ed-4227-9bde-c20d3ee0c9d6", + "Label": "ThisIdentifiesJohnDoeHisSignatureLabel", + "PageNumber": 1 + } + ] + } + } + }, + "400": { + "description": "The request contained parameters which could not be accepted." + }, + "404": { + "description": "The package id could not be found in the database." + }, + "409": { + "description": "When certain document conversions are forbidden, when the input document has issues, or when marker ids are not matched." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{Id}/locations": { + "get": { + "summary": "Get Signing Locations", + "description": "This call provides an overview of all signing locations inside the documents within a package. ", + "operationId": "GetSigningLocations", + "parameters": [ + { + "name": "Id", + "in": "path", + "type": "string", + "required": true, + "description": "Id of the signing field", + "x-ms-summary": "Id of the signing field" + } + ], + "responses": { + "200": { + "description": "The signing locations from the package are returned successfully.", + "schema": { + "type": "object", + "properties": { + "Documents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "DocumentId": { + "type": "string", + "description": "Unique id for the document" + }, + "ExternalDocumentReference": { + "type": "string", + "description": "External reference for identification. Make sure to use a unique value." + }, + "Locations": { + "description": "Represents a possible location for a signature", + "type": "array", + "items": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "description": "Unique id for this location." + }, + "Label": { + "type": "string", + "description": "Value you entered as Request parameter." + }, + "PageNumber": { + "type": "integer", + "format": "int32", + "description": "Number of the page on which the signature can be found." + } + } + } + } + } + } + } + }, + "example": { + "Documents": [ + { + "DocumentId": "7c0af947-e3db-417a-900a-c25852be3d97", + "ExternalDocumentReference": "INV-2019-04-23-0037", + "Locations": [ + { + "Id": "ae554ac8-bacc-4e8a-81a1-46af780142ea", + "Label": "SIG01", + "PageNumber": 1 + } + ] + }, + { + "DocumentId": "176232c3-c97b-4b4a-91e3-c2f347c92e9f", + "ExternalDocumentReference": "INV-2019-04-23-0038", + "Locations": [ + { + "Id": "2dd4ed18-ce80-49a8-aa75-f177045b2488", + "Label": "SIG02", + "PageNumber": 1 + } + ] + } + ] + } + } + }, + "404": { + "description": "The package Id given does not exist." + }, + "409": { + "description": "The package with the specified id was made with an old version of the api." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{Id}/status": { + "get": { + "summary": "Get Package Status", + "description": "Retrieves the current state of the package and its documents.", + "operationId": "GetPackageStatus", + "parameters": [ + { + "name": "Id", + "in": "path", + "required": true, + "type": "string", + "description": "Unique id for the signing package", + "x-ms-summary": "Unique id for the signing package" + } + ], + "responses": { + "200": { + "description": "The package was returned successfully.", + "schema": { + "$ref": "#/definitions/PackageStatus" + } + }, + "404": { + "description": "The package with the specified id could not be found." + }, + "409": { + "description": "The package with the specified id was made with an old version of the api." + } + }, + "x-ms-visibility": "advanced" + }, + "put": { + "summary": "Set Package Status", + "description": "By means of the Set Package Status call, you can change the status of a package.", + "operationId": "SetPackageStatus", + "parameters": [ + { + "name": "Id", + "in": "path", + "type": "string", + "required": true, + "description": "Unique id for the signing package", + "x-ms-summary": "Unique id for the signing package" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "Status": { + "type": "string", + "description": "Pending / Revoked" + } + }, + "example": { + "Status": "Pending" + } + } + } + ], + "responses": { + "200": { + "description": "The package was successfully changed to the new status.", + "schema": { + "$ref": "#/definitions/PackageStatus" + } + }, + "400": { + "description": "When invalid parameters are passed." + }, + "404": { + "description": "When an unknown package id is passed." + }, + "409": { + "description": "When the package doesn't contain any documents or the status doesn't allow revocation." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{PackageId}/skipsigners": { + "post": { + "summary": "Skip Signers", + "description": "This call skips all signers that haven\u2019t signed yet and sets their status to \u201cSkipped\u201d, which results in the complete package being marked as \u201cFinished\u201d.", + "operationId": "SkipSigners", + "parameters": [ + { + "name": "PackageId", + "in": "path", + "type": "string", + "required": true, + "description": "Unique id of the Package", + "x-ms-summary": "Unique id of the Package" + } + ], + "responses": { + "200": { + "description": "All signers that hadn\u2019t signed yet were successfully skipped." + }, + "404": { + "description": "Package.NotFound:{packageId}" + }, + "409": { + "description": "Package.NotSigned:{packageId}" + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{id}/download": { + "get": { + "summary": "Download Package", + "description": "The package containing the signed documents can be downloaded by an external system using this call.", + "operationId": "DownloadPackage", + "parameters": [ + { + "name": "id", + "in": "path", + "type": "string", + "required": true, + "description": "Unique ID of the Package", + "x-ms-summary": "Unique ID of the Package" + } + ], + "responses": { + "200": { + "description": "The package gets downloaded successfully.", + "schema": { + "type": "string" + } + }, + "404": { + "description": "The package cannot be found." + }, + "409": { + "description": "The package hasn't been fully signed." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{id}/expirytimestamp": { + "put": { + "summary": "Expiry Time Stamp", + "description": "A package may have the status Expired when a package passed a value for the ExpiryTimestamp parameter in the Create Package call. Such a package can no longer be signed.", + "operationId": "ExpiryTimeStamp", + "parameters": [ + { + "name": "id", + "in": "path", + "type": "string", + "required": true, + "description": "Unique ID of the Package", + "x-ms-summary": "Unique ID of the Package" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "ExpiryTimestamp": { + "type": "string", + "format": "date-time" + } + } + }, + "required": true + } + ], + "responses": { + "200": { + "description": "The update package expiry timestamp was set." + }, + "400": { + "description": "The request contained parameters which could not be accepted." + }, + "409": { + "description": "When the status of the document does not allow to extend the expiration period." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{PackageId}/reminders": { + "post": { + "summary": "Send Package Reminders", + "description": "Company policy might require that a document is handled within a given timespan. Triggering the \u201csend reminders\u201d call will look up everybody who hasn\u2019t signed and send them an extra notification as a reminder.", + "operationId": "SendPackageReminders", + "parameters": [ + { + "name": "PackageId", + "in": "path", + "type": "string", + "required": true, + "description": "Unique ID of the Package", + "x-ms-summary": "Unique ID of the Package" + } + ], + "responses": { + "200": { + "description": "The reminders have been sent." + }, + "400": { + "description": "The package with the given id could not be found." + }, + "409": { + "description": "The package did not have status Pending." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{id}": { + "delete": { + "summary": "Delete Package", + "description": "eSignatures does not automatically delete packages from the database once they have reached a final state. They are stored indefinitely. To delete packages from the database, users can use the Delete Package call.", + "operationId": "DeletePackage", + "parameters": [ + { + "name": "id", + "in": "path", + "type": "string", + "required": true, + "description": "Unique ID of the Package", + "x-ms-summary": "Unique ID of the Package" + } + ], + "responses": { + "200": { + "description": "The package was deleted." + }, + "404": { + "description": "The package with the given id could not be found." + }, + "409": { + "description": "The package\u2019s status is still in a non-final state (e.g. Pending, Expired) so it can\u2019t be deleted yet." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{id}/process": { + "put": { + "summary": "Set Process Information", + "description": "This webservice method updates the people involved in the process (stakeholders) and assigns them steps which need to be taken.", + "operationId": "SetProcessInformation", + "parameters": [ + { + "name": "id", + "type": "string", + "in": "path", + "required": true, + "description": "Unique ID of the Package", + "x-ms-summary": "Unique ID of the Package" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "Stakeholders": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Actors": { + "type": "array", + "description": "Array with more information about what the stakeholder must do.", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "Signer", + "Receiver" + ], + "description": "Type" + }, + "OrderIndex": { + "type": "string", + "description": "This number specifies in which order actors need to execute their action." + }, + "LocationIds": { + "type": "array", + "description": "The location ids where a signature must be placed by this person.", + "items": { + "type": "string" + } + }, + "SigningTypes": { + "type": "array", + "description": "One or more signing type info objects.", + "items": { + "$ref": "#/definitions/SigningType" + } + }, + "Phonenumber": { + "type": "string", + "description": "Phone number to receive an SMS OTP." + }, + "RedirectURL": { + "type": "string", + "description": "Url to which the end user is redirected after signing, or rejecting. The redirect occurs immediately after signing or rejecting." + }, + "SendNotifications": { + "type": "boolean", + "description": "eSignatures can send e-mails to the actors whose action is required, such as signing" + }, + "UserRoles": { + "type": "array", + "description": "The location ids where a signature must be placed by this person.", + "items": { + "type": "string", + "enum": [ + "LEGALNOTICE1", + "LEGALNOTICE2", + "LEGALNOTICE3" + ] + } + }, + "LegalNoticeCode": { + "type": "string", + "description": "The 3 values will point to the 3 legal notices built into the application. These can be altered in the Configuration Index." + }, + "LegalNoticetext": { + "type": "string", + "description": "Custom legal notice text in case none of the three predefined legal notices apply" + } + } + } + }, + "EmailAddress": { + "type": "string", + "description": "Email Address" + }, + "FirstName": { + "type": "string", + "description": "First Name" + }, + "Language": { + "type": "string", + "description": "UI language of this stakeholder. Currently supported: en, nl, de, fr, es." + }, + "LastName": { + "type": "string", + "description": "Last Name" + }, + "BirthDate": { + "type": "string", + "description": "Date of birth in format: YYYY-MM-DD" + }, + "ExternalStakeholderReference": { + "type": "string", + "description": "Reference given by the calling application. This parameter will not be used by the eSignatures Portal." + } + } + } + } + }, + "example": { + "Stakeholders": [ + { + "FirstName": "John", + "LastName": "Doe", + "EmailAddress": "john.doe@example.org", + "Language": "en", + "BirthDate": "1972-09-24", + "ExternalStakeholderReference": "C0004105", + "Actors": [ + { + "Type": "Signer", + "OrderIndex": 1, + "LocationIds": [ + "68f35693-5530-4770-b8d8-76284719e524", + "c2e325a4-7b1d-42a6-8179-5377707d007c" + ], + "SigningTypes": [ + { + "SigningType": "BeId", + "MandatedSignerValidation": "MatchId", + "MandatedSignerIds": [ + "72092400465", + "72092630155" + ] + }, + { + "SigningType": "BeLawyer", + "MandatedSignerValidation": "MatchId", + "MandatedSignerIds": [ + "83fc726f-9e4a-486f-9d99-87c6604bde7d", + "7ab8594b-4cd0-4c7e-862e-3cc226622149" + ] + } + ], + "PhoneNumber": "+32477123456", + "UserRoles": [ + "Lawyer" + ], + "SendNotifications": true, + "RedirectUrl": "https://www.mycompany.com" + } + ] + } + ] + } + } + } + ], + "responses": { + "200": { + "description": "The process information has successfully been added to the package." + }, + "400": { + "description": "There are invalid parameters in the request." + }, + "404": { + "description": "When an unknown package id is passed." + }, + "409": { + "description": "Some parameters conflict with the data found in the database or configuration." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{packageId}/auditproof/download": { + "get": { + "consumes": [ + "application/xml" + ], + "produces": [ + "application/xml" + ], + "description": "A package\u2019s audit proofs xml can be retrieved when the package is fully signed. The same applies for a document: it only works when the containing package is fully signed.", + "summary": "Package Audit Proof", + "operationId": "PackageAuditProof", + "parameters": [ + { + "name": "packageId", + "type": "string", + "required": true, + "in": "path", + "description": "Unique ID of the Package", + "x-ms-summary": "Unique ID of the Package" + } + ], + "responses": { + "200": { + "description": "The Audit proofs xml is returned.", + "schema": { + "$ref": "#/definitions/Content" + } + }, + "404": { + "description": "Not Found The documentation/package id could not be found." + }, + "409": { + "description": "Conflict The package is not fully signed." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{packageId}/auditproof/download/{documentId}": { + "get": { + "consumes": [ + "application/xml" + ], + "produces": [ + "application/xml" + ], + "description": "A package\u2019s audit proofs xml can be retrieved when the package is fully signed. The same applies for a document: it only works when the containing package is fully signed.", + "summary": "Package Audit Proof with document ID", + "operationId": "PackageAuditProofDoc", + "parameters": [ + { + "name": "packageId", + "type": "string", + "required": true, + "in": "path", + "description": "Unique ID of the Package", + "x-ms-summary": "Unique ID of the Package" + }, + { + "name": "documentId", + "type": "string", + "required": true, + "in": "path", + "description": "Unique ID of the Document", + "x-ms-summary": "Unique ID of the Document" + } + ], + "responses": { + "200": { + "description": "The Audit proofs xml is returned.", + "schema": { + "$ref": "#/definitions/Content" + } + }, + "404": { + "description": "Not Found The documentation/package id could not be found." + }, + "409": { + "description": "Conflict The package is not fully signed." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packagecorrelations/{correlationId}/auditproof/download": { + "get": { + "produces": [ + "application/xml" + ], + "description": "Correlation ids are used to track packages or documents across several passes through the eSignatures application.", + "summary": "Package Correlation Audit Proof Download", + "operationId": "PackageCorrelationAuditProof", + "parameters": [ + { + "name": "correlationId", + "type": "string", + "required": true, + "in": "path", + "description": "The correlation identifier.", + "x-ms-summary": "The correlation identifier." + } + ], + "responses": { + "200": { + "description": "The Audit proofs xml is returned.", + "schema": { + "$ref": "#/definitions/Content" + } + }, + "404": { + "description": "Not Found The documentation/package id could not be found." + }, + "409": { + "description": "Conflict The package is not fully signed." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/documentcorrelations/{correlationId}/auditproof/download": { + "get": { + "produces": [ + "application/xml" + ], + "description": "Correlation ids are used to track packages or documents across several passes through the eSignatures application.", + "summary": "Document Correlation Audit Proof Download", + "operationId": "DocumentCorrelationAuditProof", + "parameters": [ + { + "name": "correlationId", + "type": "string", + "required": true, + "in": "path", + "description": "The correlation identifier.", + "x-ms-summary": "The correlation identifier." + } + ], + "responses": { + "200": { + "description": "The Audit proofs xml is returned.", + "schema": { + "$ref": "#/definitions/Content" + } + }, + "404": { + "description": "Not Found The documentation/package id could not be found." + }, + "409": { + "description": "Conflict The package is not fully signed." + } + }, + "x-ms-visibility": "advanced" + } + }, + "/packages/{packageId}/auditproof/proofs": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "description": "This call allows API users to add extra proofs from an external source to a location on a document.", + "summary": "Add Proof from External Source", + "operationId": "ProofExternalSource", + "parameters": [ + { + "name": "packageId", + "in": "path", + "required": true, + "type": "string", + "description": "The unique ID of the Package", + "x-ms-summary": "The unique ID of the Package" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "Content": { + "type": "string", + "description": "The actual content of the proof." + }, + "LocationId": { + "type": "string", + "description": "Location of the signature for which the proof content was generated." + }, + "Name": { + "type": "string", + "description": "Name of the proof." + }, + "Type": { + "type": "string", + "description": "A machine-readable \u201ctype\u201d key. Can be freely chosen." + }, + "Description": { + "type": "string", + "description": "Brief human-readable description of the proof." + }, + "IpAddress": { + "type": "string", + "description": "IP address of the end user of the external source for which the proof was added." + } + } + } + } + ], + "responses": { + "204": { + "description": "The proof was created for the requested location." + }, + "400": { + "description": "The request contained parameters which could not be accepted." + }, + "404": { + "description": "The documentId or the LocationId could not be found." + }, + "409": { + "description": "The proof could not be added due to some other reason." + } + }, + "x-ms-visibility": "advanced" + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.connective.eu" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://connective.eu/privacy-policy/" + }, + { + "propertyName": "Categories", + "propertyValue": "IT Operations;Productivity" + } + ], + "security": [ + { + "basic_auth": [] + } + ] +} \ No newline at end of file diff --git a/certified-connectors/Connective eSignatures/apiProperties.json b/certified-connectors/Connective eSignatures/apiProperties.json new file mode 100644 index 000000000..61dfdddd8 --- /dev/null +++ b/certified-connectors/Connective eSignatures/apiProperties.json @@ -0,0 +1,36 @@ +{ + "properties": { + "connectionParameters": { + "username": { + "type": "securestring", + "uiDefinition": { + "displayName": "API username", + "description": "API username to access the API", + "tooltip": "Please provide the API username", + "constraints": { + "tabIndex": 2, + "clearText": true, + "required": "true" + } + } + }, + "password": { + "type": "securestring", + "uiDefinition": { + "displayName": "API password", + "description": "API password to access the API", + "tooltip": "Please provide the API password", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#07155b", + "capabilities": [], + "publisher": "Connective", + "stackOwner": "Connective" + } +} \ No newline at end of file From 71ff4dac76cc74b5fc5e0488009d3e83492e9efa Mon Sep 17 00:00:00 2001 From: Sear Lin Date: Sat, 26 Sep 2020 04:34:39 +0800 Subject: [PATCH 093/347] Modify Connector description typos (#471) * add AvePoint Cloud Governance artifacts * Update Readme.md * Update apiDefinition.swagger.json * update swagger definition * update swagger definition * update swagger definition * update color * Update apiDefinition.swagger.json * Update iconBrandColor Co-authored-by: xlin --- .../AvePoint Cloud Governance/apiDefinition.swagger.json | 4 ++-- .../AvePoint Cloud Governance/apiProperties.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/certified-connectors/AvePoint Cloud Governance/apiDefinition.swagger.json b/certified-connectors/AvePoint Cloud Governance/apiDefinition.swagger.json index b55ba14c6..92c701ba3 100644 --- a/certified-connectors/AvePoint Cloud Governance/apiDefinition.swagger.json +++ b/certified-connectors/AvePoint Cloud Governance/apiDefinition.swagger.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "title": "AvePoint Cloud Governance", - "description": "Automate provisioning, management, and lifecycle for Teams, Groups, Communities, and Sites. Connect to AvePoint Cloud Governance to execute additional actions in Microsoft 365 such a creation of new content, add users, and update information in lists.", + "description": "Automate provisioning, management, and lifecycle for Teams, Groups, Communities, and Sites. Connect to AvePoint Cloud Governance to execute additional actions in Microsoft 365 such as creation of new content, add users, and update information in lists.", "contact": { "name": "AvePoint Support", "url": "http://www.avepoint.com/support", @@ -2856,4 +2856,4 @@ "propertyValue": "Productivity" } ] -} \ No newline at end of file +} diff --git a/certified-connectors/AvePoint Cloud Governance/apiProperties.json b/certified-connectors/AvePoint Cloud Governance/apiProperties.json index 19dca98ca..68cda9875 100644 --- a/certified-connectors/AvePoint Cloud Governance/apiProperties.json +++ b/certified-connectors/AvePoint Cloud Governance/apiProperties.json @@ -28,9 +28,9 @@ } } }, - "iconBrandColor": "#4D5966", + "iconBrandColor": "#EE3C2D", "capabilities": [], "publisher":"AvePoint, inc.", "stackOwner":"AvePoint, inc." } -} \ No newline at end of file +} From d5af13d5b9b0b7e9cb18ee42962cc217aed4b47f Mon Sep 17 00:00:00 2001 From: Cloudmersive <35204726+Cloudmersive@users.noreply.github.com> Date: Fri, 25 Sep 2020 20:45:13 -0700 Subject: [PATCH 094/347] Added Cloudmersive Currency Connector --- .../Cloudmersive Currency/Readme.md | 36 +++ .../apiDefinition.swagger.json | 255 ++++++++++++++++++ .../Cloudmersive Currency/apiProperties.json | 23 ++ 3 files changed, 314 insertions(+) create mode 100644 certified-connectors/Cloudmersive Currency/Readme.md create mode 100644 certified-connectors/Cloudmersive Currency/apiDefinition.swagger.json create mode 100644 certified-connectors/Cloudmersive Currency/apiProperties.json diff --git a/certified-connectors/Cloudmersive Currency/Readme.md b/certified-connectors/Cloudmersive Currency/Readme.md new file mode 100644 index 000000000..2c569888e --- /dev/null +++ b/certified-connectors/Cloudmersive Currency/Readme.md @@ -0,0 +1,36 @@ + +## Cloudmersive Video and Media +[Currency API](https://cloudmersive.com/currency-api) is critical for working with prices and currencies, enabling conversion between over 30 currencies, and retrieving the latest exchange rates. Cloudmersive Currency covers a wide array of finance and pricing needs. Stateless high-security processing ensures fast performance and strong security. + + +## Pre-requisites +N/A + + +## API documentation +[Currency API](https://api.cloudmersive.com/docs/currency.asp) is available on the Cloudmersive website + + +## Supported Operations + +### Get a list of available currencies and corresponding countries +Enumerates available currencies and the countries that correspond to these currencies. + +### Converts a price from the source currency into the destination currency +Automatically converts the price in the source currency into the destination currency using the latest available currency exchange rate data. + +### Gets the exchange rate from the source currency into the destination currency +Automatically gets the exchange rate from the source currency into the destination currency using the latest available currency exchange rate data. + +## How to get credentials +- [Register](https://account.cloudmersive.com/signup) for a Cloudmersive Account +- [Sign In](https://account.cloudmersive.com/login) with your Cloudmersive Account and click on API Keys + +Here you can create and see your API key(s) listed on the API Keys page. Simply copy and paste this API Key into the Cloudmersive Currency Connector. + +Now you are ready to start using the Cloudmersive Currency Connector. + + +## Deployment instructions +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as custom connector in Microsoft Power Automate and Power Apps + diff --git a/certified-connectors/Cloudmersive Currency/apiDefinition.swagger.json b/certified-connectors/Cloudmersive Currency/apiDefinition.swagger.json new file mode 100644 index 000000000..055ca2ba3 --- /dev/null +++ b/certified-connectors/Cloudmersive Currency/apiDefinition.swagger.json @@ -0,0 +1,255 @@ +{ + "swagger": "2.0", + "info": { + "version": "v1", + "title": "Cloudmersive Currency", + "description": "The currency APIs help you retrieve exchange rates and convert prices between currencies easily.", + "contact": { + "name": "Cloumdersive Support", + "url": "https://account.cloudmersive.com/contact-support", + "email": "support@cloudmersive.com" + } + }, + "host": "api.cloudmersive.com", + "schemes": [ + "https" + ], + "paths": { + "/currency/exchange-rates/list-available": { + "post": { + "tags": [ + "CurrencyExchange" + ], + "summary": "Get a list of available currencies and corresponding countries", + "description": "Enumerates available currencies and the countries that correspond to these currencies.", + "operationId": "CurrencyExchange_GetAvailableCurrencies", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/AvailableCurrencyResponse" + } + } + }, + "security": [{ + "Apikey": [] + }] + } + }, + "/currency/exchange-rates/convert/{source}/to/{destination}": { + "post": { + "tags": [ + "CurrencyExchange" + ], + "summary": "Converts a price from the source currency into the destination currency", + "description": "Automatically converts the price in the source currency into the destination currency using the latest available currency exchange rate data.", + "operationId": "CurrencyExchange_ConvertCurrency", + "consumes": [ + "application/json", + "text/json" + ], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [{ + "name": "source", + "in": "path", + "description": "Source currency three-digit code (ISO 4217), e.g. USD, EUR, etc.", + "required": true, + "type": "string", + "x-ms-summary": "Source currency three-digit code (ISO 4217), e.g. USD, EUR, etc." + }, + { + "name": "destination", + "in": "path", + "description": "Destination currency three-digit code (ISO 4217), e.g. USD, EUR, etc.", + "required": true, + "type": "string", + "x-ms-summary": "Destination currency three-digit code (ISO 4217), e.g. USD, EUR, etc." + }, + { + "name": "sourcePrice", + "in": "body", + "description": "Input price, such as 19.99 in source currency", + "required": true, + "schema": { + "format": "double", + "type": "number" + }, + "x-ms-summary": "Input price, such as 19.99 in source currency" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/ConvertedCurrencyResult" + } + } + }, + "security": [{ + "Apikey": [] + }] + } + }, + "/currency/exchange-rates/get/{source}/to/{destination}": { + "post": { + "tags": [ + "CurrencyExchange" + ], + "summary": "Gets the exchange rate from the source currency into the destination currency", + "description": "Automatically gets the exchange rate from the source currency into the destination currency using the latest available currency exchange rate data.", + "operationId": "CurrencyExchange_GetExchangeRate", + "consumes": [], + "produces": [ + "application/json", + "text/json", + "application/xml", + "text/xml" + ], + "parameters": [{ + "name": "source", + "in": "path", + "description": "Source currency three-digit code (ISO 4217), e.g. USD, EUR, etc.", + "required": true, + "type": "string", + "x-ms-summary": "Source currency three-digit code (ISO 4217), e.g. USD, EUR, etc." + }, + { + "name": "destination", + "in": "path", + "description": "Destination currency three-digit code (ISO 4217), e.g. USD, EUR, etc.", + "required": true, + "type": "string", + "x-ms-summary": "Destination currency three-digit code (ISO 4217), e.g. USD, EUR, etc." + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/ExchangeRateResult" + } + } + }, + "security": [{ + "Apikey": [] + }] + } + } + }, + "x-ms-connector-metadata": [{ + "propertyName": "Website", + "propertyValue": "https://www.cloudmersive.com/currency-api" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.cloudmersive.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Data;Finance" + } + ], + "definitions": { + "AvailableCurrencyResponse": { + "description": "Result of performing an enumerate currencies operation", + "type": "object", + "properties": { + "Currencies": { + "description": "List of available currencies from the API", + "type": "array", + "items": { + "$ref": "#/definitions/AvailableCurrency" + } + } + } + }, + "AvailableCurrency": { + "description": "Details of a specific currency", + "type": "object", + "properties": { + "ISOCurrencyCode": { + "description": "ISO 4217 currency three-letter code associated with the country", + "type": "string" + }, + "CurrencySymbol": { + "description": "Symbol associated with the currency", + "type": "string" + }, + "CurrencyEnglishName": { + "description": "Full name of the currency", + "type": "string" + }, + "CountryName": { + "description": "Name of the country", + "type": "string" + }, + "CountryThreeLetterCode": { + "description": "Three-letter ISO 3166-1 country code", + "type": "string" + }, + "CountryISOTwoLetterCode": { + "description": "Two-letter ISO 3166-1 country code", + "type": "string" + }, + "IsEuropeanUnionMember": { + "description": "True if this country is currently a member of the European Union (EU), false otherwise", + "type": "boolean" + } + } + }, + "ConvertedCurrencyResult": { + "description": "Result of performing a Convert Currency operation", + "type": "object", + "properties": { + "ConvertedPrice": { + "format": "double", + "description": "The converted price in the destination currency", + "type": "number" + }, + "ISOCurrencyCode": { + "description": "ISO 4217 currency three-letter code of destination price", + "type": "string" + }, + "CurrencySymbol": { + "description": "Destination currency symbol", + "type": "string" + }, + "FormattedPriceAsString": { + "description": "Formatted price in the destination currency as a string", + "type": "string" + } + } + }, + "ExchangeRateResult": { + "description": "Result of performing a get exchange rate operation", + "type": "object", + "properties": { + "ExchangeRate": { + "format": "double", + "description": "The exchange rate from the source to the destination currency", + "type": "number" + } + } + } + }, + "securityDefinitions": { + "Apikey": { + "type": "apiKey", + "description": "API Key Authentication", + "name": "Apikey", + "in": "header" + } + } +} \ No newline at end of file diff --git a/certified-connectors/Cloudmersive Currency/apiProperties.json b/certified-connectors/Cloudmersive Currency/apiProperties.json new file mode 100644 index 000000000..82c1a84f7 --- /dev/null +++ b/certified-connectors/Cloudmersive Currency/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "constraints": { + "clearText": false, + "required": "true", + "tabIndex": 2 + }, + "description": "The Api Key for this API", + "displayName": "API Key (from https://cloudmersive.com)", + "tooltip": "Provide your Api Key - get this key from https://cloudmersive.com" + } + } + }, + "iconBrandColor": "#88dcc5", + "capabilities": [], + "publisher": "Cloudmersive, LLC", + "stackOwner": "Cloudmersive, LLC" + } +} \ No newline at end of file From 798e892fbf3a4254207c6591b8aa97328df301aa Mon Sep 17 00:00:00 2001 From: Andreas Date: Tue, 29 Sep 2020 11:19:57 +0200 Subject: [PATCH 095/347] - Updated README --- certified-connectors/Peltarion/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Peltarion/README.md b/certified-connectors/Peltarion/README.md index e652a59ea..efb915cff 100644 --- a/certified-connectors/Peltarion/README.md +++ b/certified-connectors/Peltarion/README.md @@ -20,7 +20,7 @@ The connector only support one operation, called *callapi*. To use the connector ``` ClearCollect(dd, { : TextInput1.Text}); Set(jdata, JSON(dd, JSONFormat.IncludeBinaryData)); -Set(res, PeltarionConnector.callapi(jdata)) +Set(res, Peltarion.callapi(jdata)) ``` The *res* is an object with three values: From 3249503a2aace6bab8b6822239e328c25fcf923b Mon Sep 17 00:00:00 2001 From: DominikAmann Date: Tue, 29 Sep 2020 15:46:12 +0200 Subject: [PATCH 096/347] Add new Trigger "ProcessDataRuleViolated" - Add new trigger ProcessDataRuleViolated - Cleaned up some definitions --- .../apiDefinition.swagger.json | 429 +++++++----------- 1 file changed, 174 insertions(+), 255 deletions(-) diff --git a/certified-connectors/FORCAM FORCE Bridge/apiDefinition.swagger.json b/certified-connectors/FORCAM FORCE Bridge/apiDefinition.swagger.json index 5219ae52e..46a02fc45 100644 --- a/certified-connectors/FORCAM FORCE Bridge/apiDefinition.swagger.json +++ b/certified-connectors/FORCAM FORCE Bridge/apiDefinition.swagger.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "title": "FORCAM FORCE Bridge", - "version": "1.0.2", + "version": "1.0.3", "description": "FORCAM FORCE is a IIoT platform solution for data driven manufacturing. It supports manufacturing companies to significantly increase their productivity. Its semantic data layer creates a uniform production data model and connects the shop- and top floor. The platform's open web interface form the bridge to in-house and third-party applications, thus enabling the free composition and collaboration of solutions. Connect today with FORCE to empower your workforce for digital transformation.", "contact": { "name": "FORCAM FORCE Bridge Support", @@ -77,18 +77,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -142,18 +131,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -207,18 +185,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -272,18 +239,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -337,18 +293,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -402,18 +347,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -467,18 +401,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -532,18 +455,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -597,18 +509,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -662,18 +563,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -727,18 +617,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -792,18 +671,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -857,18 +725,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -922,18 +779,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -987,18 +833,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -1058,18 +893,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -1129,18 +953,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -1200,18 +1013,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -1245,6 +1047,60 @@ } } }, + "/callbacks/process-data-rule-violated": { + "x-ms-notification-content": { + "description": "Process data rule violated Event", + "schema": { + "$ref": "#/definitions/ProcessDataRuleViolated" + } + }, + "post": { + "description": "When a process data rule has been violated", + "summary": "When a process data rule has been violated", + "tags": [ + "workplace", + "trigger" + ], + "consumes": [ + "application/json" + ], + "operationId": "ProcessDataRuleViolatedEventTrigger", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "eventName", + "in": "query", + "description": "Name of the rule", + "x-ms-summary": "Name of the rule", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Provided by hook registrator. Contains url where the events are sent to", + "required": true, + "schema": { + "$ref": "#/definitions/RegisterHookPayload" + } + } + ], + "responses": { + "201": { + "$ref": "#/responses/WebhookCreationResponse" + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "401": { + "$ref": "#/responses/ApiKeyNotValid" + } + } + } + }, "/callbacks/customized-action": { "x-ms-notification-content": { "description": "CustomCallback Event", @@ -1271,18 +1127,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -1336,18 +1181,7 @@ "description": "Provided by hook registrator. Contains url where the events are sent to", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -1401,18 +1235,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "required": [ - "callbackUrl" - ], - "properties": { - "callbackUrl": { - "type": "string", - "description": "callbackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal" - } - } + "$ref": "#/definitions/RegisterHookPayload" } }, { @@ -1664,8 +1487,8 @@ { "name": "operationId", "in": "path", - "x-ms-url-encoding": "single", "required": true, + "x-ms-url-encoding": "single", "description": "Id of an operation", "x-ms-summary": "Operation Id", "type": "string" @@ -2420,6 +2243,7 @@ "required": [ "priority", "ticketStateId", + "description", "title" ], "properties": { @@ -2982,7 +2806,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/TicketState" + "$ref": "#/definitions/Ticket" } }, "400": { @@ -3720,6 +3544,101 @@ } } }, + "ProcessDataRuleViolated": { + "type": "object", + "required": [ + "callbackID", + "timestamp", + "eventType", + "eventName", + "signalInfo", + "unitInfo", + "violationRuleInfo" + ], + "properties": { + "callbackID": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "eventType": { + "type": "string" + }, + "eventName": { + "type": "string" + }, + "signalInfo": { + "type": "object", + "properties": { + "signalName": { + "type": "string" + }, + "baseSignalValue": { + "type": "string" + }, + "signalGroup": { + "type": "string" + }, + "deliveredSignalValue": { + "type": "string" + }, + "controller": { + "type": "string" + } + } + }, + "unitInfo": { + "type": "object", + "properties": { + "baseUnitSymbol": { + "type": "string" + }, + "baseUnitMnemonic": { + "type": "string" + }, + "deliveredUnitSymbol": { + "type": "string" + }, + "physicalUnitMnemonic": { + "type": "string" + }, + "deliveredUnitMnemonic": { + "type": "string" + } + } + }, + "violationRuleInfo": { + "type": "object", + "properties": { + "priority": { + "type": "string" + }, + "level": { + "type": "string" + }, + "text": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "violationValue": { + "type": "string" + }, + "range": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "violationMaxValue": { + "type": "string" + } + } + } + } + }, "DeleteEvent": { "type": "object", "required": [ From e2897dad2fdabb91ff14db2ddffedc14608ce345 Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Tue, 29 Sep 2020 17:16:45 +0300 Subject: [PATCH 097/347] Fix typo & add new action & remove UI validation --- .../apiDefinition.swagger.json | 157 ++++++++++++++---- .../Plumsail Documents/apiProperties.json | 4 +- .../Plumsail Documents/readme.md | 2 +- .../Plumsail SP/apiDefinition.swagger.json | 120 +++++++------ .../Plumsail SP/apiProperties.json | 4 +- certified-connectors/Plumsail SP/readme.md | 4 - 6 files changed, 200 insertions(+), 91 deletions(-) diff --git a/certified-connectors/Plumsail Documents/apiDefinition.swagger.json b/certified-connectors/Plumsail Documents/apiDefinition.swagger.json index 24a1acc45..e65f321c0 100644 --- a/certified-connectors/Plumsail Documents/apiDefinition.swagger.json +++ b/certified-connectors/Plumsail Documents/apiDefinition.swagger.json @@ -3,13 +3,27 @@ "info": { "version": "v1", "title": "Plumsail Documents", - "description": "The API allows you to create documents from templates (DOCX or HTML file), convert it to PDF and many more. Visit https://plumsail.com/documents for more information", + "description": "Generate documents from DOCX, XLSX, PPTX, HTML templates, and populate fillable PDF forms. Automate your contracts, invoices, reports, tickets, and more. Find more information at site https://plumsail.com/documents", "contact": { "name": "Support", "url": "https://plumsail.com", "email": "support@plumsail.com" } }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://plumsail.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://plumsail.com/privacy-policy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity;Content and Files;Collaboration" + } + ], "host": "api.plumsail.com", "basePath": "/", "schemes": [ @@ -1106,7 +1120,7 @@ "200": { "description": "Success", "schema": { - "type": "string" + "type": "object" } }, "202": { @@ -1365,6 +1379,60 @@ "description": "It works like Parse JSON but for CSV file" } }, + "/flow/v1/Documents/jobs/Csv2Xlsx": { + "post": { + "tags": [ + "DocumentsFlow" + ], + "operationId": "FlowV1DocumentsJobsCsv2XlsxPost", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Csv2XlsxRequest" + } + } + ], + "responses": { + "200": { + "description": "Result file", + "schema": { + "format": "binary", + "title": "Result file", + "type": "string" + } + }, + "202": { + "description": "Accepted", + "headers": { + "Location": { + "description": "Contains URL where the result of job execution will be available", + "type": "string" + } + } + }, + "403": { + "description": "The request did not have the correct authorization" + }, + "404": { + "description": "Response not found error, please write an email to support@plumsail.com" + }, + "500": { + "description": "Internal server error, please write an email to support@plumsail.com" + } + }, + "summary": "Csv to Excel", + "description": "Converts CSV file to Excel" + } + }, "/flow/v1/Documents/jobs/RegExpMatch": { "post": { "tags": [ @@ -1552,9 +1620,7 @@ "name": "jsonContent", "in": "body", "required": true, - "schema": { - "type": "object" - }, + "schema": {}, "x-ms-summary": "Template data", "description": "JSON data that should be applied to the template" } @@ -1608,7 +1674,6 @@ "description": "Content of the template" }, "data": { - "type": "object", "x-ms-summary": "Template data", "description": "JSON data that should be applied to the template" }, @@ -2480,7 +2545,6 @@ "description": "Content of the template" }, "data": { - "type": "object", "x-ms-summary": "Template data", "description": "JSON data that should be applied to the template" }, @@ -3351,7 +3415,6 @@ "description": "Raw content of docx document template. MergeField names should be the same as keys in template data" }, "data": { - "type": "object", "x-ms-summary": "Template data", "description": "JSON data that should be applied to the template" } @@ -3383,7 +3446,6 @@ "description": "Text HTML template or HTML file template" }, "data": { - "type": "object", "x-ms-summary": "Template data", "description": "JSON data that should be applied to the template" }, @@ -4264,7 +4326,6 @@ "description": "Content of the template" }, "data": { - "type": "object", "x-ms-summary": "Template data", "description": "JSON data that should be applied to the template" }, @@ -5128,7 +5189,6 @@ "type": "object", "properties": { "html": { - "format": "byte", "type": "string", "x-ms-visibility": "important", "x-ms-summary": "Source HTML", @@ -5339,7 +5399,7 @@ "format": "binary", "type": "string" }, - "x-ms-summary": "Content of PDF documents", + "x-ms-summary": "Content", "description": "The array of raw content of PDF documents" } } @@ -5562,7 +5622,7 @@ "format": "binary", "type": "string" }, - "x-ms-summary": "Content of Docx documents", + "x-ms-summary": "Content", "description": "The array of raw content of Docx documents" } } @@ -5608,6 +5668,15 @@ "ParseCsvSchemaResponse": { "type": "object", "properties": {}, + "x-ms-dynamic-schema": { + "operationId": "FlowV1DocumentsFlowSchemaParseCsvPost", + "value-path": "response", + "parameters": { + "headers": { + "parameter": "headers" + } + } + }, "x-ms-dynamic-properties": { "operationId": "FlowV1DocumentsFlowSchemaParseCsvPost", "parameters": { @@ -5616,14 +5685,37 @@ } }, "itemValuePath": "response" - }, - "x-ms-dynamic-schema": { - "operationId": "FlowV1DocumentsFlowSchemaParseCsvPost", - "value-path": "response", - "parameters": { - "headers": { - "parameter": "headers" - } + } + }, + "Csv2XlsxRequest": { + "required": [ + "content" + ], + "type": "object", + "properties": { + "content": { + "format": "byte", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Content of CSV document", + "description": "Content of CSV document" + }, + "delimiter": { + "enum": [ + "Comma", + "Semicolon", + "Tab" + ], + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Delimiter", + "description": "Delimiter of columns (by default it is just comma)" + }, + "hasHeaderRecords": { + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "Use first line as headers", + "description": "If set as \"true\" when headers will be read from a first line." } } }, @@ -5651,15 +5743,6 @@ "RegExpMatchSchemaResponseClass": { "type": "object", "properties": {}, - "x-ms-dynamic-properties": { - "operationId": "FlowV1DocumentsFlowSchemaRegExpMatchPost", - "parameters": { - "pattern": { - "parameterReference": "request/pattern" - } - }, - "itemValuePath": "response" - }, "x-ms-dynamic-schema": { "operationId": "FlowV1DocumentsFlowSchemaRegExpMatchPost", "value-path": "response", @@ -5668,6 +5751,15 @@ "parameter": "pattern" } } + }, + "x-ms-dynamic-properties": { + "operationId": "FlowV1DocumentsFlowSchemaRegExpMatchPost", + "parameters": { + "pattern": { + "parameterReference": "request/pattern" + } + }, + "itemValuePath": "response" } }, "RegExpReplaceRequest": { @@ -5738,6 +5830,7 @@ } } }, + "parameters": {}, "responses": { "401": { "description": "Unauthorized" @@ -5753,5 +5846,7 @@ "type": "apiKey", "description": "API key issued by account.plumsail.com" } - } + }, + "security": [], + "tags": [] } \ No newline at end of file diff --git a/certified-connectors/Plumsail Documents/apiProperties.json b/certified-connectors/Plumsail Documents/apiProperties.json index ba09a98ce..cb698ec99 100644 --- a/certified-connectors/Plumsail Documents/apiProperties.json +++ b/certified-connectors/Plumsail Documents/apiProperties.json @@ -16,6 +16,8 @@ } }, "iconBrandColor": "#7d4bcd", - "capabilities": [] + "capabilities": [], + "publisher": "Fuzor LLC", + "stackOwner": "Fuzor LLC" } } \ No newline at end of file diff --git a/certified-connectors/Plumsail Documents/readme.md b/certified-connectors/Plumsail Documents/readme.md index 26bef2def..1e35bc80f 100644 --- a/certified-connectors/Plumsail Documents/readme.md +++ b/certified-connectors/Plumsail Documents/readme.md @@ -1,5 +1,5 @@ ## Plumsail Documents Connector -Plumsail Documents provides a powerful and very extensive REST API. Using this API, you can generate documents in Microsoft Power Automate, Azure Logic Apps or Power Apps. +Plumsail Documents provides a powerful and very extensive REST API. Using this API, you can generate documents in Microsoft Flow, Azure Logic Apps or PowerApps. ## Pre-requisites You will need the following to proceed: diff --git a/certified-connectors/Plumsail SP/apiDefinition.swagger.json b/certified-connectors/Plumsail SP/apiDefinition.swagger.json index ca0bca48d..b9925cdf7 100644 --- a/certified-connectors/Plumsail SP/apiDefinition.swagger.json +++ b/certified-connectors/Plumsail SP/apiDefinition.swagger.json @@ -10,10 +10,23 @@ "email": "support@plumsail.com" } }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://plumsail.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://plumsail.com/privacy-policy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity;Communication;Collaboration;IT Operations" + } + ], "host": "api.plumsail.com", "basePath": "/", "schemes": [ - "http", "https" ], "consumes": [ @@ -370,7 +383,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -463,7 +476,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -512,7 +525,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -561,7 +574,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -610,7 +623,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -659,7 +672,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -711,7 +724,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -763,7 +776,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -812,7 +825,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -864,7 +877,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -916,7 +929,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -968,7 +981,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1020,7 +1033,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1072,7 +1085,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1121,7 +1134,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1173,7 +1186,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1225,7 +1238,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1277,7 +1290,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1329,7 +1342,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1406,7 +1419,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1458,7 +1471,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1507,7 +1520,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1556,7 +1569,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1605,7 +1618,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1654,7 +1667,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1703,7 +1716,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1755,7 +1768,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1807,7 +1820,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1856,7 +1869,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1905,7 +1918,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -1957,7 +1970,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2031,7 +2044,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2083,7 +2096,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2135,7 +2148,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2184,7 +2197,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2236,7 +2249,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2288,7 +2301,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2340,7 +2353,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2392,7 +2405,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2444,7 +2457,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2496,7 +2509,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2545,7 +2558,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2594,7 +2607,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2643,7 +2656,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2692,7 +2705,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2741,7 +2754,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2790,7 +2803,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2839,7 +2852,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2891,7 +2904,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2943,7 +2956,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -2995,7 +3008,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -3047,7 +3060,7 @@ "description": "Accepted", "headers": { "Location": { - "description": "Contains URL where the result of job exection will be available", + "description": "Contains URL where the result of job execution will be available", "type": "string" } } @@ -4795,6 +4808,7 @@ "content": { "format": "byte", "type": "string", + "x-ms-visibility": "important", "x-ms-summary": "Content of CSV document", "description": "Content of CSV document" }, diff --git a/certified-connectors/Plumsail SP/apiProperties.json b/certified-connectors/Plumsail SP/apiProperties.json index a61d81d98..4dad0d0f9 100644 --- a/certified-connectors/Plumsail SP/apiProperties.json +++ b/certified-connectors/Plumsail SP/apiProperties.json @@ -16,6 +16,8 @@ } }, "iconBrandColor": "#ce2d7d", - "capabilities": [] + "capabilities": [], + "publisher": "Fuzor LLC", + "stackOwner": "Fuzor LLC" } } \ No newline at end of file diff --git a/certified-connectors/Plumsail SP/readme.md b/certified-connectors/Plumsail SP/readme.md index 76df9c8cb..fdd048562 100644 --- a/certified-connectors/Plumsail SP/readme.md +++ b/certified-connectors/Plumsail SP/readme.md @@ -1,9 +1,5 @@ ## Plumsail SP Connector -<<<<<<< HEAD Advanced SharePoint actions for Microsoft Flow, Azure Logic Apps or PowerApps. -======= -Advanced SharePoint actions for Microsoft Power Automate, Azure Logic Apps or Power Apps. ->>>>>>> upstream/master ## Pre-requisites You will need the following to proceed: From 597dd0fcae3946739e9978a9a29802ddcf7db21f Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Tue, 29 Sep 2020 17:30:53 +0300 Subject: [PATCH 098/347] Remove extra categories --- .../Plumsail Documents/apiDefinition.swagger.json | 2 +- certified-connectors/Plumsail SP/apiDefinition.swagger.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/Plumsail Documents/apiDefinition.swagger.json b/certified-connectors/Plumsail Documents/apiDefinition.swagger.json index e65f321c0..1a667d23a 100644 --- a/certified-connectors/Plumsail Documents/apiDefinition.swagger.json +++ b/certified-connectors/Plumsail Documents/apiDefinition.swagger.json @@ -21,7 +21,7 @@ }, { "propertyName": "Categories", - "propertyValue": "Productivity;Content and Files;Collaboration" + "propertyValue": "Productivity;Content and Files" } ], "host": "api.plumsail.com", diff --git a/certified-connectors/Plumsail SP/apiDefinition.swagger.json b/certified-connectors/Plumsail SP/apiDefinition.swagger.json index b9925cdf7..97a8bdc2b 100644 --- a/certified-connectors/Plumsail SP/apiDefinition.swagger.json +++ b/certified-connectors/Plumsail SP/apiDefinition.swagger.json @@ -21,7 +21,7 @@ }, { "propertyName": "Categories", - "propertyValue": "Productivity;Communication;Collaboration;IT Operations" + "propertyValue": "Productivity;IT Operations" } ], "host": "api.plumsail.com", From f11052fcf4390dc521f1c28e410fe83956225dc1 Mon Sep 17 00:00:00 2001 From: Roman Rylov Date: Tue, 29 Sep 2020 17:37:42 +0300 Subject: [PATCH 099/347] Fix readme --- certified-connectors/Plumsail Documents/readme.md | 2 +- certified-connectors/Plumsail Forms/apiProperties.json | 4 ---- certified-connectors/Plumsail SP/readme.md | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/certified-connectors/Plumsail Documents/readme.md b/certified-connectors/Plumsail Documents/readme.md index 1e35bc80f..a0503de88 100644 --- a/certified-connectors/Plumsail Documents/readme.md +++ b/certified-connectors/Plumsail Documents/readme.md @@ -1,5 +1,5 @@ ## Plumsail Documents Connector -Plumsail Documents provides a powerful and very extensive REST API. Using this API, you can generate documents in Microsoft Flow, Azure Logic Apps or PowerApps. +Plumsail Documents provides a powerful and very extensive REST API. Using this API, you can generate documents in Microsoft PowerAutomate, Azure Logic Apps or Power Apps. ## Pre-requisites You will need the following to proceed: diff --git a/certified-connectors/Plumsail Forms/apiProperties.json b/certified-connectors/Plumsail Forms/apiProperties.json index 036ab5c43..6928f198e 100644 --- a/certified-connectors/Plumsail Forms/apiProperties.json +++ b/certified-connectors/Plumsail Forms/apiProperties.json @@ -5,11 +5,7 @@ "type": "oauthSetting", "oAuthSettings": { "identityProvider": "oauth2", -<<<<<<< HEAD - "clientId": "3d8caf5f-2f67-4b4a-9a81-2ee61709220f", -======= "clientId": "[[Dummy]]", ->>>>>>> upstream/master "scopes": [ "openid", "offline_access" diff --git a/certified-connectors/Plumsail SP/readme.md b/certified-connectors/Plumsail SP/readme.md index fdd048562..9a6a98c0a 100644 --- a/certified-connectors/Plumsail SP/readme.md +++ b/certified-connectors/Plumsail SP/readme.md @@ -1,5 +1,5 @@ ## Plumsail SP Connector -Advanced SharePoint actions for Microsoft Flow, Azure Logic Apps or PowerApps. +Advanced SharePoint actions for Microsoft Power Automate, Azure Logic Apps or Power Apps. ## Pre-requisites You will need the following to proceed: From 69d00aa43ff3ae629d05ae7ee4d7c772f064b338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Vr=C3=A5lstad?= Date: Wed, 30 Sep 2020 01:35:32 +0200 Subject: [PATCH 100/347] - Updated README (#478) --- certified-connectors/Peltarion/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Peltarion/README.md b/certified-connectors/Peltarion/README.md index e652a59ea..efb915cff 100644 --- a/certified-connectors/Peltarion/README.md +++ b/certified-connectors/Peltarion/README.md @@ -20,7 +20,7 @@ The connector only support one operation, called *callapi*. To use the connector ``` ClearCollect(dd, { : TextInput1.Text}); Set(jdata, JSON(dd, JSONFormat.IncludeBinaryData)); -Set(res, PeltarionConnector.callapi(jdata)) +Set(res, Peltarion.callapi(jdata)) ``` The *res* is an object with three values: From 070009ba5681fd57ee6cc61d2a380123712a088f Mon Sep 17 00:00:00 2001 From: Alok Bansal Date: Tue, 29 Sep 2020 16:36:57 -0700 Subject: [PATCH 101/347] Added Extension Attributes in User Update Request (#476) * Added Extension Attributes in User Update Request * Removed "." from the summary * Fixed Validations * Updated Metadata --- .../AzureAD/apiDefinition.swagger.json | 124 +++++++++++++----- 1 file changed, 91 insertions(+), 33 deletions(-) diff --git a/certified-connectors/AzureAD/apiDefinition.swagger.json b/certified-connectors/AzureAD/apiDefinition.swagger.json index 2edea8ab7..d9b149fb2 100644 --- a/certified-connectors/AzureAD/apiDefinition.swagger.json +++ b/certified-connectors/AzureAD/apiDefinition.swagger.json @@ -9,7 +9,8 @@ "status": "Production" }, "contact": { - "name": "Microsoft" + "name": "Microsoft", + "url": "https://support.microsoft.com" } }, "host": "graph.microsoft.com", @@ -250,7 +251,6 @@ { "$ref": "#/parameters/id__in_path_2" } - ], "responses": { "204": { @@ -815,37 +815,6 @@ "x-ms-summary": "Preferred Language", "x-ms-visibility": "advanced" }, - "forceChangePasswordNextSignIn": { - "type": "object", - "required": [ - "passwordProfile" - - ], - "properties": { - "forceChangePasswordNextSignIn": { - "type": "boolean", - "description": "Requires the user to enter a new password", - "x-ms-summary": "Rest Password", - "default": false - } - }, - "x-ms-visibility": "important" - }, - "forceChangePasswordNextSignInWithMfa": { - "type": "object", - "required": [ - "passwordProfile" - ], - "properties": { - "forceChangePasswordNextSignInWithMfa": { - "type": "boolean", - "description": "Requires the user to perform a MFA.", - "x-ms-summary": "perform a MFA", - "default": false - } - }, - "x-ms-visibility": "important" - }, "businessPhones": { "type": "array", "items": { @@ -854,6 +823,87 @@ "x-ms-summary": "Business Phone" }, "x-ms-visibility": "advanced" + }, + "onPremisesExtensionAttributes": { + "type": "object", + "x-ms-visibility": "advanced", + "properties": { + "extensionAttribute1": { + "type": "string", + "description": "First customizable extension attribute.", + "x-ms-summary": "First customizable extension attribute" + }, + "extensionAttribute2": { + "type": "string", + "description": "Second customizable extension attribute.", + "x-ms-summary": "Second customizable extension attribute" + }, + "extensionAttribute3": { + "type": "string", + "description": "Third customizable extension attribute.", + "x-ms-summary": "Third customizable extension attribute" + }, + "extensionAttribute4": { + "type": "string", + "description": "Fourth customizable extension attribute.", + "x-ms-summary": "Fourth customizable extension attribute" + }, + "extensionAttribute5": { + "type": "string", + "description": "Fifth customizable extension attribute.", + "x-ms-summary": "Fifth customizable extension attribute" + }, + "extensionAttribute6": { + "type": "string", + "description": "Sixth customizable extension attribute.", + "x-ms-summary": "Sixth customizable extension attribute" + }, + "extensionAttribute7": { + "type": "string", + "description": "Seventh customizable extension attribute.", + "x-ms-summary": "Seventh customizable extension attribute" + }, + "extensionAttribute8": { + "type": "string", + "description": "Eighth customizable extension attribute.", + "x-ms-summary": "Eighth customizable extension attribute" + }, + "extensionAttribute9": { + "type": "string", + "description": "Ninth customizable extension attribute.", + "x-ms-summary": "Ninth customizable extension attribute" + }, + "extensionAttribute10": { + "type": "string", + "description": "Tenth customizable extension attribute.", + "x-ms-summary": "Tenth customizable extension attribute" + }, + "extensionAttribute11": { + "type": "string", + "description": "Eleventh customizable extension attribute.", + "x-ms-summary": "Eleventh customizable extension attribute" + }, + "extensionAttribute12": { + "type": "string", + "description": "Twelfth customizable extension attribute.", + "x-ms-summary": "Twelfth customizable extension attribute" + }, + "extensionAttribute13": { + "type": "string", + "description": "Thirteenth customizable extension attribute.", + "x-ms-summary": "Thirteenth customizable extension attribute" + }, + "extensionAttribute14": { + "type": "string", + "description": "Fourteenth customizable extension attribute.", + "x-ms-summary": "Fourteenth customizable extension attribute" + }, + "extensionAttribute15": { + "type": "string", + "description": "Fifteenth customizable extension attribute.", + "x-ms-summary": "Fifteenth customizable extension attribute" + } + } } }, "x-ms-test-value": { @@ -1074,6 +1124,14 @@ { "propertyName": "Privacy policy", "propertyValue": "https://privacy.microsoft.com/en-us/privacystatement" + }, + { + "propertyName": "Website", + "propertyValue": "https://azure.microsoft.com/en-us/services/active-directory" + }, + { + "propertyName": "Categories", + "propertyValue": "IT Operations;Security" } ] } \ No newline at end of file From 708cd708d33b70b8da2fd1ef2ba108d9d7761a2a Mon Sep 17 00:00:00 2001 From: Paulius Podolskis Date: Wed, 30 Sep 2020 10:43:01 +0300 Subject: [PATCH 102/347] Dokobit Portal initial submission --- .../Dokobit Portal/apiDefinition.swagger.json | 1308 +++++++++++++++++ .../Dokobit Portal/apiProperties.json | 23 + certified-connectors/Dokobit Portal/readme.md | 18 + 3 files changed, 1349 insertions(+) create mode 100644 certified-connectors/Dokobit Portal/apiDefinition.swagger.json create mode 100644 certified-connectors/Dokobit Portal/apiProperties.json create mode 100644 certified-connectors/Dokobit Portal/readme.md diff --git a/certified-connectors/Dokobit Portal/apiDefinition.swagger.json b/certified-connectors/Dokobit Portal/apiDefinition.swagger.json new file mode 100644 index 000000000..a7247fbd3 --- /dev/null +++ b/certified-connectors/Dokobit Portal/apiDefinition.swagger.json @@ -0,0 +1,1308 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Dokobit Portal", + "description": "Use Dokobit portal with all the features that it has but make it automated so that you don't have to waste your time on the administrative job. Put together an automated document signing process puzzle from only the parts you need: signing, sharing, downloading or deleting documents, removing and replacing signers, getting details about signers and signature information.", + "contact": { + "name": "Dokobit", + "url": "https://support.dokobit.com", + "email": "developers@dokobit.com" + } + }, + "host": "app.dokobit.com", + "basePath": "/api/connector", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], + "paths": { + "/signing/create.json": { + "post": { + "summary": "Portal - Create Signing", + "consumes": [ + "application/json" + ], + "description": "Create a PDF file for signing.", + "operationId": "Portal-CreateSigning", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name", + "x-ms-summary title": "Signing Name", + "x-ms-visibility": "important" + }, + "type": { + "type": "string", + "description": "type", + "x-ms-summary title": "type", + "x-ms-visibility": "important", + "enum": [ + "pdf", + "asic" + ] + }, + "deadline": { + "type": "string", + "description": "Example: 2019-11-25T13:15:30Z", + "x-ms-summary title": "deadline", + "x-ms-visibility": "important", + "format": "date-time" + }, + "require_qualified_signatures": { + "type": "boolean", + "description": "Require qualified signatures", + "x-ms-summary title": "Require qualified signatures", + "x-ms-visibility": "important", + "enum": [ + false, + true + ] + }, + "require_account": { + "type": "boolean", + "description": "Require user to have Dokobit acccount before signing.", + "x-ms-summary title": "Require account", + "x-ms-visibility": "important", + "enum": [ + false, + true + ] + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name", + "x-ms-summary title": "FileName", + "x-ms-visibility": "important" + }, + "content": { + "type": "string", + "description": "content" + } + } + }, + "description": "files" + }, + "signers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name", + "x-ms-summary title": "Name" + }, + "surname": { + "type": "string", + "description": "surname", + "x-ms-summary title": "Surname" + }, + "email": { + "type": "string", + "description": "email", + "x-ms-summary title": "Email" + }, + "code": { + "type": "string", + "description": "code", + "x-ms-summary title": "Code" + }, + "country_code": { + "type": "string", + "description": "country_code", + "x-ms-summary title": "Country Code" + }, + "role": { + "type": "string", + "description": "role", + "x-ms-summary title": "role", + "x-ms-visibility": "important", + "enum": [ + "approver", + "signer", + "viewer" + ] + }, + "company": { + "type": "string", + "description": "company", + "x-ms-summary title": "Company" + }, + "position": { + "type": "string", + "description": "position", + "x-ms-summary title": "Position" + }, + "phone": { + "type": "string", + "description": "phone", + "x-ms-summary title": "Phone" + } + } + }, + "description": "signers" + }, + "categories": { + "type": "array", + "items": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "category", + "x-ms-summary title": "category", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "Portal-GetCategories", + "value-path": "token", + "value-title": "name" + }, + "x-ms-dynamic-list": { + "operationId": "Portal-GetCategories", + "itemsPath": "token", + "itemValuePath": "name" + } + } + } + }, + "description": "categories" + } + } + }, + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "token": { + "type": "string", + "description": "signingtoken", + "title": "signingtoken" + }, + "signers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "token" + }, + "first_name": { + "type": "string", + "description": "first_name" + }, + "last_name": { + "type": "string", + "description": "last_name" + }, + "code": { + "type": "string", + "description": "code" + }, + "country": { + "type": "string", + "description": "country" + }, + "email": { + "type": "string", + "description": "email" + } + } + }, + "description": "signers" + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "message": { + "type": "string", + "description": "message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/signing/list.json": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "signings": { + "type": "array", + "items": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "token", + "x-ms-summary title": "token" + }, + "status": { + "type": "string", + "description": "Signing Status", + "x-ms-summary title": "Signing Status" + }, + "document_number": { + "type": "string", + "description": "document_number", + "x-ms-summary title": "Document Number" + }, + "last_signature_date": { + "type": "string", + "description": "last_signature_date", + "x-ms-summary title": "Last Signature Date" + } + } + }, + "description": "signings" + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + }, + "summary": "Portal - Get Signing List", + "description": "Returns a list of all documents available to the account owner.", + "operationId": "Portal-GetSigninglist", + "x-ms-visibility": "important", + "parameters": [ + { + "name": "filter", + "in": "query", + "required": false, + "type": "string", + "description": "Filter document status. E.g completed, pending", + "x-ms-summary": "filter" + } + ] + } + }, + "/signing/{token}/status.json": { + "get": { + "summary": "Portal - Check Signing Status", + "description": "Returns document's information with signing status.", + "operationId": "Portal-CheckSigningStatus", + "parameters": [ + { + "x-ms-url-encoding": "single", + "name": "token", + "in": "path", + "type": "string", + "required": true, + "description": "Token", + "x-ms-summary": "token" + } + ], + "responses": { + "200": { + "description": "200", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "name": { + "type": "string", + "description": "name", + "x-ms-summary title": "Name" + }, + "deadline": { + "type": "string", + "description": "Example: 2019-11-25T13:15:30Z", + "title": "deadline", + "x-ms-visibility": "important", + "format": "date-time" + }, + "filename": { + "type": "string", + "description": "name of the file", + "x-ms-summary title": "Name of the file" + }, + "signed_file": { + "type": "string", + "description": "signed_file", + "x-ms-summary title": "Signed file" + }, + "signers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "token", + "x-ms-summary title": "token" + }, + "first_name": { + "type": "string", + "description": "first_name", + "x-ms-summary title": "First name" + }, + "last_name": { + "type": "string", + "description": "last_name", + "x-ms-summary title": "Surname" + }, + "code": { + "type": "string", + "description": "code", + "x-ms-summary title": "Code" + }, + "country": { + "type": "string", + "description": "country", + "x-ms-summary title": "Country" + }, + "email": { + "type": "string", + "description": "email", + "x-ms-summary title": "Email" + }, + "type": { + "type": "string", + "description": "type", + "x-ms-summary title": "Type" + }, + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + } + } + }, + "description": "signers" + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/signing/{token}/download": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": {} + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + }, + "summary": "Portal - Download Document", + "description": "Downloads the signed document.", + "operationId": "Portal-DownloadDocument", + "parameters": [ + { + "x-ms-url-encoding": "single", + "name": "token", + "in": "path", + "required": true, + "type": "string", + "description": "Token", + "x-ms-summary": "token" + } + ], + "x-ms-visibility": "important" + } + }, + "/signing/{token}/share.json": { + "post": { + "summary": "Portal - Share signing", + "consumes": [ + "application/json" + ], + "description": "Indicated participants will gain access to the document with the selected role.", + "operationId": "Portal-SigningShare", + "x-ms-visibility": "important", + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status" + }, + "signers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "token" + }, + "name": { + "type": "string", + "description": "name" + }, + "surname": { + "type": "string", + "description": "surname" + }, + "email": { + "type": "string", + "description": "email" + }, + "code": { + "type": "string", + "description": "code" + }, + "country_code": { + "type": "string", + "description": "country_code" + }, + "role": { + "type": "string", + "description": "role", + "title": "", + "x-ms-visibility": "important", + "enum": [ + "approver", + "signer", + "viewer" + ] + }, + "company": { + "type": "string", + "description": "company" + }, + "position": { + "type": "string", + "description": "position" + }, + "phone": { + "type": "string", + "description": "phone" + } + } + }, + "description": "signers" + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + }, + "parameters": [ + { + "x-ms-url-encoding": "single", + "name": "token", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Token", + "x-ms-summary": "token" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "signers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name", + "x-ms-summary title": "Name" + }, + "surname": { + "type": "string", + "description": "surname", + "x-ms-summary title": "Surname" + }, + "email": { + "type": "string", + "description": "email", + "x-ms-summary title": "Email" + }, + "code": { + "type": "string", + "description": "code", + "x-ms-summary title": "Code" + }, + "country_code": { + "type": "string", + "description": "country_code", + "x-ms-summary title": "Country code" + }, + "role": { + "type": "string", + "description": "role", + "x-ms-summary title": "Role", + "x-ms-visibility": "important", + "enum": [ + "approver", + "signer", + "viewer" + ] + }, + "company": { + "type": "string", + "description": "company", + "x-ms-summary title": "Company" + }, + "position": { + "type": "string", + "description": "position", + "x-ms-summary title": "Position" + }, + "phone": { + "type": "string", + "description": "phone", + "x-ms-summary title": "Phone" + } + } + }, + "description": "signers" + }, + "comment": { + "type": "string", + "description": "comment", + "x-ms-summary title": "Comment" + } + } + } + } + ] + } + }, + "/signing/{token}/seal.json": { + "post": { + "summary": "Portal - Seal signing", + "description": "Document will be sealed with your organizations' electronic seal. Please contact our support at developers@dokobit.com to get a qualified certificate for e-sealing.", + "operationId": "Portal-SealSigning", + "x-ms-visibility": "important", + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + }, + "parameters": [ + { + "x-ms-url-encoding": "single", + "name": "token", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Token", + "x-ms-summary": "token" + } + ] + } + }, + "/signing/{token}/signers/delete.json": { + "post": { + "consumes": [ + "application/json" + ], + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + }, + "summary": "Portal - Delete participant from signing", + "description": "Access to the document will be revoked for the indicated participant.\n.", + "operationId": "Portal-SignerDelete", + "x-ms-visibility": "important", + "parameters": [ + { + "x-ms-url-encoding": "single", + "name": "token", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Token", + "x-ms-summary": "token" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "signers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "token", + "x-ms-summary title": "Token" + } + } + } + } + } + } + } + ] + } + }, + "/signing/{token}/delete.json": { + "post": { + "summary": "Portal - Delete Signing", + "description": "The document will be removed from the owner's account. It will remain accessible to other participants.", + "operationId": "Portal-DeleteSigning", + "x-ms-visibility": "important", + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + }, + "parameters": [ + { + "x-ms-url-encoding": "single", + "name": "token", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Token", + "x-ms-summary": "token" + } + ] + } + }, + "/signing/{token}/delete-all.json": { + "post": { + "summary": "Portal - Delete Signing For All", + "description": "The document will be removed from the owner's account and from other participants' who haven't signed the document yet.", + "operationId": "Portal-DeleteSigningForAll", + "x-ms-visibility": "important", + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + }, + "parameters": [ + { + "x-ms-url-encoding": "single", + "name": "token", + "in": "path", + "required": true, + "type": "string", + "x-ms-visibility": "important", + "description": "Token", + "x-ms-summary": "token" + } + ] + } + }, + "/category/list.json": { + "get": { + "summary": "Portal - Get Categories", + "description": "Returns a list of categories available for the integration.", + "operationId": "Portal-GetCategories", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "default", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "token", + "x-ms-summary title": "Token" + }, + "name": { + "type": "string", + "description": "name", + "x-ms-summary title": "Name" + } + } + } + } + }, + "400": { + "description": "400", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "status", + "x-ms-summary title": "Status" + }, + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "message", + "x-ms-summary title": "Message" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + }, + "field": { + "type": "string", + "description": "field" + } + } + }, + "description": "errors" + }, + "error_code": { + "type": "integer", + "format": "int32", + "description": "error_code", + "x-ms-summary title": "Error Code" + } + } + } + } + } + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "X-Access-Token" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.dokobit.com/solutions" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.dokobit.com/compliance/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity;Remote work;esignature" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/Dokobit Portal/apiProperties.json b/certified-connectors/Dokobit Portal/apiProperties.json new file mode 100644 index 000000000..3f9975473 --- /dev/null +++ b/certified-connectors/Dokobit Portal/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this API", + "tooltip": "Provide your API Access Token", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#FA6400", + "capabilities": [], + "publisher": "Dokobit", + "stackOwner": "Dokobit" + } +} \ No newline at end of file diff --git a/certified-connectors/Dokobit Portal/readme.md b/certified-connectors/Dokobit Portal/readme.md new file mode 100644 index 000000000..4ac29b246 --- /dev/null +++ b/certified-connectors/Dokobit Portal/readme.md @@ -0,0 +1,18 @@ +## Dokobit Portal +Use Dokobit portal with all the features that it has but make it automated so that you don't have to waste your time on the administrative job. Put together an automated document signing process puzzle from only the parts you need: signing, sharing, downloading or deleting documents, removing or replacing signers, getting details about signers, and signature information. + + +## Prerequisites + +Dokobit Portal Flow connector requires a valid Dokobit Portal account with API access token. + +## How to get credentials? + +- [Register](https://app.dokobit.com/register) +- [Contact](sales@dokobit.com) our Sales to get the right plan and API access token. + + + +## Known issues and limitations + +The current implementation supports signature gathering on PDF files or any type of file in ASiCe containers only. \ No newline at end of file From b0ad2b914218627ad9a1b81368992024684606bc Mon Sep 17 00:00:00 2001 From: Paulius Podolskis Date: Wed, 30 Sep 2020 10:50:45 +0300 Subject: [PATCH 103/347] Updated Categories --- certified-connectors/Dokobit Portal/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Dokobit Portal/apiDefinition.swagger.json b/certified-connectors/Dokobit Portal/apiDefinition.swagger.json index a7247fbd3..e6017b78e 100644 --- a/certified-connectors/Dokobit Portal/apiDefinition.swagger.json +++ b/certified-connectors/Dokobit Portal/apiDefinition.swagger.json @@ -1302,7 +1302,7 @@ }, { "propertyName": "Categories", - "propertyValue": "Productivity;Remote work;esignature" + "propertyValue": "Productivity" } ] } \ No newline at end of file From 94fc1d2f488c0f004db41431a6ad8f5baae2fd9e Mon Sep 17 00:00:00 2001 From: ShyamSunder90 <48813199+ShyamSunder90@users.noreply.github.com> Date: Thu, 1 Oct 2020 00:46:31 -0700 Subject: [PATCH 104/347] Save connectionParameterSet on custom connector download (#483) Co-authored-by: Shyam Sunder --- tools/paconn-cli/paconn/operations/download.py | 2 ++ tools/paconn-cli/paconn/operations/json_keys.py | 1 + 2 files changed, 3 insertions(+) diff --git a/tools/paconn-cli/paconn/operations/download.py b/tools/paconn-cli/paconn/operations/download.py index c75eca855..17c76aa3f 100644 --- a/tools/paconn-cli/paconn/operations/download.py +++ b/tools/paconn-cli/paconn/operations/download.py @@ -23,6 +23,7 @@ from paconn.operations.json_keys import ( _ORIGINAL_SWAGGER_URL, _ICON_URI, _CONNECTION_PARAMETERS, + _CONNECTION_PARAMETER_SET, _ICON_BRAND_COLOR, _CAPABILITIES, _POLICY_TEMPLATE_INSTANCES, @@ -103,6 +104,7 @@ def download(powerapps_rp, settings, destination, overwrite): # Property whitelist property_keys_whitelist = [ _CONNECTION_PARAMETERS, + _CONNECTION_PARAMETER_SET, _ICON_BRAND_COLOR, _CAPABILITIES, _POLICY_TEMPLATE_INSTANCES, diff --git a/tools/paconn-cli/paconn/operations/json_keys.py b/tools/paconn-cli/paconn/operations/json_keys.py index 15d0b4e96..ecc3f7e9f 100644 --- a/tools/paconn-cli/paconn/operations/json_keys.py +++ b/tools/paconn-cli/paconn/operations/json_keys.py @@ -12,6 +12,7 @@ Defines constants for JSON keys. _PROPERTIES = 'properties' _ICON_URI = 'iconUri' _CONNECTION_PARAMETERS = 'connectionParameters' +_CONNECTION_PARAMETER_SET = 'connectionParameterSets' # Save _API_DEFINITIONS = 'apiDefinitions' From 0ca7ff95fe05901569111ba526fd7e098400fbdf Mon Sep 17 00:00:00 2001 From: michal Date: Thu, 1 Oct 2020 18:30:33 +0000 Subject: [PATCH 105/347] Add CRMBot connector --- .../CRMBot/apiDefinition.swagger.json | 687 ++++++++++++++++++ .../CRMBot/apiProperties.json | 23 + certified-connectors/CRMBot/readme.md | 12 + 3 files changed, 722 insertions(+) create mode 100644 certified-connectors/CRMBot/apiDefinition.swagger.json create mode 100644 certified-connectors/CRMBot/apiProperties.json create mode 100644 certified-connectors/CRMBot/readme.md diff --git a/certified-connectors/CRMBot/apiDefinition.swagger.json b/certified-connectors/CRMBot/apiDefinition.swagger.json new file mode 100644 index 000000000..80f209509 --- /dev/null +++ b/certified-connectors/CRMBot/apiDefinition.swagger.json @@ -0,0 +1,687 @@ +{ + "swagger": "2.0", + "info": { + "title": "CRM Bot", + "description": "Create powerful conversation experience for your customers right from your CRM system.\nLearn more https://docs.crmbot.ai/", + "version": "1.0", + "contact": { + "name": "CRM Bot Ltd - Support", + "url": "https://github.com/crmbot-ai/crmbot-community/issues", + "email": "support@crmbot.ai" + } + }, + "host": "services.crmbot.ai", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/runtime/api/message/custom": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Adaptive card" + } + } + } + } + }, + "operationId": "build-custom-message", + "summary": "Build Adaptive Card Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "text": { + "type": "string", + "description": "Paste here your adaptive card JSON", + "title": "Payload" + } + }, + "required": [ + "text", + "platform" + ] + }, + "x-ms-visibility": "advanced" + } + ], + "description": "Creates Microsoft Adaptive Card response to send to the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/message/text": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Text message" + } + } + } + } + }, + "operationId": "build-text-message", + "summary": "Build Text Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "text": { + "type": "string", + "description": "Provide your response", + "title": "Text" + } + }, + "required": [ + "text", + "platform" + ] + }, + "x-ms-visibility": "advanced" + } + ], + "description": "Creates a standard text response to send to the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/message/card": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Card message" + } + } + } + } + }, + "operationId": "build-card-message", + "summary": "Build Card Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "title": { + "type": "string", + "description": "Enter card title", + "title": "Title" + }, + "subtitle": { + "type": "string", + "description": "Enter card description (optional)", + "title": "Description" + }, + "url": { + "type": "string", + "description": "Enter url of your .jpg or .png (optional)", + "title": "Image URL" + }, + "isCarousel": { + "type": "boolean", + "description": "Set to NO as default.", + "title": "Display as carousel", + "default": false + }, + "buttontitle1": { + "type": "string", + "description": "Title of your button", + "title": "1st Button Title" + }, + "buttonpostback1": { + "type": "string", + "description": "Postback (text sent to Flow) of your button", + "title": "1st Button Postback" + }, + "buttontitle2": { + "type": "string", + "description": "Title of your button", + "title": "2nd Button Title" + }, + "buttonpostback2": { + "type": "string", + "description": "Postback (text sent to Flow) of your button", + "title": "2nd Button Postback" + }, + "buttontitle3": { + "type": "string", + "description": "Title of your button", + "title": "3rd Button Title" + }, + "buttonpostback3": { + "type": "string", + "description": "Postback (text sent to Flow) of your button", + "title": "3rd Button Postback" + } + }, + "required": [ + "title", + "platform", + "isCarousel" + ] + }, + "x-ms-visibility": "advanced" + } + ], + "description": "Creates Card response to send to the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/message/quickreplies": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Quick replies message" + } + } + } + } + }, + "operationId": "build-quickreplies-message", + "summary": "Build Quick Reply Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "title": { + "type": "string", + "description": "Text to display above the options", + "title": "Title" + }, + "text": { + "type": "string", + "description": "Provide list of comma separated options", + "title": "Menu options" + } + }, + "required": [ + "text", + "platform", + "title" + ] + } + } + ], + "description": "Creates a small menu of suggested actions for the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/message/media": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Media message" + } + } + } + } + }, + "operationId": "build-media-message", + "summary": "Build Media Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "url": { + "type": "string", + "description": "Enter url of your image or video", + "title": "Image/Video URL" + }, + "mediaType": { + "type": "string", + "enum": [ + "1", + "2" + ], + "x-ms-enum-values": [ + { + "displayName": "Image", + "value": "1" + }, + { + "displayName": "Video", + "value": "2" + } + ], + "title": "Media type", + "description": "Select right type" + } + }, + "required": [ + "url", + "mediaType", + "platform" + ] + } + } + ], + "description": "Creates an image or video to send to the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/flowconnector/response": { + "post": { + "operationId": "send-response", + "summary": "Send Response", + "description": "Sends your response to the user within the context of existing conversation (Requires Bot Trigger).", + "responses": { + "200": { + "description": "OK" + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "required": [ + "useGlossary", + "targetLanguage", + "sessionId" + ], + "type": "object", + "properties": { + "sessionId": { + "type": "string", + "title": "Bot Session ID", + "description": "Use BotSessionID parameter from trigger action" + }, + "useGlossary": { + "type": "boolean", + "description": "If you have a custom dictionary for your Bot select Yes", + "title": "Use Custom Dictionary" + }, + "targetLanguage": { + "type": "string", + "description": "Use Language parameter from trigger action", + "title": "Target Language" + }, + "webhookResponse": { + "type": "object", + "properties": { + "FulfillmentMessages": { + "type": "array", + "items": { + "type": "object" + }, + "title": "Fullfilment Messages", + "description": "Use Message parameter from your Response Actions" + }, + "EventName": { + "description": "Select the event you would like to invoke", + "type": "string", + "x-ms-summary": "Select the event you would like to invoke", + "x-ms-dynamic-values": { + "operationId": "get-events" + }, + "title": "Event" + }, + "OutputContextName": { + "description": "Apply specific context to response", + "type": "string", + "x-ms-summary": "Apply specific context to response", + "x-ms-dynamic-values": { + "operationId": "get-contexts" + }, + "title": "Output Context" + }, + "OutputContextLifespan": { + "description": "Duration of context", + "type": "integer", + "x-ms-summary": "Duration of context", + "title": "Context Lifespan" + } + } + } + } + } + } + ], + "x-ms-visibility": "important" + } + }, + "/runtime/api/flowconnector/proactive": { + "post": { + "operationId": "send-proactive-message", + "summary": "Send Proactive Message", + "description": "Sends your response to the user outside of the standard conversation (requires User ID).", + "responses": { + "200": { + "description": "OK" + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "required": [ + "sessionId", + "useGlossary", + "targetLanguage" + ], + "type": "object", + "properties": { + "sessionId": { + "type": "string", + "description": "Needs to come from your trigger or supporting datasets", + "title": "User ID" + }, + "useGlossary": { + "type": "boolean", + "description": "If you have a custom dictionary for your Bot select Yes", + "title": "Use Custom Dictionary" + }, + "targetLanguage": { + "type": "string", + "description": "Use Language parameter from trigger action", + "title": "Target Language" + }, + "webhookResponse": { + "type": "object", + "properties": { + "FulfillmentMessages": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Use Message parameter from your Response Actions", + "title": "Fullfilment Messages" + } + } + } + } + } + } + ], + "x-ms-visibility": "important" + } + }, + "/runtime/api/flowconnector/getIntents": { + "get": { + "operationId": "get-intents", + "summary": "Get intents", + "description": "Get intents", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "intent": { + "type": "string" + } + } + } + } + } + } + } + }, + "/runtime/api/flowconnector/getContexts": { + "get": { + "operationId": "get-contexts", + "summary": "Get contexts", + "description": "Get contexts", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "/runtime/api/flowconnector/getEvents": { + "get": { + "operationId": "get-events", + "summary": "Get events", + "description": "Get events", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "/runtime/api/flowconnector/getSchema/{intent}": { + "get": { + "operationId": "get-schema", + "summary": "Get intent schema", + "description": "Get intent schema", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + }, + "parameters": [ + { + "name": "intent", + "in": "path", + "required": true, + "type": "string", + "description": "Select the intent", + "default": "test" + } + ] + } + }, + "/runtime/api/flowconnector": { + "x-ms-notification-content": { + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "get-schema", + "parameters": { + "intent": { + "parameter": "intent" + } + } + }, + "x-ms-dynamic-properties": { + "operationId": "get-schema", + "parameters": { + "intent": { + "parameterReference": "body/intent" + } + } + } + }, + "description": "Api Response" + }, + "x-ms-visibility": "important", + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + }, + "operationId": "intent-detected", + "summary": "When Intent is detected", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "description": "callbackUrl", + "x-ms-visibility": "internal", + "title": "", + "x-ms-notification-url": true + }, + "intent": { + "description": "Select intent you would like to trigger on", + "type": "string", + "x-ms-summary": "Select intent you would like to trigger on", + "x-ms-dynamic-values": { + "operationId": "get-intents", + "value-path": "intent", + "value-title": "intent" + }, + "title": "Intent", + "x-ms-visibility": "important" + }, + "platform": { + "title": "Platform", + "description": "Use Unspecified if your flow is platform agnostic", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Use Unspecified if your flow is platform agnostic", + "enum": [ + "Unspecified", + "Messenger", + "Google Assistant", + "Skype", + "Slack" + ] + } + }, + "required": [ + "callbackUrl", + "intent", + "platform" + ] + }, + "x-ms-visibility": "advanced" + } + ], + "description": "Triggers when CRM Bot matches user request to one of your Intents with fullfilment.", + "x-ms-visibility": "important" + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "X-Tcb-Api-Key" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://docs.crmbot.ai" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://crmbot.ai/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Sales and CRM;AI" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/CRMBot/apiProperties.json b/certified-connectors/CRMBot/apiProperties.json new file mode 100644 index 000000000..f9c964a89 --- /dev/null +++ b/certified-connectors/CRMBot/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "CRM Bot API Key", + "description": "Please see your registration email for reference.", + "tooltip": "Please see your registration email for reference.", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#0B304D", + "capabilities": [], + "publisher": "CRM Bot Ltd", + "stackOwner": "CRM Bot Ltd" + } +} \ No newline at end of file diff --git a/certified-connectors/CRMBot/readme.md b/certified-connectors/CRMBot/readme.md new file mode 100644 index 000000000..366ebda15 --- /dev/null +++ b/certified-connectors/CRMBot/readme.md @@ -0,0 +1,12 @@ +Create powerful conversation experience for your customers right from your CRM system. Give users new ways to interact with your company by building engaging voice and text-based conversational interfaces, such as voice apps and chatbots, powered by AI. Connect with users on your website, mobile app, the Google Assistant, Amazon Alexa, Facebook Messenger, and other popular platforms and devices. And do it directly from your existing CRM implementation. + +## Prerequisites + +Our clients have to undergo a registration process (currently offered through MS Teams chatbot as well as our website/sales bot. This provides them with a secret API key which is necessary to use our connector. + +## How to get credentials + +In order to get access to your own chatbot project with CRM Bot, all you have to do is get in touch with our CRM chatbot (which is available at crmbot.ai). The chatbot will guide you through the registration process. + +## Support and documentation: +You can find the detailed documentation [here:](https://docs.crmbot.ai/docs/) \ No newline at end of file From ca443344f3b46b4c046ef715c451dc0646780b32 Mon Sep 17 00:00:00 2001 From: Victor Perl Date: Fri, 2 Oct 2020 00:05:47 -0300 Subject: [PATCH 106/347] PDF Blocks v1.2.0 (#482) --- .../PDF Blocks/apiDefinition.swagger.json | 94 +++++++++++++++++-- 1 file changed, 87 insertions(+), 7 deletions(-) diff --git a/certified-connectors/PDF Blocks/apiDefinition.swagger.json b/certified-connectors/PDF Blocks/apiDefinition.swagger.json index f7e24ead3..b2849c4ef 100644 --- a/certified-connectors/PDF Blocks/apiDefinition.swagger.json +++ b/certified-connectors/PDF Blocks/apiDefinition.swagger.json @@ -2,8 +2,8 @@ "swagger": "2.0", "info": { "title": "PDF Blocks", - "version": "1.0.0", - "description": "PDF Blocks is a secure, fast, reliable, and fair-priced service to work with PDF documents. Actions include: Add or remove passwords and restrictions from a PDF document, watermark, merge, remove, extract, reverse, and rotate pages, and more. Check https://www.pdfblocks.com/power-automate for documentation, examples, and tutorials. Users can choose to process their PDF documents in European servers to comply with GDPR data location requirements.", + "version": "1.2.0", + "description": "PDF Blocks is a secure, reliable, and fast service to work with PDF documents in your flow. Actions include: Merge PDF documents, add or remove passwords, watermark documents, remove, extract, reverse, and rotate pages, and more. Check https://www.pdfblocks.com/power-automate for documentation, examples, and tutorials. Users can choose to process their PDF documents in US or European servers to comply with data location requirements.", "contact": { "name": "PDF Blocks Support", "url": "https://www.pdfblocks.com/support", @@ -393,20 +393,100 @@ "name": "file_1", "type": "string", "format": "binary", - "description": "The content of the first PDF document", + "description": "The content of the 1st PDF document", "x-ms-summary": "1st File Content", "x-ms-visibility": "important", - "required": true + "required": false }, { "in": "formData", "name": "file_2", "type": "string", "format": "binary", - "description": "The content of the second PDF document", + "description": "The content of the 2nd PDF document", "x-ms-summary": "2nd File Content", "x-ms-visibility": "important", - "required": true + "required": false + }, + { + "in": "formData", + "name": "file_3", + "type": "string", + "format": "binary", + "description": "The content of the 3rd PDF document", + "x-ms-summary": "3rd File Content", + "x-ms-visibility": "important", + "required": false + }, + { + "in": "formData", + "name": "file_4", + "type": "string", + "format": "binary", + "description": "The content of the 4th PDF document", + "x-ms-summary": "4th File Content", + "x-ms-visibility": "important", + "required": false + }, + { + "in": "formData", + "name": "file_5", + "type": "string", + "format": "binary", + "description": "The content of the 5th PDF document", + "x-ms-summary": "5th File Content", + "x-ms-visibility": "important", + "required": false + }, + { + "in": "formData", + "name": "file_6", + "type": "string", + "format": "binary", + "description": "The content of the 6th PDF document", + "x-ms-summary": "6th File Content", + "x-ms-visibility": "advanced", + "required": false + }, + { + "in": "formData", + "name": "file_7", + "type": "string", + "format": "binary", + "description": "The content of the 7th PDF document", + "x-ms-summary": "7th File Content", + "x-ms-visibility": "advanced", + "required": false + }, + { + "in": "formData", + "name": "file_8", + "type": "string", + "format": "binary", + "description": "The content of the 8th PDF document", + "x-ms-summary": "8th File Content", + "x-ms-visibility": "advanced", + "required": false + }, + { + "in": "formData", + "name": "file_9", + "type": "string", + "format": "binary", + "description": "The content of the 9th PDF document", + "x-ms-summary": "9th File Content", + "x-ms-visibility": "advanced", + "required": false + }, + { + "in": "formData", + "name": "file_10", + "type": "string", + "format": "binary", + "description": "The content of the 10th PDF document", + "x-ms-summary": "10th File Content", + "x-ms-visibility": "advanced", + "required": false } ], "responses": { @@ -647,4 +727,4 @@ } } } -} \ No newline at end of file +} From 39a0d93c09473ae646468f859a5d7d13dfb38011 Mon Sep 17 00:00:00 2001 From: Cloudmersive <35204726+Cloudmersive@users.noreply.github.com> Date: Thu, 1 Oct 2020 21:16:50 -0700 Subject: [PATCH 107/347] Corrected typo --- certified-connectors/Cloudmersive Video and Media/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Cloudmersive Video and Media/Readme.md b/certified-connectors/Cloudmersive Video and Media/Readme.md index bd3d577ba..8cbb696c8 100644 --- a/certified-connectors/Cloudmersive Video and Media/Readme.md +++ b/certified-connectors/Cloudmersive Video and Media/Readme.md @@ -1,5 +1,5 @@ -## Cloudmersive Video and Media +## Cloudmersive Currency [Video and Media API](https://cloudmersive.com/video-and-media-services-api) covers a wide array of common video and audio processing needs, including encoding, decoding, editing, resizing, moderating and extracting metadata. Stateless high-security processing ensures fast performance and strong security. From cc91f81368385974a2c55aa6fa342b21b20b19e2 Mon Sep 17 00:00:00 2001 From: cucho Date: Fri, 2 Oct 2020 10:14:33 -0300 Subject: [PATCH 108/347] line_1 in add_watermark is not longer required --- certified-connectors/PDF Blocks/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/PDF Blocks/apiDefinition.swagger.json b/certified-connectors/PDF Blocks/apiDefinition.swagger.json index b2849c4ef..6bed8e478 100644 --- a/certified-connectors/PDF Blocks/apiDefinition.swagger.json +++ b/certified-connectors/PDF Blocks/apiDefinition.swagger.json @@ -233,7 +233,7 @@ "description": "The first line of text of the watermark", "x-ms-summary": "1st Line", "x-ms-visibility": "important", - "required": true + "required": false }, { "in": "formData", From d6f920e84d5ea18cf279b13ba2c94a7940aa47c0 Mon Sep 17 00:00:00 2001 From: eshupps Date: Fri, 2 Oct 2020 10:40:40 -0500 Subject: [PATCH 109/347] Add Apptigent PowerToolsPRO connector --- .../PowerToolsPRO/apiDefinition.swagger.json | 5512 +++++++++++++++++ .../PowerToolsPRO/apiProperties.json | 23 + certified-connectors/PowerToolsPRO/readme.md | 30 + 3 files changed, 5565 insertions(+) create mode 100644 certified-connectors/PowerToolsPRO/apiDefinition.swagger.json create mode 100644 certified-connectors/PowerToolsPRO/apiProperties.json create mode 100644 certified-connectors/PowerToolsPRO/readme.md diff --git a/certified-connectors/PowerToolsPRO/apiDefinition.swagger.json b/certified-connectors/PowerToolsPRO/apiDefinition.swagger.json new file mode 100644 index 000000000..2edce7403 --- /dev/null +++ b/certified-connectors/PowerToolsPRO/apiDefinition.swagger.json @@ -0,0 +1,5512 @@ +{ + "swagger": "2.0", + "info": { + "title": "Apptigent PowerTools PRO", + "version": "2020.4.01", + "description": "Apptigent PowerTools PRO is the ultimate toolkit for Power Platform professionals. Manipulate text, modify collections, format dates and times, convert currency, perform advanced mathematical calculations, shorten URL’s, encode and decode strings, convert text to speech, translate content into multiple languages, and more. PowerTools PRO includes everything from the LITE version plus over 25 advanced actions to take your apps, forms and flows to the next level. ", + "x-ibm-name": "powertools-professional", + "contact": { + "name": "Customer Support", + "email": "support@apptigent.com", + "url": "https://www.apptigent.com/help/" + } + }, + "host": "connect.apptigent.com", + "basePath": "/api/utilities", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/AddToCollection": { + "post": { + "description": "Add an item to a collection", + "operationId": "addToCollection", + "summary": "Collections - Add to collection", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionModify", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionModify" + }, + "description": "Collection modification parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionResult" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/RemoveFromCollection": { + "post": { + "description": "Remove an item from a collection", + "operationId": "removeFromCollection", + "summary": "Collections - Remove from collection", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionModify", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionModify" + }, + "description": "Collection modification parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionResult" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/FilterCollection": { + "post": { + "description": "Filter a collection of strings by keyword", + "operationId": "filterCollection", + "summary": "Collections - Filter collection", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionFilter", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionFilter" + }, + "description": "Filter collection parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionResult" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/SortCollection": { + "post": { + "description": "Sort a collection of strings", + "operationId": "sortCollection", + "summary": "Collections - Sort collection", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionSort", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionSort" + }, + "description": "Sort collection parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionResult" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CountCollection": { + "post": { + "description": "Count a collection of items", + "operationId": "countCollection", + "summary": "Collections - Count collection", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionCount", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionCount" + }, + "description": "Count collection parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/SplitCollection": { + "post": { + "description": "Split a collection of items by matching value or index", + "operationId": "splitCollection", + "summary": "Collections - Split collection", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionSplit", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionSplit" + }, + "description": "Split collection parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputMultiCollection" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ReplaceValuesInCollection": { + "post": { + "description": "Replace whole or partial strings in a collection", + "operationId": "replaceValuesInCollection", + "summary": "Collections - Replace values in collection", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionReplace", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionReplace" + }, + "description": "Replace values in collection parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionResult" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CollectionContainsString": { + "post": { + "description": "Determine if any items in a collection contain a specific string", + "operationId": "collectionContainsString", + "summary": "Collections - Contains string", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionSearch", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionSearch" + }, + "description": "Collection search parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CollectionStartsWithString": { + "post": { + "description": "Determine if any items in a collection start with a specific string", + "operationId": "collectionStartsWithString", + "summary": "Collections - Starts with string", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionSearch", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionSearch" + }, + "description": "Collection search parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CollectionEndsWithString": { + "post": { + "description": "Determine if any items in a collection end with a specific string", + "operationId": "collectionEndsWithString", + "summary": "Collections - Ends with string", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionSearch", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionSearch" + }, + "description": "Collection search parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CollectionContainsNumber": { + "post": { + "description": "Determine if a collection contains a specific number", + "operationId": "collectionContainsNumber", + "summary": "Collections - Contains number", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionSearch", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionSearchNumeric" + }, + "description": "Collection search parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputCollectionNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CollectionToJSON": { + "post": { + "description": "Convert a collection to a named JSON object", + "operationId": "post-collectiontojson", + "summary": "Collections - Collection to JSON", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionConversion", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionConversion" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CollectionToXML": { + "post": { + "description": "Convert a collection to an XML string", + "operationId": "post-collectiontoxml", + "summary": "Collections - Collection to XML", + "tags": [ + "Collections" + ], + "parameters": [ + { + "name": "collectionConversionXML", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCollectionConversionXML" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertCurrency": { + "post": { + "description": "Calculate value of money in a difference currency", + "operationId": "post-convertcurrency", + "summary": "Currency - Convert currency", + "tags": [ + "Finance" + ], + "parameters": [ + { + "name": "currencyConversion", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCurrencyConversion" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/FormatCurrency": { + "post": { + "description": "Apply currency symbol to a numeric value", + "operationId": "post-formatcurrency", + "summary": "Currency - Format currency", + "tags": [ + "Finance" + ], + "parameters": [ + { + "name": "currencyFormat", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCurrencyFormat" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/DateTimeInfo": { + "post": { + "description": "Retrieve useful date and time information, such as day of year, total seconds and ticks", + "operationId": "dateTimeInfo", + "summary": "DateTime - Get date and time information", + "tags": [ + "DateTime" + ], + "parameters": [ + { + "name": "dateTimeInfo", + "in": "body", + "schema": { + "$ref": "#/definitions/inputDateTimeInfo" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputDateInfo" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/DateTimeDifference": { + "post": { + "description": "Calculate the difference between two dates", + "operationId": "dateTimeDifference", + "summary": "DateTime - DateTime difference", + "tags": [ + "DateTime" + ], + "parameters": [ + { + "name": "dateTimeDifference", + "in": "body", + "schema": { + "$ref": "#/definitions/inputDateTimeDifference" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputDateDifference" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/FormatDateTime": { + "post": { + "description": "Create a date/time string in a specific format", + "operationId": "formatDateTime", + "summary": "DateTime - Format date and time", + "tags": [ + "DateTime" + ], + "parameters": [ + { + "name": "dateTimeFormat", + "in": "body", + "schema": { + "$ref": "#/definitions/inputDateTimeFormat" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/WorldTime": { + "post": { + "description": "Convert date and time from one time zone to another", + "operationId": "worldTime", + "summary": "DateTime - Get world time", + "tags": [ + "DateTime" + ], + "parameters": [ + { + "name": "dateTimeConversion", + "in": "body", + "schema": { + "$ref": "#/definitions/inputDateTimeConversion" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CalculateAverage": { + "post": { + "description": "Calculate the average of two or more numbers", + "operationId": "calculateAverage", + "summary": "Math - Calculate average", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "calculateSeries", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCalculateSeries" + }, + "description": "Series calculation parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CalculateMedian": { + "post": { + "description": "Calculate the median of two or more numbers", + "operationId": "calculateMedian", + "summary": "Math - Calculate median", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "calculateSeries", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCalculateSeries" + }, + "description": "Series calculation parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CalculateMinMax": { + "post": { + "description": "Calculate the minimum or maximum value in a sequence of numbers", + "operationId": "calculateMinMax", + "summary": "Math - Calculate minimum or maximum", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "calculateSeries", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCalculateMinMax" + }, + "description": "Series calculation parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CalculateSum": { + "post": { + "description": "Calculate the sum of two or more numbers", + "operationId": "calculateSum", + "summary": "Math - Calculate sum", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "calculateSeries", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCalculateSeries" + }, + "description": "Series calculation parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CalculatePower": { + "post": { + "description": "Raise number to a specified power", + "operationId": "calculatePower", + "summary": "Math - Calculate power", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "calculatePower", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCalculatePower" + }, + "description": "Power calculation parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CalculateVariance": { + "post": { + "description": "Calculate the statistical variance of two or more numbers", + "operationId": "calculateVariance", + "summary": "Math - Calculate variance", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "calculateSeries", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCalculateSeries" + }, + "description": "Series calculation parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertAngle": { + "post": { + "description": "Convert value from one angle measurement to another", + "operationId": "convertAngle", + "summary": "Math - Convert angle", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertAngle", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertAngle" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertArea": { + "post": { + "description": "Convert value from one area measurement to another", + "operationId": "convertArea", + "summary": "Math - Convert area", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertArea", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertArea" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertDistance": { + "post": { + "description": "Convert value from one distance measurement to another", + "operationId": "convertDistance", + "summary": "Math - Convert distance", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertDistance", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertDistance" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertDuration": { + "post": { + "description": "Convert value from one duration measurement to another", + "operationId": "convertDuration", + "summary": "Math - Convert duration", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertDuration", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertDuration" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertEnergy": { + "post": { + "description": "Convert value from one energy measurement to another", + "operationId": "convertEnergy", + "summary": "Math - Convert energy", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertEnergy", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertEnergy" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertPower": { + "post": { + "description": "Convert value from one power measurement to another", + "operationId": "convertPower", + "summary": "Math - Convert power", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertPower", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertPower" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertSpeed": { + "post": { + "description": "Convert value from one speed measurement to another", + "operationId": "convertSpeed", + "summary": "Math - Convert speed", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertSpeed", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertSpeed" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertTemperature": { + "post": { + "description": "Convert value from one temperature measurement to another", + "operationId": "convertTemperature", + "summary": "Math - Convert temperature", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertTemperature", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertTemperature" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertVolume": { + "post": { + "description": "Convert value from one volume measurement to another", + "operationId": "convertVolume", + "summary": "Math - Convert volume", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertVolume", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertVolume" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertWeight": { + "post": { + "description": "Convert value from one weight measurement to another", + "operationId": "convertWeight", + "summary": "Math - Convert weight", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "convertWeight", + "in": "body", + "schema": { + "$ref": "#/definitions/inputConvertWeight" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/RandomNumber": { + "post": { + "description": "Generate a random number within a specified range", + "operationId": "randomNumber", + "summary": "Math - Random number", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "numberRange", + "in": "body", + "schema": { + "$ref": "#/definitions/inputNumberRange" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/RoundNumber": { + "post": { + "description": "Round a numeric value up or down", + "operationId": "roundNumber", + "summary": "Math - Round number", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "calculateNumber", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCalculateNumber" + }, + "description": "Numeric calculation parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/StandardDeviation": { + "post": { + "description": "Calculate the standard deviation of two or more numbers", + "operationId": "standardDeviation", + "summary": "Math - Calculate standard deviation", + "tags": [ + "Math" + ], + "parameters": [ + { + "name": "calculateSeries", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCalculateSeries" + }, + "description": "Series calculation parameters" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputNumber" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CompareStrings": { + "post": { + "description": "Perform a comparison of two strings", + "operationId": "compareStrings", + "summary": "Text - Compare strings", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "stringComparison", + "in": "body", + "schema": { + "$ref": "#/definitions/inputStringComparison" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ContainsString": { + "post": { + "description": "Determine if a string contains another string", + "operationId": "containsString", + "summary": "Text - Contains string", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "stringContains", + "in": "body", + "schema": { + "$ref": "#/definitions/inputStringContains" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertCase": { + "post": { + "description": "Convert string to upper, lower or title case", + "operationId": "convertCase", + "summary": "Text - Convert case", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "caseConversion", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCaseConversion" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/DecodeString": { + "post": { + "description": "Decode a string encoded with Base64 encoding", + "operationId": "decodeString", + "summary": "Text - Decode string", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "stringInput", + "in": "body", + "schema": { + "type": "object", + "required": [ + "source" + ], + "properties": { + "source": { + "type": "string", + "x-ms-summary": "Source", + "description": "Encoded string variable or text value" + } + }, + "example": { + "source": "VGhlIGJyb3duIGNvdw==" + } + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/EncodeString": { + "post": { + "description": "Encode a string using Base64 encoding", + "operationId": "encodeString", + "summary": "Text - Encode string", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "stringInput", + "in": "body", + "schema": { + "$ref": "#/definitions/inputString" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/GenerateGuid": { + "post": { + "description": "Generate a globally unique identifier", + "operationId": "generateGuid", + "summary": "Text - Generate GUID", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "generateUniqueID", + "in": "body", + "schema": { + "$ref": "#/definitions/inputGenerateUniqueID" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/JoinStrings": { + "post": { + "description": "Join a collection of strings", + "operationId": "joinStrings", + "summary": "Text - Join strings", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "joinStrings", + "in": "body", + "schema": { + "$ref": "#/definitions/inputJoinStrings" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/RedactString": { + "post": { + "description": "Redact a strng containing sensitive content", + "operationId": "redactString", + "summary": "Text - Redact string", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "redactString", + "in": "body", + "schema": { + "$ref": "#/definitions/inputRedactString" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ReplaceString": { + "post": { + "description": "Replace one value with another in a string", + "operationId": "replaceString", + "summary": "Text - Replace string", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "replaceString", + "in": "body", + "schema": { + "$ref": "#/definitions/inputReplaceString" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ShortenLink": { + "post": { + "description": "Generate a simple, short URL from a complex URL", + "operationId": "shortenLink", + "summary": "Text - Shorten hyperlink", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "stringInput", + "in": "body", + "schema": { + "type": "object", + "required": [ + "source" + ], + "properties": { + "source": { + "type": "string", + "x-ms-summary": "Source", + "description": "String variable or text value" + } + }, + "example": { + "source": "http://www.somewebsite.com/path1/path2?query1=value&query2=value" + } + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/SplitString": { + "post": { + "description": "Split a string based upon one or more characters", + "operationId": "splitString", + "summary": "Text - Split string", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "splitString", + "in": "body", + "schema": { + "$ref": "#/definitions/inputSplitString" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputStringArray" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/TextToSpeech": { + "post": { + "description": "Convert text to an audio file using AI-driven speech synthesis.", + "operationId": "textToSpeech", + "summary": "Text - Text to Speech", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "textToSpeech", + "in": "body", + "schema": { + "$ref": "#/definitions/inputTextToSpeech" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "audio/mp3" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "file" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/TranslateString": { + "post": { + "description": "Translate a string into a different language", + "operationId": "translateString", + "summary": "Text - Translate string", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "translateString", + "in": "body", + "schema": { + "$ref": "#/definitions/inputTranslateString" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/TrimString": { + "post": { + "description": "Trim leading or trailing whitespace from a string", + "operationId": "trimString", + "summary": "Text - Trim string", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "trimString", + "in": "body", + "schema": { + "$ref": "#/definitions/inputTrimString" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/URLDecode": { + "post": { + "description": "Decode an encoded URL", + "operationId": "urlDecode", + "summary": "Text - Decode URL", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "stringInput", + "in": "body", + "schema": { + "type": "object", + "required": [ + "source" + ], + "properties": { + "source": { + "type": "string", + "x-ms-summary": "Source", + "description": "Encoded string variable or text value" + } + }, + "example": { + "source": "The%20brown%20cow" + } + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/URLEncode": { + "post": { + "description": "Generate an encoded string from a complex hyperlink", + "operationId": "urlEncode", + "summary": "Text - Encode URL", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "stringInput", + "in": "body", + "schema": { + "$ref": "#/definitions/inputString" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ValidateEmail": { + "post": { + "description": "Determine if an email address is valid", + "operationId": "validateEmail", + "summary": "Text - Validate email", + "tags": [ + "Text" + ], + "parameters": [ + { + "name": "stringInput", + "in": "body", + "schema": { + "type": "object", + "required": [ + "source" + ], + "properties": { + "source": { + "type": "string", + "x-ms-summary": "Source", + "description": "String variable or text value" + } + }, + "example": { + "source": "some user @ bademail-com" + } + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/JSONtoHTML": { + "post": { + "description": "Convert a JSON array to an HTML table", + "operationId": "jsonToHtml", + "summary": "Data - JSON to HTML Table", + "tags": [ + "Data" + ], + "parameters": [ + { + "name": "jsonConversionHTML", + "in": "body", + "schema": { + "$ref": "#/definitions/inputJsonConversionHTML" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/JSONtoCSV": { + "post": { + "description": "Convert a JSON array to CSV string", + "operationId": "jsonToCsv", + "summary": "Data - JSON to CSV", + "tags": [ + "Data" + ], + "parameters": [ + { + "name": "jsonConversionCSV", + "in": "body", + "schema": { + "$ref": "#/definitions/inputJsonConversionCSV" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/JSONtoXML": { + "post": { + "description": "Convert a JSON object to an XML string", + "operationId": "jsonToXml", + "summary": "Data - JSON to XML", + "tags": [ + "Data" + ], + "parameters": [ + { + "name": "jsonConversionXML", + "in": "body", + "schema": { + "$ref": "#/definitions/inputJsonConversionXML" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/CSVtoJSON": { + "post": { + "description": "Convert a CSV string to a JSON array", + "operationId": "csvToJson", + "summary": "Data - CSV to JSON", + "tags": [ + "Data" + ], + "parameters": [ + { + "name": "csvConversionJSON", + "in": "body", + "schema": { + "$ref": "#/definitions/inputCsvConversionJSON" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/XMLtoJSON": { + "post": { + "description": "Convert an XML string to a JSON object", + "operationId": "xmlToJson", + "summary": "Data - XML to JSON", + "tags": [ + "Data" + ], + "parameters": [ + { + "name": "xmlConversionJSON", + "in": "body", + "schema": { + "$ref": "#/definitions/inputXmlConversionJSON" + } + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/outputString" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ConvertImage": { + "post": { + "description": "Convert an image from one format to another", + "operationId": "convertImage", + "summary": "Files - Convert Image", + "tags": [ + "Files" + ], + "parameters": [ + { + "name": "format", + "type": "string", + "in": "formData", + "x-ms-summary": "Format", + "description": "Output file format", + "required": true, + "default": "PNG", + "enum": [ + "PNG", + "JPG", + "GIF", + "BMP", + "TIF" + ] + }, + { + "name": "file", + "type": "file", + "in": "formData", + "x-ms-summary": "File", + "description": "Source image file", + "required": true + } + ], + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "image/png", + "image/gif", + "image/jpeg", + "image/bmp" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "file" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + }, + "/ResizeImage": { + "post": { + "description": "Resize an image", + "operationId": "resizeImage", + "summary": "Files - Resize Image", + "tags": [ + "Files" + ], + "parameters": [ + { + "name": "algorithm", + "type": "string", + "in": "formData", + "required": true, + "x-ms-summary": "Resampling Algorithm", + "description": "Optimize output quality of the target image", + "default": "Bicubic (default)", + "enum": [ + "Bicubic (default)", + "Bilinear", + "Cubic (Box)", + "Cubic (Catmull-Rom)", + "Cubic (Hermite)", + "Cubic (Spline)", + "Nearest Neighbor", + "Sinc (Lanczos2)", + "Sinc (Lanczos3)", + "Sinc (Lanczos5)", + "Sinc (Lanczos8)", + "Robidoux", + "Robidoux Sharp" + ] + }, + { + "name": "units", + "type": "string", + "in": "formData", + "required": true, + "x-ms-summary": "Units", + "description": "Image adjustment units", + "default": "Pixels", + "enum": [ + "Pixels", + "Percent" + ] + }, + { + "name": "height", + "type": "number", + "in": "formData", + "x-ms-summary": "Height", + "description": "Image height (pixels or percent)" + }, + { + "name": "width", + "type": "number", + "in": "formData", + "x-ms-summary": "Width", + "description": "Image width (pixels or percent)" + }, + { + "name": "file", + "type": "file", + "in": "formData", + "required": true, + "x-ms-summary": "File", + "description": "Source image file" + } + ], + "consumes": [ + "multipart/form-data" + ], + "produces": [ + "image/png", + "image/gif", + "image/jpeg", + "image/bmp" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "file" + } + }, + "400": { + "description": "ERROR", + "schema": { + "$ref": "#/definitions/outputString" + } + } + } + } + } + }, + "definitions": { + "inputCollectionSearch": { + "type": "object", + "required": [ + "input", + "match" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Values", + "description": "Collection of strings to search" + }, + "match": { + "type": "string", + "description": "Text to match", + "x-ms-summary": "Text" + }, + "trim": { + "type": "string", + "description": "Trim white space from comparison string", + "x-ms-summary": "Trim", + "enum": [ + "True", + "False" + ] + }, + "ignorecase": { + "type": "string", + "x-ms-summary": "Ignore Case", + "description": "Ignore case when performing comparison", + "enum": [ + "True", + "False" + ] + } + }, + "example": { + "input": [ + "the", + "brown", + "cow " + ], + "match": "cow", + "trim": "True", + "ignorecase": "True" + } + }, + "inputCollectionSearchNumeric": { + "type": "object", + "required": [ + "input", + "match" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "number" + }, + "x-ms-summary": "Values", + "description": "Collection of strings to search" + }, + "match": { + "type": "number", + "description": "Number to match", + "x-ms-summary": "Number" + }, + "type": { + "type": "string", + "x-ms-summary": "Number Type", + "description": "Type of number - integer or decimal", + "default": "Integer", + "enum": [ + "Integer", + "Decimal" + ] + } + }, + "example": { + "input": [ + 1.25, + 10.5, + 20.75, + 51.25, + 119.6, + 301.25 + ], + "match": "1.25,", + "type": "Decimal" + } + }, + "inputCollectionModify": { + "type": "object", + "required": [ + "input" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Collection", + "description": "Collection of values or objects to modify" + }, + "item": { + "type": "string", + "description": "Item (for multiple items, leave blank and use Items)", + "x-ms-summary": "Item" + }, + "items": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Items (Collection, for a single item leave blank and use Item)", + "x-ms-summary": "Items" + }, + "index": { + "type": "string", + "x-ms-summary": "Index", + "description": "Index position for operation (leave blank to specify end of collection)" + } + }, + "example": { + "input": [ + "a", + "b", + "c" + ], + "item": "d", + "items": "", + "index": "0" + } + }, + "inputCollectionFilter": { + "type": "object", + "required": [ + "input", + "match", + "keywords" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Collection", + "description": "Collection of strings to filter" + }, + "match": { + "type": "string", + "default": "Any", + "enum": [ + "Any", + "All", + "None" + ], + "x-ms-summary": "Match", + "description": "Match type" + }, + "keywords": { + "type": "string", + "x-ms-summary": "Keywords", + "description": "Keywords (separate multiple values with commas)" + } + }, + "example": { + "input": [ + "the cow", + "jumped over", + "the moon" + ], + "match": "Any", + "keywords": "cow,moon" + } + }, + "inputCollectionSort": { + "type": "object", + "required": [ + "input", + "order" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Collection", + "description": "Collection of strings to sort" + }, + "order": { + "type": "string", + "default": "Ascending", + "enum": [ + "Ascending", + "Descending" + ], + "x-ms-summary": "Order", + "description": "Sort order" + } + }, + "example": { + "input": [ + "a", + "d", + "c", + "b", + "e" + ], + "order": "Ascending" + } + }, + "inputCollectionCount": { + "type": "object", + "required": [ + "input" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Collection", + "description": "Collection of items to count" + } + }, + "example": { + "input": [ + "a", + "d", + "c", + "b", + "e" + ] + } + }, + "inputCollectionSplit": { + "type": "object", + "required": [ + "input" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Collection", + "description": "Collection of items to split" + }, + "match": { + "type": "string", + "x-ms-summary": "Match Value", + "description": "String to match (explicit, case-insensitive, leave empty to use Index)" + }, + "index": { + "type": "string", + "x-ms-summary": "Index", + "description": "Index location to split (leave empty to use Match value)" + } + }, + "example": { + "input": [ + "the cow", + "jumped over", + "the moon" + ], + "match": "jumped over", + "index": "" + } + }, + "inputCollectionReplace": { + "type": "object", + "required": [ + "input", + "match", + "replacement", + "ignoreCase" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Collection", + "description": "Collection of strings" + }, + "match": { + "type": "string", + "x-ms-summary": "Match value", + "description": "Match value" + }, + "replacement": { + "type": "string", + "x-ms-summary": "Replacement value", + "description": "Replacement value" + }, + "ignoreCase": { + "type": "string", + "default": "True", + "enum": [ + "True", + "False" + ], + "x-ms-summary": "Ignore case", + "description": "Ignore case" + } + }, + "example": { + "input": [ + "the brown cow", + "jumped over", + "the brown dog" + ], + "match": "Brown", + "replacement": "spotted", + "ignoreCase": "True" + } + }, + "inputCalculateNumber": { + "type": "object", + "required": [ + "input", + "decimals" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Value", + "description": "Numeric value to calculate" + }, + "decimals": { + "type": "number", + "x-ms-summary": "Decimal Places", + "description": "Round to number of decimal places", + "minimum": 0, + "default": 0 + } + }, + "example": { + "input": 0.195928, + "decimals": 2 + } + }, + "inputCalculateSeries": { + "type": "object", + "required": [ + "input", + "decimals" + ], + "properties": { + "input": { + "type": "array", + "description": "Colllection of values to calculate", + "x-ms-summary": "Values", + "items": { + "type": "number" + } + }, + "decimals": { + "type": "number", + "description": "Round to number of decimal places", + "x-ms-summary": "Decimal Places", + "minimum": 0, + "default": 0 + } + }, + "example": { + "input": [ + 1, + 2, + 3, + 4, + 5 + ], + "decimals": 2 + } + }, + "inputCalculatePower": { + "type": "object", + "required": [ + "input", + "power", + "decimals" + ], + "properties": { + "input": { + "type": "number", + "description": "Number to raise", + "x-ms-summary": "Number" + }, + "power": { + "type": "number", + "description": "Power", + "x-ms-summary": "Power" + }, + "decimals": { + "type": "number", + "description": "Round to number of decimal places", + "x-ms-summary": "Decimal Places", + "minimum": 0, + "default": 0 + } + }, + "example": { + "input": 5.53, + "power": 4, + "decimals": 2 + } + }, + "inputCalculateMinMax": { + "type": "object", + "required": [ + "input", + "type" + ], + "properties": { + "input": { + "type": "array", + "description": "Colllection of values to calculate", + "x-ms-summary": "Values", + "items": { + "type": "number" + } + }, + "type": { + "type": "string", + "description": "Minimum or Maximum", + "x-ms-summary": "Min or Max", + "enum": [ + "Minimum", + "Maximum" + ], + "default": "Minimum" + } + }, + "example": { + "input": [ + 1, + 2, + 3, + 4, + 5 + ], + "type": "Minimum" + } + }, + "inputCollectionConversion": { + "type": "object", + "required": [ + "input", + "name" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Collection containing strings to convert", + "x-ms-summary": "Values" + }, + "name": { + "type": "string", + "x-ms-summary": "Name", + "description": "Collection name" + } + }, + "example": { + "input": [ + "a", + "b", + "c", + "d", + "e" + ], + "name": "Items" + } + }, + "inputCollectionConversionXML": { + "type": "object", + "required": [ + "input", + "root", + "child" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Collection containing strings to convert", + "x-ms-summary": "Values" + }, + "root": { + "type": "string", + "x-ms-summary": "Root Node Name", + "description": "Name of root XML node" + }, + "child": { + "type": "string", + "x-ms-summary": "Child Node Name", + "description": "Name of child XML node(s)" + } + }, + "example": { + "input": [ + "a", + "b", + "c", + "d", + "e" + ], + "root": "Items", + "child": "Item" + } + }, + "inputCaseConversion": { + "type": "object", + "required": [ + "input", + "alphacase" + ], + "properties": { + "input": { + "type": "string", + "description": "String containing the text to convert", + "x-ms-summary": "Value" + }, + "alphacase": { + "type": "string", + "enum": [ + "Upper", + "Lower", + "Title" + ], + "description": "Case of conversion result", + "x-ms-summary": "Case" + } + }, + "example": { + "input": "the brown cow", + "alphacase": "Upper" + } + }, + "inputConvertAngle": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "Arcminute", + "Arcsecond", + "Centiradian", + "Deciradian", + "Degree", + "Gradian", + "Microdegree", + "Microradian", + "Millidegree", + "Milliradian", + "Nanodegree", + "Nanoradian", + "Radian", + "Revolution" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "Arcminute", + "Arcsecond", + "Centiradian", + "Deciradian", + "Degree", + "Gradian", + "Microdegree", + "Microradian", + "Millidegree", + "Milliradian", + "Nanodegree", + "Nanoradian", + "Radian", + "Revolution" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 16.036844, + "source": "Arcminute", + "target": "Arcsecond" + } + }, + "inputConvertDuration": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "Day", + "Hour", + "Microsecond", + "Millisecond", + "Minute", + "Month", + "Nanosecond", + "Second", + "Week", + "Year" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "Day", + "Hour", + "Microsecond", + "Millisecond", + "Minute", + "Month", + "Nanosecond", + "Second", + "Week", + "Year" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 0.66375, + "source": "Day", + "target": "Hour" + } + }, + "inputConvertDistance": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "Centimeter", + "Decimeter", + "Fathom", + "Foot", + "Hectometer", + "Inch", + "Kilometer", + "LightYear", + "Meter", + "Micrometer", + "Mile", + "Millimeter", + "Nanometer", + "NauticalMile", + "Yard" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "Centimeter", + "Decimeter", + "Fathom", + "Foot", + "Hectometer", + "Inch", + "Kilometer", + "LightYear", + "Meter", + "Micrometer", + "Mile", + "Millimeter", + "Nanometer", + "NauticalMile", + "Yard" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 0.525505, + "source": "Meter", + "target": "Foot" + } + }, + "inputConvertArea": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "Acre", + "Hectare", + "SquareCentimeter", + "SquareDecimeter", + "SquareFoot", + "SquareInch", + "SquareKilometer", + "SquareMeter", + "SquareMicrometer", + "SquareMile", + "SquareMillimeter", + "SquareYard" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "Acre", + "Hectare", + "SquareCentimeter", + "SquareDecimeter", + "SquareFoot", + "SquareInch", + "SquareKilometer", + "SquareMeter", + "SquareMicrometer", + "SquareMile", + "SquareMillimeter", + "SquareYard" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 0.416714, + "source": "Acre", + "target": "SquareFoot" + } + }, + "inputConvertEnergy": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "BritishThermalUnit", + "Calorie", + "ElectronVolt", + "FootPound", + "GigawattHour", + "Joule", + "Kilocalorie", + "Kilojoule", + "KilowattHour", + "Megajoule", + "MegawattHour", + "TerawattHour", + "Therm (EU)", + "Therm (UK)", + "Therm (US)", + "WattHour" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "BritishThermalUnit", + "Calorie", + "ElectronVolt", + "FootPound", + "GigawattHour", + "Joule", + "Kilocalorie", + "Kilojoule", + "KilowattHour", + "Megajoule", + "MegawattHour", + "TerawattHour", + "Therm (EU)", + "Therm (UK)", + "Therm (US)", + "WattHour" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 0.397155, + "source": "Calorie", + "target": "Joule" + } + }, + "inputConvertPower": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "BritishThermalUnitPerHour", + "Decawatt", + "Deciwatt", + "ElectricalHorsepower", + "Femtowatt", + "Gigawatt", + "HydraulicHorsepower", + "Kilowatt", + "MechanicalHorsepower", + "Megawatt", + "Microwatt", + "Milliwatt", + "Nanowatt", + "Petawatt", + "Picowatt", + "Terawatt", + "Watt" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "BritishThermalUnitPerHour", + "Decawatt", + "Deciwatt", + "ElectricalHorsepower", + "Femtowatt", + "Gigawatt", + "HydraulicHorsepower", + "Kilowatt", + "MechanicalHorsepower", + "Megawatt", + "Microwatt", + "Milliwatt", + "Nanowatt", + "Petawatt", + "Picowatt", + "Terawatt", + "Watt" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 0.866107, + "source": "Gigawatt", + "target": "Kilowatt" + } + }, + "inputConvertSpeed": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "CentimeterPerHour", + "CentimeterPerMinute", + "CentimeterPerSecond", + "DecimeterPerMinute", + "DecimeterPerSecond", + "FootPerHour", + "FootPerMinute", + "FootPerSecond", + "InchPerHour", + "InchPerMinute", + "InchPerSecond", + "KilometerPerHour", + "KilometerPerMinute", + "KilometerPerSecond", + "Knot", + "MeterPerHour", + "MeterPerMinute", + "MeterPerSecond", + "MicrometerPerMinute", + "MicrometerPerSecond", + "MilePerHour", + "MillimeterPerHour", + "MillimeterPerMinute", + "MillimeterPerSecond", + "NanometerPerMinute", + "NanometerPerSecond", + "YardPerHour", + "YardPerMinute", + "YardPerSecond" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "CentimeterPerHour", + "CentimeterPerMinute", + "CentimeterPerSecond", + "DecimeterPerMinute", + "DecimeterPerSecond", + "FootPerHour", + "FootPerMinute", + "FootPerSecond", + "InchPerHour", + "InchPerMinute", + "InchPerSecond", + "KilometerPerHour", + "KilometerPerMinute", + "KilometerPerSecond", + "Knot", + "MeterPerHour", + "MeterPerMinute", + "MeterPerSecond", + "MicrometerPerMinute", + "MicrometerPerSecond", + "MilePerHour", + "MillimeterPerHour", + "MillimeterPerMinute", + "MillimeterPerSecond", + "NanometerPerMinute", + "NanometerPerSecond", + "YardPerHour", + "YardPerMinute", + "YardPerSecond" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 0.278054, + "source": "Knot", + "target": "MilePerHour" + } + }, + "inputConvertTemperature": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "Celsius", + "Fahrenheit", + "Newton", + "Kelvin" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "Celsius", + "Fahrenheit", + "Newton", + "Kelvin" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 10, + "source": "Celsius", + "target": "Fahrenheit" + } + }, + "inputConvertVolume": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "Centiliter", + "CubicCentimeter", + "CubicDecimeter", + "CubicFoot", + "CubicHectometer", + "CubicInch", + "CubicKilometer", + "CubicMeter", + "CubicMillimeter", + "CubicYard", + "Deciliter", + "ImperialBeerBarrel", + "ImperialGallon", + "ImperialOunce", + "ImperialPint", + "Kiloliter", + "Liter", + "Microliter", + "Milliliter", + "Gallon", + "Cup", + "Ounce", + "Pint", + "Quart", + "Tablespoon", + "Teaspoon" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "Centiliter", + "CubicCentimeter", + "CubicDecimeter", + "CubicFoot", + "CubicHectometer", + "CubicInch", + "CubicKilometer", + "CubicMeter", + "CubicMillimeter", + "CubicYard", + "Deciliter", + "ImperialBeerBarrel", + "ImperialGallon", + "ImperialOunce", + "ImperialPint", + "Kiloliter", + "Liter", + "Microliter", + "Milliliter", + "Gallon", + "Cup", + "Ounce", + "Pint", + "Quart", + "Tablespoon", + "Teaspoon" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 1.5, + "source": "CubicFoot", + "target": "CubicMeter" + } + }, + "inputConvertWeight": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Measurement value" + }, + "source": { + "type": "string", + "enum": [ + "Centigram", + "Decagram", + "Decigram", + "Grain", + "Gram", + "Hectogram", + "Kilogram", + "Microgram", + "Milligram", + "Nanogram", + "Ounce", + "Pound", + "Stone", + "Solar Mass", + "Earth Mass", + "Slug", + "Short Ton", + "Long Ton", + "Ton", + "Megaton", + "Short Hundredweight", + "Long Hundredweight" + ], + "x-ms-summary": "Source measurement" + }, + "target": { + "type": "string", + "enum": [ + "Centigram", + "Decagram", + "Decigram", + "Grain", + "Gram", + "Hectogram", + "Kilogram", + "Microgram", + "Milligram", + "Nanogram", + "Ounce", + "Pound", + "Stone", + "Ton" + ], + "x-ms-summary": "Target measurement" + } + }, + "example": { + "input": 5.7, + "source": "Gram", + "target": "Ounce" + } + }, + "inputCsvConversionJSON": { + "type": "object", + "required": [ + "input", + "header" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "CSV string" + }, + "header": { + "type": "boolean", + "default": true, + "x-ms-summary": "Header", + "description": "Include header row" + } + }, + "example": { + "input": "Property1,Property2,Property3\r\nvalue,value,value\r\nvalue,value,value", + "header": true + } + }, + "inputCurrencyConversion": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Value", + "description": "Amount to convert" + }, + "source": { + "type": "string", + "default": "USD", + "enum": [ + "USD", + "AUD", + "BGN", + "BRL", + "CAD", + "CHF", + "CNY", + "CZK", + "DKK", + "EUR", + "GBP", + "HKD", + "HRK", + "HUF", + "IDR", + "ILS", + "INR", + "ISK", + "JPY", + "KRW", + "MXN", + "MYR", + "NOK", + "NZD", + "PHP", + "PLN", + "RON", + "RUB", + "SGD", + "SEK", + "THB", + "TRY", + "ZAR" + ], + "x-ms-summary": "Source currency" + }, + "target": { + "type": "string", + "enum": [ + "USD", + "AUD", + "BGN", + "BRL", + "CAD", + "CHF", + "CNY", + "CZK", + "DKK", + "EUR", + "GBP", + "HKD", + "HRK", + "HUF", + "IDR", + "ILS", + "INR", + "ISK", + "JPY", + "KRW", + "MXN", + "MYR", + "NOK", + "NZD", + "PHP", + "PLN", + "RON", + "RUB", + "SGD", + "SEK", + "THB", + "TRY", + "ZAR" + ], + "x-ms-summary": "Target currency" + } + }, + "example": { + "input": 100.25, + "source": "USD", + "target": "CAD" + } + }, + "inputCurrencyFormat": { + "type": "object", + "required": [ + "input", + "target" + ], + "properties": { + "input": { + "type": "number", + "x-ms-summary": "Value", + "description": "Amount to format" + }, + "target": { + "type": "string", + "enum": [ + "USD", + "AUD", + "BGN", + "BRL", + "CAD", + "CHF", + "CNY", + "CZK", + "DKK", + "EUR", + "GBP", + "HKD", + "HRK", + "HUF", + "IDR", + "ILS", + "INR", + "ISK", + "JPY", + "KRW", + "MXN", + "MYR", + "NOK", + "NZD", + "PHP", + "PLN", + "RON", + "RUB", + "SGD", + "SEK", + "THB", + "TRY", + "ZAR" + ], + "x-ms-summary": "Target currency" + } + }, + "example": { + "input": 10980.79, + "target": "GBP" + } + }, + "inputDateTimeConversion": { + "type": "object", + "required": [ + "input", + "source", + "target" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "Source date and time" + }, + "source": { + "type": "string", + "default": "GMT Standard Time - (GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London", + "enum": [ + "GMT Standard Time - (GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London", + "Greenwich Standard Time - (GMT) Monrovia, Reykjavik", + "W. Europe Standard Time - (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", + "Central Europe Standard Time - (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", + "Central European Standard Time - (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb", + "W. Central Africa Standard Time - (GMT+01:00) West Central Africa", + "GTB Standard Time - (GMT+02:00) Athens, Bucharest, Istanbul", + "Middle East Standard Time - (GMT+02:00) Beirut", + "Egypt Standard Time - (GMT+02:00) Cairo", + "South Africa Standard Time - (GMT+02:00) Harare, Pretoria", + "FLE Standard Time - (GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius", + "Israel Standard Time - (GMT+02:00) Jerusalem", + "E. Europe Standard Time - (GMT+02:00) Minsk", + "Namibia Standard Time - (GMT+02:00) Windhoek", + "Arabic Standard Time - (GMT+03:00) Baghdad", + "Arab Standard Time - (GMT+03:00) Kuwait, Riyadh", + "Russian Standard Time - (GMT+03:00) Moscow, St. Petersburg, Volgograd", + "E. Africa Standard Time - (GMT+03:00) Nairobi", + "Georgian Standard Time - (GMT+03:00) Tbilisi", + "Iran Standard Time - (GMT+03:30) Tehran", + "Arabian Standard Time - (GMT+04:00) Abu Dhabi, Muscat", + "Azerbaijan Standard Time - (GMT+04:00) Baku", + "Mauritius Standard Time - (GMT+04:00) Port Louis", + "Caucasus Standard Time - (GMT+04:00) Yerevan", + "Afghanistan Standard Time - (GMT+04:30) Kabul", + "Ekaterinburg Standard Time - (GMT+05:00) Ekaterinburg", + "Pakistan Standard Time - (GMT+05:00) Islamabad, Karachi", + "West Asia Standard Time - (GMT+05:00) Tashkent", + "India Standard Time - (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi", + "Sri Lanka Standard Time - (GMT+05:30) Sri Jayawardenepura", + "Nepal Standard Time - (GMT+05:45) Kathmandu", + "N. Central Asia Standard Time - (GMT+06:00) Almaty, Novosibirsk", + "Central Asia Standard Time - (GMT+06:00) Astana, Dhaka", + "Myanmar Standard Time - (GMT+06:30) Yangon (Rangoon)", + "SE Asia Standard Time - (GMT+07:00) Bangkok, Hanoi, Jakarta", + "North Asia Standard Time - (GMT+07:00) Krasnoyarsk", + "China Standard Time - (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi", + "North Asia East Standard Time - (GMT+08:00) Irkutsk, Ulaan Bataar", + "Singapore Standard Time - (GMT+08:00) Kuala Lumpur, Singapore", + "W. Australia Standard Time - (GMT+08:00) Perth", + "Taipei Standard Time - (GMT+08:00) Taipei", + "Tokyo Standard Time - (GMT+09:00) Osaka, Sapporo, Tokyo", + "Korea Standard Time - (GMT+09:00) Seoul", + "Yakutsk Standard Time - (GMT+09:00) Yakutsk", + "Cen. Australia Standard Time - (GMT+09:30) Adelaide", + "AUS Central Standard Time - (GMT+09:30) Darwin", + "E. Australia Standard Time - (GMT+10:00) Brisbane", + "AUS Eastern Standard Time - (GMT+10:00) Canberra, Melbourne, Sydney", + "West Pacific Standard Time - (GMT+10:00) Guam, Port Moresby", + "Tasmania Standard Time - (GMT+10:00) Hobart", + "Vladivostok Standard Time - (GMT+10:00) Vladivostok", + "Central Pacific Standard Time - (GMT+11:00) Magadan, Solomon Is., New Caledonia", + "New Zealand Standard Time - (GMT+12:00) Auckland, Wellington", + "Fiji Standard Time - (GMT+12:00) Fiji, Kamchatka, Marshall Is.", + "Tonga Standard Time - (GMT+13:00) Nuku'alofa", + "Azores Standard Time - (GMT-01:00) Azores", + "Cape Verde Standard Time - (GMT-01:00) Cape Verde Is.", + "Mid-Atlantic Standard Time - (GMT-02:00) Mid-Atlantic", + "E. South America Standard Time - (GMT-03:00) Brasilia", + "Argentina Standard Time - (GMT-03:00) Buenos Aires", + "SA Eastern Standard Time - (GMT-03:00) Georgetown", + "Greenland Standard Time - (GMT-03:00) Greenland", + "Montevideo Standard Time - (GMT-03:00) Montevideo", + "Newfoundland Standard Time - (GMT-03:30) Newfoundland", + "Atlantic Standard Time - (GMT-04:00) Atlantic Time (Canada)", + "SA Western Standard Time - (GMT-04:00) La Paz", + "Central Brazilian Standard Time - (GMT-04:00) Manaus", + "Pacific SA Standard Time - (GMT-04:00) Santiago", + "Venezuela Standard Time - (GMT-04:30) Caracas", + "SA Pacific Standard Time - (GMT-05:00) Bogota, Lima, Quito, Rio Branco", + "Eastern Standard Time - (GMT-05:00) Eastern Time (US & Canada)", + "US Eastern Standard Time - (GMT-05:00) Indiana (East)", + "Central America Standard Time - (GMT-06:00) Central America", + "Central Standard Time - (GMT-06:00) Central Time (US & Canada)", + "Central Standard Time (Mexico) - (GMT-06:00) Guadalajara, Mexico City, Monterrey", + "Canada Central Standard Time - (GMT-06:00) Saskatchewan", + "US Mountain Standard Time - (GMT-07:00) Arizona", + "Mountain Standard Time (Mexico) - (GMT-07:00) Chihuahua, La Paz, Mazatlan", + "Mountain Standard Time - (GMT-07:00) Mountain Time (US & Canada)", + "Pacific Standard Time - (GMT-08:00) Pacific Time (US & Canada)", + "Pacific Standard Time (Mexico) - (GMT-08:00) Tijuana, Baja California", + "Alaskan Standard Time - (GMT-09:00) Alaska", + "Hawaiian Standard Time - (GMT-10:00) Hawaii", + "Samoa Standard Time - (GMT-11:00) Midway Island, Samoa", + "Dateline Standard Time - (GMT-12:00) International Date Line West" + ], + "x-ms-summary": "Source Time Zone" + }, + "target": { + "type": "string", + "default": "GMT Standard Time - (GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London", + "enum": [ + "GMT Standard Time - (GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London", + "Greenwich Standard Time - (GMT) Monrovia, Reykjavik", + "W. Europe Standard Time - (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna", + "Central Europe Standard Time - (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague", + "Central European Standard Time - (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb", + "W. Central Africa Standard Time - (GMT+01:00) West Central Africa", + "GTB Standard Time - (GMT+02:00) Athens, Bucharest, Istanbul", + "Middle East Standard Time - (GMT+02:00) Beirut", + "Egypt Standard Time - (GMT+02:00) Cairo", + "South Africa Standard Time - (GMT+02:00) Harare, Pretoria", + "FLE Standard Time - (GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius", + "Israel Standard Time - (GMT+02:00) Jerusalem", + "E. Europe Standard Time - (GMT+02:00) Minsk", + "Namibia Standard Time - (GMT+02:00) Windhoek", + "Arabic Standard Time - (GMT+03:00) Baghdad", + "Arab Standard Time - (GMT+03:00) Kuwait, Riyadh", + "Russian Standard Time - (GMT+03:00) Moscow, St. Petersburg, Volgograd", + "E. Africa Standard Time - (GMT+03:00) Nairobi", + "Georgian Standard Time - (GMT+03:00) Tbilisi", + "Iran Standard Time - (GMT+03:30) Tehran", + "Arabian Standard Time - (GMT+04:00) Abu Dhabi, Muscat", + "Azerbaijan Standard Time - (GMT+04:00) Baku", + "Mauritius Standard Time - (GMT+04:00) Port Louis", + "Caucasus Standard Time - (GMT+04:00) Yerevan", + "Afghanistan Standard Time - (GMT+04:30) Kabul", + "Ekaterinburg Standard Time - (GMT+05:00) Ekaterinburg", + "Pakistan Standard Time - (GMT+05:00) Islamabad, Karachi", + "West Asia Standard Time - (GMT+05:00) Tashkent", + "India Standard Time - (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi", + "Sri Lanka Standard Time - (GMT+05:30) Sri Jayawardenepura", + "Nepal Standard Time - (GMT+05:45) Kathmandu", + "N. Central Asia Standard Time - (GMT+06:00) Almaty, Novosibirsk", + "Central Asia Standard Time - (GMT+06:00) Astana, Dhaka", + "Myanmar Standard Time - (GMT+06:30) Yangon (Rangoon)", + "SE Asia Standard Time - (GMT+07:00) Bangkok, Hanoi, Jakarta", + "North Asia Standard Time - (GMT+07:00) Krasnoyarsk", + "China Standard Time - (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi", + "North Asia East Standard Time - (GMT+08:00) Irkutsk, Ulaan Bataar", + "Singapore Standard Time - (GMT+08:00) Kuala Lumpur, Singapore", + "W. Australia Standard Time - (GMT+08:00) Perth", + "Taipei Standard Time - (GMT+08:00) Taipei", + "Tokyo Standard Time - (GMT+09:00) Osaka, Sapporo, Tokyo", + "Korea Standard Time - (GMT+09:00) Seoul", + "Yakutsk Standard Time - (GMT+09:00) Yakutsk", + "Cen. Australia Standard Time - (GMT+09:30) Adelaide", + "AUS Central Standard Time - (GMT+09:30) Darwin", + "E. Australia Standard Time - (GMT+10:00) Brisbane", + "AUS Eastern Standard Time - (GMT+10:00) Canberra, Melbourne, Sydney", + "West Pacific Standard Time - (GMT+10:00) Guam, Port Moresby", + "Tasmania Standard Time - (GMT+10:00) Hobart", + "Vladivostok Standard Time - (GMT+10:00) Vladivostok", + "Central Pacific Standard Time - (GMT+11:00) Magadan, Solomon Is., New Caledonia", + "New Zealand Standard Time - (GMT+12:00) Auckland, Wellington", + "Fiji Standard Time - (GMT+12:00) Fiji, Kamchatka, Marshall Is.", + "Tonga Standard Time - (GMT+13:00) Nuku'alofa", + "Azores Standard Time - (GMT-01:00) Azores", + "Cape Verde Standard Time - (GMT-01:00) Cape Verde Is.", + "Mid-Atlantic Standard Time - (GMT-02:00) Mid-Atlantic", + "E. South America Standard Time - (GMT-03:00) Brasilia", + "Argentina Standard Time - (GMT-03:00) Buenos Aires", + "SA Eastern Standard Time - (GMT-03:00) Georgetown", + "Greenland Standard Time - (GMT-03:00) Greenland", + "Montevideo Standard Time - (GMT-03:00) Montevideo", + "Newfoundland Standard Time - (GMT-03:30) Newfoundland", + "Atlantic Standard Time - (GMT-04:00) Atlantic Time (Canada)", + "SA Western Standard Time - (GMT-04:00) La Paz", + "Central Brazilian Standard Time - (GMT-04:00) Manaus", + "Pacific SA Standard Time - (GMT-04:00) Santiago", + "Venezuela Standard Time - (GMT-04:30) Caracas", + "SA Pacific Standard Time - (GMT-05:00) Bogota, Lima, Quito, Rio Branco", + "Eastern Standard Time - (GMT-05:00) Eastern Time (US & Canada)", + "US Eastern Standard Time - (GMT-05:00) Indiana (East)", + "Central America Standard Time - (GMT-06:00) Central America", + "Central Standard Time - (GMT-06:00) Central Time (US & Canada)", + "Central Standard Time (Mexico) - (GMT-06:00) Guadalajara, Mexico City, Monterrey", + "Canada Central Standard Time - (GMT-06:00) Saskatchewan", + "US Mountain Standard Time - (GMT-07:00) Arizona", + "Mountain Standard Time (Mexico) - (GMT-07:00) Chihuahua, La Paz, Mazatlan", + "Mountain Standard Time - (GMT-07:00) Mountain Time (US & Canada)", + "Pacific Standard Time - (GMT-08:00) Pacific Time (US & Canada)", + "Pacific Standard Time (Mexico) - (GMT-08:00) Tijuana, Baja California", + "Alaskan Standard Time - (GMT-09:00) Alaska", + "Hawaiian Standard Time - (GMT-10:00) Hawaii", + "Samoa Standard Time - (GMT-11:00) Midway Island, Samoa", + "Dateline Standard Time - (GMT-12:00) International Date Line West" + ], + "x-ms-summary": "Target Time Zone" + }, + "format": { + "type": "string", + "x-ms-summary": "Format", + "description": "Display format (defaults to 'yyyy-MM-dd HH:mm:ss')" + } + }, + "example": { + "input": "03/10/2010 09:00:00", + "source": "GMT Standard Time - (GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London", + "target": "Central Standard Time - (GMT-06:00) Central Time (US & Canada)", + "format": "yyyy-MM-dd HH:mm:ss" + } + }, + "inputDateTimeFormat": { + "type": "object", + "required": [ + "input", + "culture", + "format" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "Source date and time" + }, + "culture": { + "type": "string", + "default": "en-US", + "enum": [ + "en-US", + "af-ZA", + "ar-AE", + "ar-BH", + "ar-DZ", + "ar-EG", + "ar-IQ", + "ar-JO", + "ar-KW", + "ar-LB", + "ar-LY", + "ar-MA", + "ar-OM", + "ar-QA", + "ar-SA", + "ar-SY", + "ar-TN", + "ar-YE", + "az-AZ", + "be-BY", + "bg-BG", + "bs-BA", + "ca-ES", + "cs-CZ", + "cy-GB", + "da-DK", + "de-AT", + "de-CH", + "de-DE", + "de-LI", + "de-LU", + "el-GR", + "en-AU", + "en-BZ", + "en-CA", + "en-CB", + "en-GB", + "en-IE", + "en-JM", + "en-NZ", + "en-PH", + "en-TT", + "en-ZA", + "en-ZW", + "es-AR", + "es-BO", + "es-CL", + "es-CO", + "es-CR", + "es-DO", + "es-EC", + "es-ES", + "es-GT", + "es-HN", + "es-MX", + "es-NI", + "es-PA", + "es-PE", + "es-PR", + "es-PY", + "es-SV", + "es-UY", + "es-VE", + "et-EE", + "eu-ES", + "fa-IR", + "fi-FI", + "fo-FO", + "fr-BE", + "fr-CA", + "fr-CH", + "fr-FR", + "fr-LU", + "fr-MC", + "gl-ES", + "gu-IN", + "he-IL", + "hi-IN", + "hr-BA", + "hr-HR", + "hu-HU", + "hy-AM", + "id-ID", + "is-IS", + "it-CH", + "it-IT", + "ja-JP", + "ka-GE", + "kk-KZ", + "kn-IN", + "ko-KR", + "ky-KG", + "lt-LT", + "lv-LV", + "mi-NZ", + "mn-MN", + "mr-IN", + "ms-BN", + "ms-MY", + "mt-MT", + "nl-BE", + "nl-NL", + "nn-NO", + "ns-ZA", + "pa-IN", + "pl-PL", + "ps-AR", + "pt-BR", + "pt-PT", + "ro-RO", + "ru-RU", + "sa-IN", + "sk-SK", + "sl-SI", + "sq-AL", + "sr-BA", + "sr-SP", + "sv-FI", + "sv-SE", + "sw-KE", + "ta-IN", + "te-IN", + "th-TH", + "tl-PH", + "tn-ZA", + "tr-TR", + "uk-UA", + "ur-PK", + "uz-UZ", + "vi-VN", + "zh-CN", + "zh-HK", + "zh-MO", + "zh-SG", + "zh-TW", + "zu-ZA" + ], + "x-ms-summary": "Culture", + "description": "Language culture" + }, + "format": { + "type": "string", + "x-ms-summary": "Format", + "description": "Output format" + } + }, + "example": { + "input": "03/10/2010 00:00:00", + "culture": "en-GB", + "format": "ddd" + } + }, + "inputDateTimeInfo": { + "type": "object", + "required": [ + "input", + "culture" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "Source date and time" + }, + "culture": { + "type": "string", + "default": "en-US", + "enum": [ + "en-US", + "af-ZA", + "ar-AE", + "ar-BH", + "ar-DZ", + "ar-EG", + "ar-IQ", + "ar-JO", + "ar-KW", + "ar-LB", + "ar-LY", + "ar-MA", + "ar-OM", + "ar-QA", + "ar-SA", + "ar-SY", + "ar-TN", + "ar-YE", + "az-AZ", + "be-BY", + "bg-BG", + "bs-BA", + "ca-ES", + "cs-CZ", + "cy-GB", + "da-DK", + "de-AT", + "de-CH", + "de-DE", + "de-LI", + "de-LU", + "el-GR", + "en-AU", + "en-BZ", + "en-CA", + "en-CB", + "en-GB", + "en-IE", + "en-JM", + "en-NZ", + "en-PH", + "en-TT", + "en-ZA", + "en-ZW", + "es-AR", + "es-BO", + "es-CL", + "es-CO", + "es-CR", + "es-DO", + "es-EC", + "es-ES", + "es-GT", + "es-HN", + "es-MX", + "es-NI", + "es-PA", + "es-PE", + "es-PR", + "es-PY", + "es-SV", + "es-UY", + "es-VE", + "et-EE", + "eu-ES", + "fa-IR", + "fi-FI", + "fo-FO", + "fr-BE", + "fr-CA", + "fr-CH", + "fr-FR", + "fr-LU", + "fr-MC", + "gl-ES", + "gu-IN", + "he-IL", + "hi-IN", + "hr-BA", + "hr-HR", + "hu-HU", + "hy-AM", + "id-ID", + "is-IS", + "it-CH", + "it-IT", + "ja-JP", + "ka-GE", + "kk-KZ", + "kn-IN", + "ko-KR", + "ky-KG", + "lt-LT", + "lv-LV", + "mi-NZ", + "mn-MN", + "mr-IN", + "ms-BN", + "ms-MY", + "mt-MT", + "nl-BE", + "nl-NL", + "nn-NO", + "ns-ZA", + "pa-IN", + "pl-PL", + "ps-AR", + "pt-BR", + "pt-PT", + "ro-RO", + "ru-RU", + "sa-IN", + "sk-SK", + "sl-SI", + "sq-AL", + "sr-BA", + "sr-SP", + "sv-FI", + "sv-SE", + "sw-KE", + "ta-IN", + "te-IN", + "th-TH", + "tl-PH", + "tn-ZA", + "tr-TR", + "uk-UA", + "ur-PK", + "uz-UZ", + "vi-VN", + "zh-CN", + "zh-HK", + "zh-MO", + "zh-SG", + "zh-TW", + "zu-ZA" + ], + "x-ms-summary": "Culture", + "description": "Language culture" + } + }, + "example": { + "input": "03/10/2010 09:00:00", + "culture": "en-GB" + } + }, + "inputDateTimeDifference": { + "type": "object", + "required": [ + "dateTime1", + "dateTime2" + ], + "properties": { + "dateTime1": { + "type": "string", + "x-ms-summary": "First date/time value", + "description": "First date/time value" + }, + "dateTime2": { + "type": "string", + "x-ms-summary": "Second date/time value", + "description": "Second date/time value" + } + }, + "example": { + "dateTime1": "1/1/2010 12:37:19", + "dateTime2": "3/15/2011 14:27:49" + } + }, + "inputGenerateUniqueID": { + "type": "object", + "required": [ + "uppercase" + ], + "properties": { + "uppercase": { + "type": "string", + "x-ms-summary": "Uppercase", + "description": "All uppercase alpha characters", + "enum": [ + "True", + "False" + ] + } + }, + "example": { + "uppercase": "True" + } + }, + "inputJoinStrings": { + "type": "object", + "required": [ + "input", + "separator", + "lower", + "trim" + ], + "properties": { + "input": { + "type": "array", + "items": { + "type": "string" + }, + "x-ms-summary": "Values", + "description": "Collection of strings to be joined" + }, + "separator": { + "type": "string", + "x-ms-summary": "Separator", + "description": "Separator character" + }, + "lower": { + "type": "string", + "x-ms-summary": "Lowercase", + "description": "Convert strings in collection to lowercase", + "enum": [ + "True", + "False" + ] + }, + "trim": { + "type": "string", + "x-ms-summary": "Trim", + "description": "Trim strings in collection", + "enum": [ + "True", + "False" + ] + } + }, + "example": { + "input": [ + "The", + "brown", + "cow" + ], + "separator": ";", + "lower": "True", + "trim": "True" + } + }, + "inputJsonConversionCSV": { + "type": "object", + "required": [ + "input", + "header" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "JSON array object" + }, + "header": { + "type": "boolean", + "default": true, + "x-ms-summary": "Header", + "description": "Include header row" + }, + "omit": { + "type": "string", + "x-ms-summary": "Omit Columns", + "description": "Columns to omit (comma separated)" + }, + "order": { + "type": "string", + "x-ms-summary": "Order", + "description": "Column order (comma separated)" + } + }, + "example": { + "input": [ + { + "property1": "value" + }, + { + "property2": "value" + }, + { + "property3": "value" + } + ], + "header": true, + "omit": "property1", + "order": "property3,property2" + } + }, + "inputJsonConversionHTML": { + "type": "object", + "required": [ + "input", + "header" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "JSON array object" + }, + "header": { + "type": "boolean", + "default": true, + "x-ms-summary": "Header", + "description": "Include header row" + }, + "alternate": { + "type": "string", + "x-ms-summary": "Alternate Header", + "description": "Alternate header row markup" + }, + "attributes": { + "type": "string", + "x-ms-summary": "Table Attributes", + "description": "Optional table attributes (single quoted values)" + }, + "omit": { + "type": "string", + "x-ms-summary": "Omit Columns", + "description": "Columns to omit (comma separated)" + }, + "order": { + "type": "string", + "x-ms-summary": "Order", + "description": "Column order (comma separated)" + } + }, + "example": { + "input": [ + { + "property1": "value" + }, + { + "property2": "value" + }, + { + "property3": "value" + } + ], + "header": false, + "alternate": "Property 3Property 2", + "attributes": "style='width:100%;text-align:center;'", + "omit": "property1", + "order": "property3,property2" + } + }, + "inputJsonConversionXML": { + "type": "object", + "required": [ + "input", + "root" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "JSON array object" + }, + "root": { + "type": "string", + "x-ms-summary": "Root Name", + "description": "Name of root node" + } + }, + "example": { + "input": "{\"property1\":\"value\",\"property2\":\"value\",\"property3\":\"value\"}", + "root": "Properties" + } + }, + "inputNumberRange": { + "type": "object", + "required": [ + "start", + "end" + ], + "properties": { + "start": { + "type": "number", + "x-ms-summary": "Start", + "description": "Start of range", + "minimum": 0, + "default": 0 + }, + "end": { + "type": "number", + "x-ms-summary": "End", + "description": "End of range", + "minimum": 0, + "default": 0 + } + }, + "example": { + "start": 1, + "end": 1000000 + } + }, + "inputRedactString": { + "type": "object", + "required": [ + "source" + ], + "properties": { + "value": { + "type": "string", + "x-ms-summary": "Value", + "description": "Individual string to redact" + }, + "source": { + "type": "string", + "x-ms-summary": "Source String", + "description": "String containing the complete text" + }, + "values": { + "type": "array", + "x-ms-summary": "-OR- Values", + "description": "Collection of strings to redact", + "items": { + "type": "string" + } + }, + "regex": { + "type": "string", + "x-ms-summary": "-OR- Regular Expression", + "description": "Regular expression pattern for matching strings" + } + }, + "example": { + "value": "brown", + "source": "The brown cow", + "values": [ + "The", + "brown", + "cow" + ], + "regex": "[A-Za-z]{5}" + } + }, + "inputReplaceString": { + "type": "object", + "required": [ + "source", + "value", + "replacement" + ], + "properties": { + "source": { + "type": "string", + "x-ms-summary": "Source", + "description": "String containing the text to be replaced" + }, + "value": { + "type": "string", + "x-ms-summary": "Value", + "description": "Text to replace" + }, + "replacement": { + "type": "string", + "x-ms-summary": "Replacement", + "description": "Replacement text" + } + }, + "example": { + "source": "The brown cow", + "value": "cow", + "replacement": "dog" + } + }, + "inputSplitString": { + "type": "object", + "required": [ + "input", + "characters" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "Text to split" + }, + "characters": { + "type": "string", + "x-ms-summary": "Character(s)", + "description": "One or more characters that will be used to split the text" + } + }, + "example": { + "input": "The,brown,cow", + "characters": "," + } + }, + "inputStringComparison": { + "type": "object", + "required": [ + "input", + "compare", + "lower", + "trim" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Source", + "description": "Original string" + }, + "compare": { + "type": "string", + "x-ms-summary": "Target", + "description": "Comparison string" + }, + "lower": { + "type": "string", + "enum": [ + "True", + "False" + ], + "x-ms-summary": "Lowercase", + "description": "Convert strings to lowercase before comparison" + }, + "trim": { + "type": "string", + "enum": [ + "True", + "False" + ], + "x-ms-summary": "Trim", + "description": "Trim strings before comparison" + } + }, + "example": { + "input": "Cow", + "compare": "dog", + "lower": "True", + "trim": "True" + } + }, + "inputStringContains": { + "type": "object", + "required": [ + "input", + "find", + "lower" + ], + "properties": { + "find": { + "type": "string", + "x-ms-summary": "Value", + "description": "Text to match" + }, + "input": { + "type": "string", + "x-ms-summary": "Target", + "description": "Text to search" + }, + "lower": { + "type": "string", + "enum": [ + "True", + "False" + ], + "x-ms-summary": "Lowercase", + "description": "Convert strings to lowercase" + } + }, + "example": { + "find": "cow", + "input": "The brown cow", + "lower": "True" + } + }, + "inputString": { + "type": "object", + "required": [ + "source" + ], + "properties": { + "source": { + "type": "string", + "x-ms-summary": "Source", + "description": "String variable or text value" + } + }, + "example": { + "source": "The brown cow" + } + }, + "inputTranslateString": { + "type": "object", + "required": [ + "input", + "language" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "String containing the text to be translated" + }, + "language": { + "type": "string", + "x-ms-summary": "Language", + "description": "Translation language", + "enum": [ + "Arabic", + "Chinese (Simplified)", + "Czech", + "Danish", + "Dutch", + "English", + "Finnish", + "French", + "German", + "Greek", + "Hindi", + "Hungarian", + "Italian", + "Japanese", + "Klingon", + "Korean", + "Norweigan", + "Polish", + "Portuguese", + "Russian", + "Spanish", + "Swedish", + "Turkish", + "Vietnamese", + "Welsh" + ] + } + }, + "example": { + "input": "The brown cow", + "language": "German" + } + }, + "inputTrimString": { + "type": "object", + "required": [ + "source", + "type" + ], + "properties": { + "source": { + "type": "string", + "x-ms-summary": "Source", + "description": "String containing the text to be trimmed" + }, + "type": { + "type": "string", + "x-ms-summary": "Type", + "description": "Type of white space to remove", + "enum": [ + "Start", + "End", + "Both" + ] + } + }, + "example": { + "source": " The brown cow ", + "type": "Both" + } + }, + "inputXmlConversionJSON": { + "type": "object", + "required": [ + "input" + ], + "properties": { + "input": { + "type": "string", + "x-ms-summary": "Value", + "description": "XML string" + } + }, + "example": { + "input": "value" + } + }, + "inputTextToSpeech": { + "type": "object", + "required": [ + "text", + "type", + "voice" + ], + "properties": { + "text": { + "type": "string", + "x-ms-summary": "Text", + "description": "Text to convert (10,000 characters max)" + }, + "type": { + "type": "string", + "x-ms-summary": "Text or file type", + "description": "Text or file type", + "default": "PlainText", + "enum": [ + "PlainText", + "SSML" + ] + }, + "voice": { + "type": "string", + "x-ms-summary": "Voice", + "description": "Voice locale (must match language of input text)", + "default": "en-US, Aria (Female)", + "enum": [ + "ar-EG, Hoda (Female)", + "ar-SA, Naayf (Male)", + "bg-BG, Ivan (Male)", + "ca-ES, Herena (Female)", + "cs-CZ, Jakub (Male)", + "da-DK, Helle (Female)", + "de-AT, Michael (Male)", + "de-CH, Karsten (Male)", + "de-DE, Hedda (Female)", + "de-DE, Stefan (Male)", + "el-GR, Stefanos (Male)", + "en-AU, Catherine (Female)", + "en-AU, Hayley (Female)", + "en-CA, Heather (Female)", + "en-CA, Linda (Female)", + "en-GB, George (Male)", + "en-GB, Hazel (Female)", + "en-GB, Susan (Female)", + "en-IE, Sean (Male)", + "en-IN, Heera (Female)", + "en-IN, Priya (Female)", + "en-IN, Ravi (Male)", + "en-US, Aria (Female)", + "en-US, Benjamin (Male)", + "en-US, Guy (Male)", + "en-US, Zira (Female)", + "es-ES, Helena (Female)", + "es-ES, Laura (Female)", + "es-ES, Pablo (Male)", + "es-MX, Hilda (Female)", + "es-MX, Raul (Male)", + "fi-FI, Heidi (Female)", + "fr-CA, Caroline (Female)", + "fr-CA, Harmonie (Female)", + "fr-CH, Guillaume (Male)", + "fr-FR, Hortense (Female)", + "fr-FR, Julie (Female)", + "fr-FR, Paul (Male)", + "he-IL, Asaf (Male)", + "hi-IN, Hemant (Male)", + "hi-IN, Kalpana (Female)", + "hr-HR, Matej (Male)", + "hu-HU, Szabolcs (Male)", + "id-ID, Andika (Male)", + "it-IT, Cosimo (Male)", + "it-IT, Lucia (Female)", + "ja-JP, Ayumi (Female)", + "ja-JP, Haruka (Female)", + "ja-JP, Ichiro (Male)", + "ko-KR, Heami (Female)", + "ms-MY, Rizwan (Male)", + "nb-NO, Hulda (Female)", + "nl-NL, Hanna (Female)", + "pl-PL, Paulina (Female)", + "pt-BR, Daniel (Male)", + "pt-BR, Heloisa (Female)", + "pt-PT, Helia (Female)", + "ro-RO, Andrei (Male)", + "ru-RU, Ekaterina (Female)", + "ru-RU, Irina (Female)", + "ru-RU, Pavel (Male)", + "sk-SK, Filip (Male)", + "sl-SI, Lado (Male)", + "sv-SE, Hedvig (Female)", + "ta-IN, Valluvar (Male)", + "te-IN, Chitra (Female)", + "th-TH, Pattara (Male)", + "tr-TR, Seda (Female)", + "vi-VN, An (Male)", + "zh-CN, Huihui (Female)", + "zh-CN, Kangkang (Male)", + "zh-CN, Yaoyao (Female)", + "zh-HK, Danny (Male)", + "zh-HK, Tracy (Female)", + "zh-TW, HanHan (Female)", + "zh-TW, Yating (Female)", + "zh-TW, Zhiwei (Male)" + ] + } + }, + "example": { + "text": "This is sample text.", + "type": "PlainText", + "voice": "en-US, Aria (Female)" + } + }, + "outputStringArray": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + }, + "description": "data", + "x-ms-summary": "data" + } + }, + "example": { + "data": [ + "string" + ] + } + }, + "outputDateInfo": { + "type": "object", + "properties": { + "DayOfYear": { + "type": "number", + "description": "DayOfYear", + "x-ms-summary": "DayOfYear" + }, + "DayOfWeek": { + "type": "number", + "description": "DayOfWeek", + "x-ms-summary": "DayOfWeek" + }, + "WeekOfYear": { + "type": "number", + "description": "WeekOfYear", + "x-ms-summary": "WeekOfYear" + }, + "SecondsInDay": { + "type": "number", + "description": "SecondsInDay", + "x-ms-summary": "SecondsInDay" + }, + "MinutesInDay": { + "type": "number", + "description": "MinutesInDay", + "x-ms-summary": "MinutesInDay" + }, + "Ticks": { + "type": "number", + "description": "Ticks", + "x-ms-summary": "Ticks" + } + }, + "example": { + "DayOfYear": 25, + "DayOfWeek": 2, + "WeekOfYear": 10, + "SecondsInDay": 1234, + "MinutesInDay": 359, + "Ticks": 1234567890 + } + }, + "outputDateDifference": { + "type": "object", + "properties": { + "years": { + "type": "number", + "description": "Years", + "x-ms-summary": "Years" + }, + "months": { + "type": "number", + "description": "Months", + "x-ms-summary": "Months" + }, + "days": { + "type": "number", + "description": "Days", + "x-ms-summary": "Days" + }, + "hours": { + "type": "number", + "description": "Hours", + "x-ms-summary": "Hours" + }, + "minutes": { + "type": "number", + "description": "Minutes", + "x-ms-summary": "Minutes" + }, + "milliseconds": { + "type": "number", + "description": "Milliseconds", + "x-ms-summary": "Milliseconds" + }, + "totalYears": { + "type": "number", + "format": "double", + "description": "Total Years", + "x-ms-summary": "Total Years" + }, + "totalMonths": { + "type": "number", + "format": "double", + "description": "Total Months", + "x-ms-summary": "Total Months" + }, + "totalDays": { + "type": "number", + "format": "double", + "description": "Total Days", + "x-ms-summary": "Total Days" + }, + "totalHours": { + "type": "number", + "format": "double", + "description": "Total Hours", + "x-ms-summary": "Total Hours" + }, + "totalMinutes": { + "type": "number", + "format": "double", + "description": "Total Minutes", + "x-ms-summary": "Total Minutes" + }, + "totalSeconds": { + "type": "number", + "format": "double", + "description": "Total Seconds", + "x-ms-summary": "Total Seconds" + }, + "totalMilliseconds": { + "type": "number", + "format": "double", + "description": "Total Milliseconds", + "x-ms-summary": "Total Milliseconds" + }, + "ticks": { + "type": "number", + "description": "Ticks", + "x-ms-summary": "Ticks" + } + }, + "example": { + "years": 1, + "months": 2, + "days": 14, + "hours": 1, + "minutes": 50, + "seconds": 30, + "milliseconds": 0, + "totalYears": 1.2, + "totalMonths": 14.39, + "totalDays": 438.08, + "totalHours": 10513.84, + "totalMinutes": 630830.5, + "totalSeconds": 37849830, + "totalMilliseconds": 37849830000, + "ticks": 378498300000000 + } + }, + "outputCollectionNumber": { + "type": "object", + "properties": { + "status": { + "type": "boolean", + "description": "Success", + "x-ms-summary": "Success" + }, + "item": { + "type": "number", + "description": "First Value", + "x-ms-summary": "First Value" + }, + "items": { + "type": "array", + "items": { + "type": "number" + }, + "description": "All Values", + "x-ms-summary": "All Values" + } + }, + "example": { + "status": false, + "item": 1.25, + "items": [ + 1.25, + 2.5, + 3.75 + ] + } + }, + "outputCollectionResult": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Modified collection result", + "x-ms-summary": "Modified collection result" + } + }, + "example": { + "result": [ + "a", + "b", + "c" + ] + } + }, + "outputCollectionString": { + "type": "object", + "properties": { + "status": { + "type": "boolean", + "description": "Success", + "x-ms-summary": "Success" + }, + "item": { + "type": "string", + "description": "First Value", + "x-ms-summary": "First Value" + }, + "items": { + "type": "array", + "items": { + "type": "string" + }, + "description": "All Values", + "x-ms-summary": "All Values" + } + }, + "example": { + "status": false, + "item": "string", + "items": [ + "string" + ] + } + }, + "outputMultiCollection": { + "type": "object", + "properties": { + "result1": { + "type": "array", + "items": { + "type": "string" + }, + "description": "First collection result", + "x-ms-summary": "First collection result" + }, + "result2": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Second collection result", + "x-ms-summary": "Second collection result" + } + }, + "example": { + "result1": [ + "a", + "b", + "c" + ], + "result2": [ + "d", + "e", + "f" + ] + } + }, + "outputString": { + "type": "object", + "properties": { + "result": { + "type": "string", + "description": "Result", + "x-ms-summary": "Result" + } + }, + "example": { + "result": "string" + } + }, + "outputNumber": { + "type": "object", + "properties": { + "result": { + "type": "number", + "description": "Result", + "x-ms-summary": "Result" + } + }, + "example": { + "result": 1 + } + }, + "outputFileByte": { + "type": "object", + "properties": { + "result": { + "type": "string", + "format": "byte", + "description": "Result", + "x-ms-summary": "Result" + } + }, + "example": { + "result": "Base64 encoded string (byte array)" + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "apiKeyHeader": { + "type": "apiKey", + "name": "X-IBM-Client-Id", + "in": "header" + } + }, + "security": [ + { + "apiKeyHeader": [] + } + ], + "tags": [ + { + "name": "Collections", + "description": "Arrays of base values (strings and numbers)." + }, + { + "name": "Data", + "description": "Data conversion operations." + }, + { + "name": "DateTime", + "description": "Date and time operations." + }, + { + "name": "Finance", + "description": "Financial calculations and conversions." + }, + { + "name": "Math", + "description": "Mathematical calculations and conversions." + }, + { + "name": "Text", + "description": "String manipulation, parsing, conversion and related operations." + } + ], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.apptigent.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.apptigent.com/help/privacy-policy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/PowerToolsPRO/apiProperties.json b/certified-connectors/PowerToolsPRO/apiProperties.json new file mode 100644 index 000000000..83c52d387 --- /dev/null +++ b/certified-connectors/PowerToolsPRO/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "PowerTools PRO Client ID", + "tooltip": "Provide your PowerTools PRO Client ID", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#3260ab", + "capabilities": ["actions"], + "publisher": "Apptigent Limited", + "stackOwner": "Apptigent Limited" + } +} \ No newline at end of file diff --git a/certified-connectors/PowerToolsPRO/readme.md b/certified-connectors/PowerToolsPRO/readme.md new file mode 100644 index 000000000..af3ecd4c0 --- /dev/null +++ b/certified-connectors/PowerToolsPRO/readme.md @@ -0,0 +1,30 @@ +## Apptigent PowerTools PRO + +Create user-driven solutions that solve everyday business problems in a fraction of the time with the ultimate FREE power user toolkit. Manipulate text, modify collections, format dates and times, convert currency, perform advanced mathematical calculations, shorten URL's, encode strings, and more in just a few clicks. No need to learn complex formulas or expression syntax, PowerTools takes care of all the heavy lifting so users can be instantly more productive. With a powerful toolkit of advanced capabilities at their disposal, every user in the organization will have the ability to deliver outstanding results. + +## Prerequisites + +Create an account and subscribe to PowerTools Professional Edition. Plans start at only $49 a month and scale to fit every budget. Learn more at https://portal.apptigent.com. + +## How to get credentials + +Generate an API key by following these simple steps: + +1. Open https://portal.apptigent.com in your browser, click "Create an account" and follow the prompts. +2. Login with your new credentials and select the "Apps" link from the main menu. +3. Click the "Create new App" button. +4. Enter a Title and optional description (such as "Power Automate App") then click "Submit". +5. Upon successful submission, the App details page will be shown with your new credentials. Click the "Show" checkbox next to the Client ID field and copy the value - this is the key you will use in the "API Key" field to authorize a new connector. +6. Browse to "API Products", select "PowerTools Professional", then click Subscribe under any paid plan (contact support for Enterprise and custom billing arrangements). +7. Select the app name created in Step 4 and click "Subscribe" to finish. + +## Known issues and limitations + +Professional Edition plans range from 100 - 5,000 action calls per day. Visit our Subscriptions page at https://www.apptigent.com/solutions/power-tools/subscription-plans/ to learn more about plan limits. +** SPECIAL OFFER FOR MICROSOFT MVP's ** + +Once registered, select the drop-down menu next to your user name and click "My Organization". Edit the organization name and add your MVP ID. Then navigate to subscriptions and select the "MVP" plan for a FREE PRO 100 subscription. You will receive an email confirming your benefit within 48 hours. You may then begin using your app Client ID in your Power Platform subscriptions (NOTE: for personal use only, not valid for customer, client or commercial purposes). + +## Supported Operations + +Please visit the [Apptigent Customer Portal] (https://portal.apptigent.com) for a complete list of API operations. \ No newline at end of file From 16953f19b7aed403ef76436f7d3bc5c374e80377 Mon Sep 17 00:00:00 2001 From: Joeri Onneweer Date: Mon, 5 Oct 2020 10:17:43 +0200 Subject: [PATCH 110/347] October Update --- .../Connect2All/apiDefinition.swagger.json | 1265 ++++++++++++++++- .../Connect2All/apiProperties.json | 4 +- 2 files changed, 1209 insertions(+), 60 deletions(-) diff --git a/certified-connectors/Connect2All/apiDefinition.swagger.json b/certified-connectors/Connect2All/apiDefinition.swagger.json index f872f7e73..c86f06292 100644 --- a/certified-connectors/Connect2All/apiDefinition.swagger.json +++ b/certified-connectors/Connect2All/apiDefinition.swagger.json @@ -36,7 +36,7 @@ "description": "The value to set for this field", "type": "string", "x-ms-summary": "Value to set", - "x-ms-visibility": "advanced" + "x-ms-visbility": "advanced" } }, "type": "object" @@ -250,6 +250,11 @@ "type": "array", "x-ms-summary": "Select" }, + "name": { + "description": "The name of the request", + "type": "string", + "x-ms-summary": "Name of request" + }, "table": { "description": "The table from which you want to retrieve data", "format": "int32", @@ -304,7 +309,7 @@ "description": "The value to set for this field", "type": "string", "x-ms-summary": "Value to set", - "x-ms-visibility": "advanced" + "x-ms-visbility": "advanced" } }, "type": "object" @@ -328,18 +333,171 @@ ], "type": "object", "x-ms-summary": "Request" + }, + "WebhookRequest": { + "properties": { + "CallbackUrl": { + "description": "CallbackUrl", + "title": "", + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + }, + "Fields": { + "description": "Select a field you want to retrieve", + "items": { + "description": "A field from the selected table", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetFields", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "Table": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-values": { + "operationId": "GetFields", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "Table": { + "parameter": "TableId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Field" + }, + "type": "array", + "x-ms-summary": "Select" + }, + "Filters": { + "description": "Field with filters that will be applied when retrieving data", + "items": { + "properties": { + "field": { + "description": "A field from the selected table", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetFields", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "Table": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-values": { + "operationId": "GetFields", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "Table": { + "parameter": "TableId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Field" + }, + "filter": { + "description": "A valid Business Central filter value", + "type": "string", + "x-ms-summary": "Filter", + "x-ms-visibility": "advanced" + } + }, + "type": "object" + }, + "type": "array", + "x-ms-summary": "Filterfields" + }, + "TableId": { + "description": "TableId", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-values": { + "operationId": "GetTables", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-visibility": "important" + } + }, + "required": [ + "CallbackUrl", + "TableId" + ], + "type": "object" + }, + "WebhookSchemaRequest": { + "properties": { + "fields": { + "items": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Field" + }, + "type": "array" + }, + "tableId": { + "format": "int32", + "type": "integer", + "x-ms-summary": "Table" + } + }, + "type": "object" } }, "host": "connect2all.azurewebsites.net", "info": { + "contact": { + "email": "apps@gac.nl", + "name": "GAC Business Solutions", + "url": "https://www.gac.nl" + }, "description": "Import, export and transform your Business Central data", "title": "Connect2All", - "version": "1.0", - "contact": { - "name": "GAC Business Solutions", - "url": "https://www.gac.nl", - "email": "apps@gac.nl" - } + "version": "2.0" }, "parameters": { "Company": { @@ -600,6 +758,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -609,7 +770,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -689,6 +850,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -698,7 +862,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -740,6 +904,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -749,7 +916,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -794,6 +961,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -803,7 +973,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -848,6 +1018,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -857,7 +1030,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -893,6 +1066,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -902,7 +1078,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -952,6 +1128,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -961,7 +1140,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -997,6 +1176,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1006,7 +1188,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1045,6 +1227,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1054,7 +1239,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1093,6 +1278,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1102,7 +1290,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1137,6 +1325,9 @@ "$ref": "#/definitions/KeyValuePairArray" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1146,7 +1337,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1184,6 +1375,9 @@ "200": { "description": "Success" }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1193,7 +1387,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1226,6 +1420,9 @@ "$ref": "#/definitions/StringArray" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1235,7 +1432,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1271,6 +1468,9 @@ "$ref": "#/definitions/StringArray" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1280,7 +1480,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1308,6 +1508,9 @@ "$ref": "#/definitions/StringArray" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1317,7 +1520,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1356,6 +1559,9 @@ "200": { "description": "Success" }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1365,7 +1571,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1428,6 +1634,9 @@ "body/fields": { "parameterReference": "body/fields" }, + "body/name": { + "parameterReference": "body/name" + }, "body/table": { "parameterReference": "body/table" } @@ -1445,6 +1654,9 @@ "fields": { "parameter": "fields" }, + "name": { + "parameter": "name" + }, "table": { "parameter": "table" } @@ -1454,6 +1666,9 @@ "x-ms-summary": "Response" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1463,7 +1678,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1531,6 +1746,9 @@ "x-ms-summary": "Response" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1540,7 +1758,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1638,6 +1856,9 @@ "x-ms-summary": "Response" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1647,7 +1868,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1703,6 +1924,9 @@ "type": "object" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1712,7 +1936,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1768,6 +1992,9 @@ "type": "object" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1777,7 +2004,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1821,6 +2048,9 @@ "200": { "description": "Success" }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1830,7 +2060,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -1918,6 +2148,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -1927,7 +2160,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2011,6 +2244,9 @@ "description": "default", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2020,7 +2256,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2107,6 +2343,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2116,7 +2355,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2139,6 +2378,59 @@ } } }, + "/api/1.0/hooks/{Id}": { + "delete": { + "description": "Deletes a webhook,", + "operationId": "DeleteTrigger", + "parameters": [ + { + "in": "query", + "name": "environment", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "company", + "required": true, + "type": "string" + }, + { + "description": "The id of the registered webhook", + "in": "path", + "name": "Id", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": {} + }, + "400": { + "$ref": "#/responses/Unexpected" + }, + "401": { + "$ref": "#/responses/Unauthorized" + }, + "402": { + "$ref": "#/responses/InvalidLicense" + }, + "404": { + "$ref": "#/responses/NotFound" + }, + "500": { + "$ref": "#/responses/Unexpected" + } + }, + "summary": "Deletes a registration webhook from the Business Central environment", + "tags": [ + "triggers" + ], + "x-ms-visibility": "internal" + } + }, "/api/1.0/language": { "get": { "consumes": [ @@ -2177,6 +2469,9 @@ "type": "array" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2186,7 +2481,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2226,6 +2521,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2235,7 +2533,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2272,6 +2570,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2281,7 +2582,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2333,6 +2634,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2342,7 +2646,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2377,6 +2681,9 @@ "$ref": "#/definitions/KeyValuePairArray" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2386,7 +2693,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2445,6 +2752,9 @@ "description": "Success", "schema": {} }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2454,7 +2764,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2504,6 +2814,9 @@ "type": "object" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2513,7 +2826,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2565,6 +2878,9 @@ "type": "object" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2574,7 +2890,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2629,6 +2945,9 @@ "type": "object" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2638,7 +2957,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2649,6 +2968,70 @@ "x-ms-visibility": "internal" } }, + "/api/1.0/schema/WebhookRequest": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Gets a schema for a webhook response", + "operationId": "GetWebhookRequestSchema", + "parameters": [ + { + "$ref": "#/parameters/Environment" + }, + { + "$ref": "#/parameters/Company" + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WebhookSchemaRequest" + }, + "x-ms-visibility": "internal" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "description": "The schema for this webhook", + "properties": { + "schema": { + "properties": {}, + "type": "object" + } + }, + "type": "object" + } + }, + "400": { + "$ref": "#/responses/Unexpected" + }, + "401": { + "$ref": "#/responses/Unauthorized" + }, + "402": { + "$ref": "#/responses/InvalidLicense" + }, + "404": { + "$ref": "#/responses/NotFound" + }, + "500": { + "$ref": "#/responses/Unexpected" + } + }, + "summary": "Get schema for webhook", + "tags": [ + "helpers" + ], + "x-ms-visibility": "internal" + } + }, "/api/1.0/tables": { "get": { "consumes": [ @@ -2674,6 +3057,9 @@ "$ref": "#/definitions/KeyValuePairArray" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2683,7 +3069,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2804,6 +3190,9 @@ "type": "array" } }, + "400": { + "$ref": "#/responses/Unexpected" + }, "401": { "$ref": "#/responses/Unauthorized" }, @@ -2813,7 +3202,7 @@ "404": { "$ref": "#/responses/NotFound" }, - "default": { + "500": { "$ref": "#/responses/Unexpected" } }, @@ -2823,22 +3212,768 @@ ], "x-ms-visibility": "internal" } + }, + "/api/2.0/hooks": { + "x-ms-notification-content": { + "description": "This is the system id is that is send back", + "schema": { + "properties": { + "SystemId": { + "description": "SystemId", + "type": "string" + } + }, + "type": "object" + } + } + }, + "/api/2.0/hooks/create": { + "post": { + "consumes": [ + "application/json" + ], + "description": "A record is created in Business Central", + "operationId": "RecordCreatedV2", + "parameters": [ + { + "$ref": "#/parameters/Environment" + }, + { + "$ref": "#/parameters/Company" + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "CallbackUrl": { + "description": "CallbackUrl", + "title": "", + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + }, + "Fields": { + "description": "Select a field you want to retrieve", + "items": { + "description": "A field from the selected table", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetFields", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "Table": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-values": { + "operationId": "GetFields", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "Table": { + "parameter": "TableId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Field" + }, + "type": "array", + "x-ms-summary": "Select" + }, + "Filters": { + "description": "Field with filters that will be applied when retrieving data", + "items": { + "properties": { + "Field": { + "description": "A field from the selected table", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetFields", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "Table": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-values": { + "operationId": "GetFields", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "Table": { + "parameter": "TableId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Field" + }, + "FilterValue": { + "description": "A valid Business Central filter value", + "type": "string", + "x-ms-summary": "Filter", + "x-ms-visibility": "advanced" + } + }, + "type": "object" + }, + "type": "array", + "x-ms-summary": "Filterfields" + }, + "TableId": { + "description": "TableId", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-values": { + "operationId": "GetTables", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-visibility": "important" + } + }, + "required": [ + "CallbackUrl", + "TableId" + ], + "type": "object" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Success", + "schema": {} + }, + "400": { + "$ref": "#/responses/Unexpected" + }, + "401": { + "$ref": "#/responses/Unauthorized" + }, + "402": { + "$ref": "#/responses/InvalidLicense" + }, + "404": { + "$ref": "#/responses/NotFound" + }, + "500": { + "$ref": "#/responses/Unexpected" + } + }, + "summary": "Triggers when a record is created (V2)", + "tags": [ + "triggers" + ], + "x-ms-trigger": "single" + }, + "x-ms-notification-content": { + "description": "This is the data that is send back", + "schema": { + "description": "Response", + "properties": {}, + "title": "Response", + "type": "object", + "x-ms-dynamic-properties": { + "itemValuePath": "schema", + "operationId": "GetWebhookRequestSchema", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "body/fields": { + "parameterReference": "body/Fields" + }, + "body/tableId": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-schema": { + "operationId": "GetWebhookRequestSchema", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "fields": { + "parameter": "Fields" + }, + "tableId": { + "parameter": "TableId" + } + }, + "value-path": "schema" + }, + "x-ms-summary": "Response" + } + } + }, + "/api/2.0/hooks/delete": { + "post": { + "consumes": [ + "application/json" + ], + "description": "A record is deleted in Business Central", + "operationId": "RecordDeletedV2", + "parameters": [ + { + "$ref": "#/parameters/Environment" + }, + { + "$ref": "#/parameters/Company" + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "CallbackUrl": { + "description": "CallbackUrl", + "title": "", + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + }, + "Fields": { + "description": "Select a field you want to retrieve", + "items": { + "description": "A field from the selected table", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetFields", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "Table": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-values": { + "operationId": "GetFields", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "Table": { + "parameter": "TableId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Field" + }, + "type": "array", + "x-ms-summary": "Select" + }, + "Filters": { + "description": "Field with filters that will be applied when retrieving data", + "items": { + "properties": { + "Field": { + "description": "A field from the selected table", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetFields", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "Table": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-values": { + "operationId": "GetFields", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "Table": { + "parameter": "TableId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Field" + }, + "FilterValue": { + "description": "A valid Business Central filter value", + "type": "string", + "x-ms-summary": "Filter", + "x-ms-visibility": "advanced" + } + }, + "type": "object" + }, + "type": "array", + "x-ms-summary": "Filterfields" + }, + "TableId": { + "description": "TableId", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-values": { + "operationId": "GetTables", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-visibility": "important" + } + }, + "required": [ + "CallbackUrl", + "TableId" + ], + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": {} + }, + "400": { + "$ref": "#/responses/Unexpected" + }, + "401": { + "$ref": "#/responses/Unauthorized" + }, + "402": { + "$ref": "#/responses/InvalidLicense" + }, + "404": { + "$ref": "#/responses/NotFound" + }, + "500": { + "$ref": "#/responses/Unexpected" + } + }, + "summary": "Triggers when a record is deleted (V2)", + "tags": [ + "triggers" + ], + "x-ms-trigger": "single" + }, + "x-ms-notification-content": { + "description": "This is the system id is that is send back", + "schema": { + "description": "Response", + "properties": {}, + "title": "Response", + "type": "object", + "x-ms-dynamic-properties": { + "itemValuePath": "schema", + "operationId": "GetWebhookRequestSchema", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "body/fields": { + "parameterReference": "body/Fields" + }, + "body/tableId": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-schema": { + "operationId": "GetWebhookRequestSchema", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "fields": { + "parameter": "Fields" + }, + "tableId": { + "parameter": "TableId" + } + }, + "value-path": "schema" + }, + "x-ms-summary": "Response" + } + } + }, + "/api/2.0/hooks/update": { + "post": { + "consumes": [ + "application/json" + ], + "description": "A record is updated in Business Central", + "operationId": "RecordUpdatedV2", + "parameters": [ + { + "$ref": "#/parameters/Environment" + }, + { + "$ref": "#/parameters/Company" + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "CallbackUrl": { + "description": "CallbackUrl", + "title": "", + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + }, + "Fields": { + "description": "Select a field you want to retrieve", + "items": { + "description": "A field from the selected table", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetFields", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "Table": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-values": { + "operationId": "GetFields", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "Table": { + "parameter": "TableId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Field" + }, + "type": "array", + "x-ms-summary": "Select" + }, + "Filters": { + "description": "Field with filters that will be applied when retrieving data", + "items": { + "properties": { + "Field": { + "description": "A field from the selected table", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "id", + "operationId": "GetFields", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "Table": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-values": { + "operationId": "GetFields", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "Table": { + "parameter": "TableId" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-summary": "Field" + }, + "FilterValue": { + "description": "A valid Business Central filter value", + "type": "string", + "x-ms-summary": "Filter", + "x-ms-visibility": "advanced" + } + }, + "type": "object" + }, + "type": "array", + "x-ms-summary": "Filterfields" + }, + "TableId": { + "description": "TableId", + "format": "int32", + "title": "", + "type": "integer", + "x-ms-dynamic-values": { + "operationId": "GetTables", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + } + }, + "value-path": "id", + "value-title": "name" + }, + "x-ms-visibility": "important" + } + }, + "required": [ + "CallbackUrl", + "TableId" + ], + "type": "object" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Success", + "schema": {} + }, + "400": { + "$ref": "#/responses/Unexpected" + }, + "401": { + "$ref": "#/responses/Unauthorized" + }, + "402": { + "$ref": "#/responses/InvalidLicense" + }, + "404": { + "$ref": "#/responses/NotFound" + }, + "500": { + "$ref": "#/responses/Unexpected" + } + }, + "summary": "Triggers when a record is updated (V2)", + "tags": [ + "triggers" + ], + "x-ms-trigger": "single" + }, + "x-ms-notification-content": { + "description": "This is the system id is that is send back", + "schema": { + "description": "Response", + "properties": {}, + "title": "Response", + "type": "object", + "x-ms-dynamic-properties": { + "itemValuePath": "schema", + "operationId": "GetWebhookRequestSchema", + "parameters": { + "Company": { + "parameterReference": "Company" + }, + "Environment": { + "parameterReference": "Environment" + }, + "body/fields": { + "parameterReference": "body/Fields" + }, + "body/tableId": { + "parameterReference": "body/TableId" + } + } + }, + "x-ms-dynamic-schema": { + "operationId": "GetWebhookRequestSchema", + "parameters": { + "Company": { + "parameter": "Company" + }, + "Environment": { + "parameter": "Environment" + }, + "fields": { + "parameter": "Fields" + }, + "tableId": { + "parameter": "TableId" + } + }, + "value-path": "schema" + }, + "x-ms-summary": "Response" + } + } + }, + "/api/2.0/hooks/{Id}": { + "delete": { + "description": "Deletes a webhook,", + "operationId": "DeleteTriggerV2", + "parameters": [ + { + "in": "query", + "name": "environment", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "company", + "required": true, + "type": "string" + }, + { + "description": "The id of the registered webhook", + "in": "path", + "name": "Id", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": {} + }, + "400": { + "$ref": "#/responses/Unexpected" + }, + "401": { + "$ref": "#/responses/Unauthorized" + }, + "402": { + "$ref": "#/responses/InvalidLicense" + }, + "404": { + "$ref": "#/responses/NotFound" + }, + "500": { + "$ref": "#/responses/Unexpected" + } + }, + "summary": "Deletes a registration webhook from the Business Central environment", + "tags": [ + "triggers" + ], + "x-ms-visibility": "internal" + } } }, - "x-ms-connector-metadata": [ - { - "propertyName": "Website", - "propertyValue": "https://www.gac.nl" - }, - { - "propertyName": "Privacy policy", - "propertyValue": "https://www.gac.nl/disclaimer" - }, - { - "propertyName": "Categories", - "propertyValue": "Productivity;Data" - } - ], "produces": [], "responses": { "BadRequest": { @@ -2923,5 +4058,19 @@ "description": "Trigger methods", "name": "triggers" } + ], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.gac.nl" + }, + { + "propertyName": "Privacy Policy", + "propertyValue": "https://www.gac.nl/disclaimer" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity;Data" + } ] } \ No newline at end of file diff --git a/certified-connectors/Connect2All/apiProperties.json b/certified-connectors/Connect2All/apiProperties.json index 195f2934f..687940e41 100644 --- a/certified-connectors/Connect2All/apiProperties.json +++ b/certified-connectors/Connect2All/apiProperties.json @@ -42,6 +42,6 @@ }, "iconBrandColor": "#FA9901", "publisher": "GAC Business Solutions", - "stackOwner": "GAC Buisness Solutions" + "stackOwner": "GAC Business Solutions" } -} +} \ No newline at end of file From 8e170d0bca3e01315c678fa0dda98da5f708f1b4 Mon Sep 17 00:00:00 2001 From: Joeri Onneweer Date: Mon, 5 Oct 2020 10:20:19 +0200 Subject: [PATCH 111/347] Fixed incorrect property --- certified-connectors/Connect2All/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Connect2All/apiDefinition.swagger.json b/certified-connectors/Connect2All/apiDefinition.swagger.json index c86f06292..f564062d0 100644 --- a/certified-connectors/Connect2All/apiDefinition.swagger.json +++ b/certified-connectors/Connect2All/apiDefinition.swagger.json @@ -309,7 +309,7 @@ "description": "The value to set for this field", "type": "string", "x-ms-summary": "Value to set", - "x-ms-visbility": "advanced" + "x-ms-visibility": "advanced" } }, "type": "object" From b08a6a11f524fb7fdd88d84bc4843f7c023bcad3 Mon Sep 17 00:00:00 2001 From: Joeri Onneweer Date: Mon, 5 Oct 2020 10:21:25 +0200 Subject: [PATCH 112/347] Fixed incorrect property --- certified-connectors/Connect2All/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Connect2All/apiDefinition.swagger.json b/certified-connectors/Connect2All/apiDefinition.swagger.json index f564062d0..9048cb9d9 100644 --- a/certified-connectors/Connect2All/apiDefinition.swagger.json +++ b/certified-connectors/Connect2All/apiDefinition.swagger.json @@ -36,7 +36,7 @@ "description": "The value to set for this field", "type": "string", "x-ms-summary": "Value to set", - "x-ms-visbility": "advanced" + "x-ms-visibility": "advanced" } }, "type": "object" From d9c4d7e185c3a3e2cc8f20232575c828a8bd3fb3 Mon Sep 17 00:00:00 2001 From: LegalBot Date: Mon, 5 Oct 2020 21:23:29 +0200 Subject: [PATCH 113/347] Legalbot AI Tools - connector submission (#487) * Added files required for certification process - apiDefinition.swagger.json - apiProperties.json - settings.json - icon.png - readme.md * Add icon.png file * Added settings.json file The file includes dummy data for connector ID and environment * Update apiDefinition.swagger.json * Update readme.md * Update readme.md Added link to language combintions * Update apiProperties.json * Update readme.md * Move from custom to certified connectors Moved LegalBot artifacts from custom-connectors to certified-connectors. Deleted settings.json and icon.png --- .../LegalBot/apiDefinition.swagger.json | 977 ++++++++++++++++++ .../LegalBot/apiProperties.json | 25 + certified-connectors/LegalBot/readme.md | 40 + 3 files changed, 1042 insertions(+) create mode 100644 certified-connectors/LegalBot/apiDefinition.swagger.json create mode 100644 certified-connectors/LegalBot/apiProperties.json create mode 100644 certified-connectors/LegalBot/readme.md diff --git a/certified-connectors/LegalBot/apiDefinition.swagger.json b/certified-connectors/LegalBot/apiDefinition.swagger.json new file mode 100644 index 000000000..00fb692bb --- /dev/null +++ b/certified-connectors/LegalBot/apiDefinition.swagger.json @@ -0,0 +1,977 @@ +{ + "swagger": "2.0", + "info": { + "title": "LegalBot AI Tools", + "version": "1.0", + "description": "Provides API access to Artificial Intelligence, NLP, Machine Translation and more. Specially designed AI and NLP functions for legal industry", + "contact": { + "name": "LegalBot.io Support", + "url": "https://legalbot.io/crm", + "email": "support@legalbot.io" + } + }, + "host": "api.legalbot.io", + "basePath": "/legal_ai/v1", + "schemes": [ + "https" + ], + "securityDefinitions": { + "apiKeyHeader": { + "type": "apiKey", + "name": "Ocp-Apim-Subscription-Key", + "in": "header" + }, + "apiKeyQuery": { + "type": "apiKey", + "name": "subscription-key", + "in": "query" + } + }, + "security": [ + { + "apiKeyHeader": [] + }, + { + "apiKeyQuery": [] + } + ], + "paths": { + "/translate/text": { + "post": { + "description": "Translates text from target language to source language", + "operationId": "Translate_Text", + "summary": "Translate Text", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "content type of the request", + "required": true, + "type": "string", + "default": "application/json", + "enum": [ + "application/json" + ], + "x-ms-visibility": "internal" + }, + { + "name": "send translation request", + "in": "body", + "schema": { + "$ref": "#/definitions/Send translation request" + }, + "description": "Request body for translation of text. 50,000,000 character limit (50 MB). Language codes follow ISO 639-1 Code two letter format other than Chinese simplified: zh-Hans and Chinese traditional: zh-Hant. Source language may be in Auto. It is also possible to write the English version of the name e.g. English, German, French, Russian", + "required": true + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Returns translated text", + "headers": { + "Content-Type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Receive translated text" + }, + "examples": { + "application/json": { + "message": "string", + "transactionID": "string", + "TranslatedText": "string", + "credits_used": 0, + "credits_remaining": 0, + "insufficient_credits": false + } + } + }, + "400": { + "description": "Error response in case of user input error including incorrect language combination or incorrect language format", + "headers": { + "content-type": { + "type": "string", + "description": "content type of the request" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + }, + "500": { + "description": "Error message related to failure of translation engine", + "headers": { + "content-type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + }, + "504": { + "description": "Error message related to timeout of service", + "headers": { + "content-type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + } + } + } + }, + "/translate/document": { + "post": { + "description": "Translates file content from source language to target language. ", + "operationId": "Translate_Documents", + "summary": "Translate Documents", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "content type of the request", + "required": true, + "type": "string", + "default": "application/json", + "enum": [ + "application/json" + ], + "x-ms-visibility": "internal" + }, + { + "name": "Send document translation request", + "in": "body", + "schema": { + "$ref": "#/definitions/Send document translation request" + }, + "description": "Request body for translation of a document. The file can be in HTML, PDF, .docx, .doc, .odt, .rtf, .txt, .pptx, .ppt, .xlsx format. Files must be converted to Base64 string format. Language codes follow ISO 639-1 Code two letter format other than Chinese simplified: zh-Hans and Chinese traditional: zh-Hant. Source language may be in Auto. It is also possible to write the English version of the name e.g. English, German, French, Russian", + "required": true + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Returns URL link to translated document", + "headers": { + "Content-Type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Receive document translation request" + }, + "examples": { + "application/json": { + "message": "string", + "document_link": "string", + "transactionID": "string", + "fileName": "string", + "credits_used": 0, + "credits_remaining": 0, + "insufficient_credits": false + } + } + }, + "400": { + "description": "Error with the request including invalid language pair or language code", + "headers": { + "content-type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + }, + "500": { + "description": "Error with the translation engine", + "headers": { + "content-type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + }, + "504": { + "description": "Error message due to timeout of request", + "headers": { + "content-type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + } + } + } + }, + "/NLP/document_similarity": { + "post": { + "description": "Calculates the similarity of two documents using Natural Language Processing", + "operationId": "Document_Similarity_NLP", + "summary": "Document Similarity NLP", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "content type of the request", + "required": true, + "type": "string", + "default": "application/json", + "enum": [ + "application/json" + ], + "x-ms-visibility": "internal" + }, + { + "name": "Document similarity with NLP", + "in": "body", + "schema": { + "$ref": "#/definitions/Send NLP document similarity" + }, + "description": "Request body containing two files for comparison and custom parameters. The files can be in HTML, PDF, .docx, .doc, .odt, .rtf or .txt format. Files must be converted to Base64 string format.", + "required": true + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Returns similarity score of the words in the documents", + "headers": { + "Content-Type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Receive NLP document similarity" + }, + "examples": { + "application/json": { + "message": "string", + "similarity": 0.938416639715411, + "transactionID": "string", + "text_analysed": "string", + "credits_used": 0, + "credits_remaining": 0, + "insufficient_credit": false + } + } + }, + "400": { + "description": "Error response for incorrect user input", + "headers": { + "content-type": { + "type": "string", + "description": "content type of the request" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + }, + "500": { + "description": "Error response for problem with service", + "headers": { + "content-type": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + }, + "504": { + "description": "Error response for timeout of service", + "headers": { + "content-type": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + } + } + } + }, + "/NLP/document_keywords": { + "post": { + "description": "Extracts and returns the top N keywords from a document.", + "operationId": "Top_Keywords", + "summary": "Top Keywords", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "description": "content type of the request", + "required": true, + "type": "string", + "default": "application/json", + "enum": [ + "application/json" + ], + "x-ms-visibility": "internal" + }, + { + "name": "send top N keywords request", + "in": "body", + "schema": { + "$ref": "#/definitions/Send top N keywords request" + }, + "description": "Request body to get top N keywords from document and custom parameters. The file can be in HTML, PDF, .docx, .doc, .odt, .rtf or .txt format. The files must be converted to Base64 string format.", + "required": true + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Returns top keywords from document", + "headers": { + "Content-Type": { + "type": "string", + "description": "content type of the response" + } + }, + "schema": { + "$ref": "#/definitions/Receive NLP keywords" + }, + "examples": { + "application/json": { + "message": "string", + "top_keywords": [ + "string" + ], + "transactionID": "string", + "credits_used": 0, + "credits_remaining": 0, + "insufficient_credits": false + } + } + }, + "400": { + "description": "Error response for user input error", + "headers": { + "content-type": { + "type": "string", + "description": "content type of the request" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + }, + "500": { + "description": "Error response for service error", + "headers": { + "content-type": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + }, + "504": { + "description": "Error response for timeout", + "headers": { + "content-type": { + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/Error message" + }, + "examples": { + "application/json": { + "message": "string", + "error_detail": "string" + } + } + } + } + } + } + }, + "definitions": { + "Error message": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "error_detail": { + "type": "string" + } + }, + "example": { + "message": "string", + "error_detail": "string" + } + }, + "Receive document translation request": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "document_link": { + "type": "string" + }, + "transactionID": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "credits_used": { + "type": "integer" + }, + "credits_remaining": { + "type": "integer" + }, + "insufficient_credits": { + "type": "boolean" + } + }, + "example": { + "message": "string", + "document_link": "string", + "transactionID": "string", + "fileName": "string", + "credits_used": 0, + "credits_remaining": 0, + "insufficient_credits": false + } + }, + "Receive NLP keywords": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "top_keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "transactionID": { + "type": "string" + }, + "credits_used": { + "type": "integer" + }, + "credits_remaining": { + "type": "integer" + }, + "insufficient_credits": { + "type": "boolean" + } + }, + "example": { + "message": "string", + "top_keywords": [ + "string" + ], + "transactionID": "string", + "credits_used": 0, + "credits_remaining": 0, + "insufficient_credits": false + } + }, + "Receive translated text": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "transactionID": { + "type": "string" + }, + "TranslatedText": { + "type": "string" + }, + "credits_used": { + "type": "integer" + }, + "credits_remaining": { + "type": "integer" + }, + "insufficient_credits": { + "type": "boolean" + } + }, + "example": { + "message": "string", + "transactionID": "string", + "TranslatedText": "string", + "credits_used": 0, + "credits_remaining": 0, + "insufficient_credits": false + } + }, + "Send top N keywords request": { + "type": "object", + "properties": { + "clean": { + "type": "boolean", + "description": "If set to true the text to be analyzed will be cleaned from punctuation, excessive white space and turned into lower case according to LegalBot.io model", + "title": "Clean text", + "enum": [ + true, + false + ], + "default": false + }, + "use_stopwords": { + "type": "boolean", + "description": "If set to true the text will be processed to remove words which do not contain important significance", + "title": "Use stop words", + "enum": [ + true, + false + ], + "default": false + }, + "stop_word_model": { + "type": "string", + "description": "The LegalBot.io custom stop word model to use when processing the document.", + "title": "Stop word model", + "default": "None", + "enum": [ + "None", + "Basic", + "Legal_v1", + "user_only" + ] + }, + "user_defined_stopwords": { + "type": "string", + "description": "User specific stop words to remove from the string. Each word separated by comma.", + "title": "Custom stop words" + }, + "num_keywords": { + "type": "integer", + "description": "The number of keywords to return", + "title": "Number of keywords", + "default": 5 + }, + "key_word_model": { + "type": "string", + "description": "The NLP keyword extraction model to use. \"word\" or \"noun\" keywords", + "title": "Keyword model", + "default": "word", + "enum": [ + "word", + "noun" + ] + }, + "exclude_words_shorter_than": { + "type": "integer", + "description": "Excludes words from analysis if their string length is shorter than number specified", + "title": "Exclude short words", + "default": 0 + }, + "file": { + "type": "object", + "properties": { + "fileContent": { + "type": "string", + "description": "File content of the first document. File can be in HTML, PDF, .docx, .doc, .odt, .rtf or .txt format. File must be converted to Base64 string format.", + "title": "File content" + }, + "name": { + "type": "string", + "description": "The name of the file", + "title": "File name" + } + }, + "required": [ + "fileContent", + "name" + ] + } + }, + "example": { + "clean": false, + "use_stopwords": false, + "stop_word_model": "string", + "user_defined_stopwords": "string", + "num_keywords": 0, + "key_word_model": "string", + "exclude_words_shorter_than": 0, + "file": { + "fileContent": "string", + "name": "string" + } + }, + "required": [ + "clean", + "file", + "key_word_model", + "num_keywords", + "stop_word_model", + "use_stopwords" + ] + }, + "Send document translation request": { + "type": "object", + "properties": { + "source_language": { + "type": "string", + "description": "The source language of the document. Language codes follow ISO 639-1 Code two letter format other than Chinese simplified: zh-Hans and Chinese traditional: zh-Hant. Source language may be in Auto. It is also possible to write the English version of the name e.g. English, German, French, Russian. It is possible to specify Auto as a value.", + "title": "Source language" + }, + "target_language": { + "type": "string", + "description": "The target language you want the document translated into. Language codes follow ISO 639-1 Code two letter format other than Chinese simplified: zh-Hans and Chinese traditional: zh-Hant. Source language may be in Auto. It is also possible to write the English version of the name e.g. English, German, French, Russian.", + "title": "Target language" + }, + "file": { + "type": "object", + "properties": { + "fileContent": { + "type": "string", + "description": "The file content of the document in Base64 string format. The file can be in HTML, PDF, .docx, .doc, .odt, .rtf, .txt, .pptx, .ppt, .xlsx format.", + "title": "File content" + }, + "name": { + "type": "string", + "description": "The name of the file with extension", + "title": "File name" + } + }, + "required": [ + "fileContent", + "name" + ] + } + }, + "example": { + "source_language": "string", + "target_language": "string", + "file": { + "fileContent": "string", + "name": "string" + } + }, + "required": [ + "file", + "source_language", + "target_language" + ] + }, + "Send NLP document similarity": { + "type": "object", + "properties": { + "clean": { + "type": "boolean", + "description": "If set to true the text to be analyzed will be cleaned from punctuation, excessive white space and turned into lower case according to LegalBot.io model", + "title": "Clean text", + "enum": [ + true, + false + ], + "default": false + }, + "use_stopwords": { + "type": "boolean", + "description": "If set to true the text will be processed to remove words which do not contain important significance", + "title": "Use stop words", + "enum": [ + true, + false + ], + "default": false + }, + "stop_word_model": { + "type": "string", + "description": "The LegalBot.io custom stop word model to use when processing the document.", + "title": "Stop word model", + "default": "None", + "enum": [ + "None", + "Basic", + "Legal_v1", + "user_only" + ] + }, + "user_defined_stopwords": { + "type": "string", + "description": "User specific stop words to remove from the string. Each word separated by comma.", + "title": "Custom stop words" + }, + "lemmatize": { + "type": "boolean", + "description": "If set to true each word will be processed to change the word to its root word or lemma e.g. runs, running, ran = run", + "title": "Lemmatize string", + "enum": [ + true, + false + ], + "default": false + }, + "stemming": { + "type": "boolean", + "description": "If set to true each word will be processed to the word to its stem word e.g. intelligent = intellig", + "title": "Stem string", + "enum": [ + true, + false + ], + "default": false + }, + "exclude_words_shorter_than": { + "type": "integer", + "description": "Excludes words from analysis if their string length is shorter than number specified", + "title": "Exclude short words", + "default": 0 + }, + "file1": { + "type": "object", + "properties": { + "fileContent": { + "type": "string", + "description": "File content of the first document. File can be in HTML, PDF, .docx, .doc, .odt, .rtf or .txt format. File must be converted to Base64 string format.", + "title": "File Content 1" + }, + "name": { + "type": "string", + "description": "The name of the first file", + "title": "File name 1" + } + }, + "required": [ + "fileContent", + "name" + ] + }, + "file2": { + "type": "object", + "properties": { + "fileContent": { + "type": "string", + "description": "File content of the second document. File can be in HTML, PDF, .docx, .doc, .odt, .rtf or .txt format. File must be converted to Base64 string format.", + "title": "File Content 2" + }, + "name": { + "type": "string", + "description": "The name of the second file", + "title": "File Name 2" + } + }, + "required": [ + "fileContent", + "name" + ] + } + }, + "example": { + "clean": false, + "use_stopwords": false, + "stop_word_model": "string", + "user_defined_stopwords": "string", + "lemmatize": false, + "stemming": false, + "exclude_words_shorter_than": 0, + "file1": { + "fileContent": "string", + "name": "string" + }, + "file2": { + "fileContent": "string", + "name": "string" + } + }, + "required": [ + "clean", + "file1", + "file2", + "lemmatize", + "stemming", + "stop_word_model", + "use_stopwords" + ] + }, + "Send translation request": { + "type": "object", + "properties": { + "target_language": { + "type": "string", + "description": "The target language to translate the text into. Language codes follow ISO 639-1 Code two letter format other than Chinese simplified: zh-Hans and Chinese traditional: zh-Hant. Source language may be in Auto. It is also possible to write the English version of the name e.g. English, German, French, Russian", + "title": "Target language" + }, + "source_language": { + "type": "string", + "description": "The source language of the text. Language codes follow ISO 639-1 Code two letter format other than Chinese simplified: zh-Hans and Chinese traditional: zh-Hant. Source language may be in Auto. It is also possible to write the English version of the name e.g. English, German, French, Russian. It is possible to specify Auto as a value.", + "title": "Source language" + }, + "text_to_translate": { + "type": "string", + "description": "This is the text you want translated", + "title": "Text to translate" + } + }, + "example": { + "target_language": "string", + "source_language": "string", + "text_to_translate": "string" + }, + "required": [ + "source_language", + "target_language", + "text_to_translate" + ] + }, + "Receive NLP document similarity": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "similarity": { + "type": "number" + }, + "transactionID": { + "type": "string" + }, + "text_analysed": { + "type": "string" + }, + "credits_used": { + "type": "integer" + }, + "credits_remaining": { + "type": "integer" + }, + "insufficient_credit": { + "type": "boolean" + } + }, + "example": { + "message": "string", + "similarity": 0.4343482942552459, + "transactionID": "string", + "text_analysed": "string", + "credits_used": 0, + "credits_remaining": 0, + "insufficient_credit": false + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://legalbot.io" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://legalbot.io/privacy.html" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;website" + } + ] +} diff --git a/certified-connectors/LegalBot/apiProperties.json b/certified-connectors/LegalBot/apiProperties.json new file mode 100644 index 000000000..cde4724bb --- /dev/null +++ b/certified-connectors/LegalBot/apiProperties.json @@ -0,0 +1,25 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API Key for this api", + "tooltip": "Provide your API Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#131347", + "capabilities": [ + "actions" + ], + "publisher": "LegalBot.io", + "stackOwner": "LegalBot.io" + } +} diff --git a/certified-connectors/LegalBot/readme.md b/certified-connectors/LegalBot/readme.md new file mode 100644 index 000000000..cea75d673 --- /dev/null +++ b/certified-connectors/LegalBot/readme.md @@ -0,0 +1,40 @@ + +# LegalBot AI Tools +LegalBot AI Tools lets you easily access Neuro Linguistic Programming (NLP) models, machine translation and legal content. You have the ability to customise the AI models to suit your particular needs. Functionality is specifically designed for the automation of tasks in the legal industry but is also useful for finance industry and any international business department. The functions specialise in handling and analysing documents and text. + +## Setup + +1. Access to the API is through and API access key. To obtain an API key go to [LegalBot.io](https://legalbot.io) or email support@legalbot.io +2. Ensure you have sufficient credits to perform your operations. More details on pricing are available at [LegalBot.io](https://legalbot.io) or email support@legalbot.io +3. You will be requested to enter the API key when creating the new connector. + +## Supported Actions + +The following actions are supported: + +* `Translate document`: Translates a document from the target language to source language whilst keeping the formatting of the document (55 languages supported). The machine translation uses legal translation dictionaries to give more accurate results for legal documents. Your files can be in HTML, PDF, .docx, .doc, .odt, .rtf, .txt, .pptx, .ppt, .xlsx format. Files must be converted to Base64 string format before sending e.g. base64(outputs('Get_file_content')?['body']). Language codes follow ISO 639-1 Code two letter format other than Chinese simplified: zh-Hans and Chinese traditional: zh-Hant. Source language may be in Auto. It is also possible to write the English version of the name e.g. English, German, French, Russian. Possible language combinations can be found [here.](https://legalbot.io/translate/) + +* `Translate text`: Translates text from the target language to source language (55 languages supported). The service supports a maximum 50,000,000 character limit (50 MB) per call however make sure your input fields will allow this length. The machine translation uses legal translation dictionaries to give more accurate results for legal texts. Language codes follow ISO 639-1 Code two letter format other than Chinese simplified: zh-Hans and Chinese traditional: zh-Hant. Source language may be in Auto. It is also possible to write the English version of the name e.g. English, German, French, Russian. Possible language combinations can be found [here.](https://legalbot.io/translate/) + +* `Document similarity with NLP`: Compares how similar two documents are using NLP techniques. You can easily customise your AI model by changing the input parameters. The files can be in HTML, PDF, .docx, .doc, .odt, .rtf or .txt format. Files must be converted to Base64 string format before sending e.g. base64(outputs('Get_file_content')?['body']). Input parameters include: + * `Clean text`: if set to true this will convert words in the document text to lowercase and remove punctuation and whitespace + * `Use stop words`: if set to true then the text will be processed through a stop word engine to remove your own custom stop words or those defined in a particular stop word model + * `Stop word model`: if you have chosen to use stop words then you can customise the stop word model you use. Available are Basic: common words like and and I; Legal_V1: words specifically used in agreements; user_only: this allows you to develop and use your own custom stop words for processing + * `Custom stop words`: enter any specific stop words you want excluded from analysis. This is useful to fine tune your NLP analysis. Words are separated by a comma like this: these, are, my, custom, stop, words + * `Lemmatize string`: if set to true the words in the document text will be lemmatized to their lemma or part of speech. For example the words "liabilities and liability" are converted to the same lemma of "liability and liability" and "warranty and warranties" into "warranty and warranty". + * `Stem string`: if set to true the words in the document will be converted to their stem origin. This can help you customise your analysis. For example the words "liabilities and liability" are converted to the same stem of "liabil and liabil" and "warranty and warranties" into "warranti and warranti". Stemming is usually considered easier to implement tha lemmatizing. + * `Exclude short words`: Set the number to higher than 0 to exclude words equal to or shorter than the number selected. For example if set to 3 all words with a charater length 3 or less will be excluded: e.g. "sue" would be excluded but not "sues". You must set use stop words to true to enable this feature. + * `File content`: requires the content of two files in base64 string format along with their file names. + +* `Top Keywords`: Extracts and returns the top keywords from a document. You can easily customise your AI model by changing the input parameters. The files can be in HTML, PDF, .docx, .doc, .odt, .rtf or .txt format. Files must be converted to Base64 string format before sending e.g. base64(outputs('Get_file_content')?['body']). Input parameters include: + * `Number of keywords`: the number of keywords you would like to receive back + * `Keyword model`: this can be set to either word model or noun model for keywords. An example of the difference is: the top 3 key words in the following sentence "LegalBot.io makes it fun, fun, fun and easy to use and create NLP and AI models!" would be 'fun', 'and', 'LegalBot.io' for the word model whilst the noun model would return 'legalbot.io', 'nlp', 'ai'. By customising the parameters below you can fine tune your results. + * `Clean text`: if set to true this will convert words in the document text to lowercase and remove punctuation and whitespace + * `Use stop words`: if set to true then the text will be processed through a stop word engine to remove your own custom stop words or those defined in a particular stop word model + * `Stop word model`: if you have chosen to use stop words then you can customise the stop word model you use. Available are Basic: common words like and and I; Legal_V1: words specifically used in agreements; user_only: this allows you to develop and use your own custom stop words for processing + * `Custom stop words`: enter any specific stop words you want excluded from analysis. This is useful to fine tune your NLP analysis. Words are separated by a comma like this: these, are, my, custom, stop, words + * `Lemmatize string`: if set to true the words in the document text will be lemmatized to their lemma or part of speech. For example the words "liabilities and liability" are converted to the same lemma of "liability and liability" and "warranty and warranties" into "warranty and warranty". + * `Stem string`: if set to true the words in the document will be converted to their stem origin. This can help you customise your analysis. For example the words "liabilities and liability" are converted to the same stem of "liabil and liabil" and "warranty and warranties" into "warranti and warranti". Stemming is usually considered easier to implement tha lemmatizing. + * `Exclude short words`: Set the number to higher than 0 to exclude words equal to or shorter than the number selected. For example if set to 3 all words with a charater length 3 or less will be excluded: e.g. "sue" would be excluded but not "sues". You must set use stop words to true to enable this feature. + * `File content`: requires the content of a file in base64 string format along with its file name. + From 3877fd9793ecf071360fc04fcaa31aba88f3a299 Mon Sep 17 00:00:00 2001 From: Rambatla Venkat Rao <68921481+RamboV@users.noreply.github.com> Date: Tue, 6 Oct 2020 04:37:06 +0530 Subject: [PATCH 114/347] Added readme.md (#477) * Added HYAS Insight in Certified Connectors Folder * Readded HYAS Insight * Added HYAS Insight to Dev Branch * Added HYAS Insight to Dev Branch * Add files via upload * Add files via upload * Delete icon.png * Delete settings.json * Delete apiDefinition.swagger.json * Delete apiProperties.json * Add files via upload * Delete apiDefinition.swagger.json * Delete apiProperties.json * Delete icon.png * Delete settings.json * Added HYAS Insight to Certified Connectors Folder * Update apiProperties.json * Delete apiDefinition.swagger.json * Delete apiProperties.json * Delete icon.png * Delete settings.json * Added new set of files * Update apiProperties.json * Delete icon.png * Delete settings.json * Create readme.md * Update readme.md * Update readme.md Co-authored-by: Rambatza Venkat Rao --- certified-connectors/HYAS Insight/readme.md | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 certified-connectors/HYAS Insight/readme.md diff --git a/certified-connectors/HYAS Insight/readme.md b/certified-connectors/HYAS Insight/readme.md new file mode 100644 index 000000000..db8d69657 --- /dev/null +++ b/certified-connectors/HYAS Insight/readme.md @@ -0,0 +1,28 @@ +# HYAS Insight Connector + +HYAS Insight integration to Microsoft Azure Sentinel provides direct, high volume access to HYAS Insight data. It enables investigators and analysts to understand and defend against cyber adversaries and their infrastructure. + +## Pre-requisites +You will need the following to proceed: +* A Microsoft Power Apps or Power Automate plan with custom connector feature +* An Azure subscription +* HYAS Insight API Key + +## Supported Operations +The connector supports the following operations: +* `Retrieve Passive DNS information for domain`: Retrieve Passive DNS enrichment data for domain. +* `Retrieve Passive DNS information for IP address`: Retrieve Passive DNS enrichment data for IP address. +* `Retrieve Historic WHOIS information for domain`: Retrieve Historic WHOIS enrichment data for domain. +* `Retrieve Historic WHOIS information for email address`: Retrieve Historic WHOIS enrichment data for email address. +* `Retrieve Historic WHOIS information for phone number`: Retrieve Historic WHOIS enrichment data for phone number. +* `Retrieve Current WHOIS information for domain`: Retrieve Current WHOIS enrichment data for domain. +* `Retrieve Dynamic DNS information for IP address`: Retrieve Dynamic DNS enrichment data for IP address. +* `Retrieve Dynamic DNS information for email address`: Retrieve Dynamic DNS enrichment data for email address. +* `Retrieve Passive Hash information for IP address`: Retrieve Passive Hash enrichment data for IP address. +* `Retrieve Sinkhole information for IP address`: Retrieve Sinkhole enrichment data for IP address. +* `Retrieve SSL certificate information for IP address`: Retrieve SSL certificate enrichment data for IP address. +* `Retrieve Device Geo information for IPv4 address`: Retrieve Device Geo enrichment data for IPv4 address. +* `Retrieve Device Geo information for IPv6 address`: Retrieve Device Geo enrichment data for IPv6 address. + +## Support and documentation: +For all the support requests and general queries you can contact support@hyas.com or visit [contact-us](https://www.hyas.com/contact) From 925eee686a53975ea6340ed9bf62206268acfd37 Mon Sep 17 00:00:00 2001 From: eshupps Date: Mon, 5 Oct 2020 19:13:47 -0500 Subject: [PATCH 115/347] Correct wording in readme.md --- certified-connectors/PowerToolsPRO/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/PowerToolsPRO/readme.md b/certified-connectors/PowerToolsPRO/readme.md index af3ecd4c0..fb60c459b 100644 --- a/certified-connectors/PowerToolsPRO/readme.md +++ b/certified-connectors/PowerToolsPRO/readme.md @@ -1,6 +1,6 @@ ## Apptigent PowerTools PRO -Create user-driven solutions that solve everyday business problems in a fraction of the time with the ultimate FREE power user toolkit. Manipulate text, modify collections, format dates and times, convert currency, perform advanced mathematical calculations, shorten URL's, encode strings, and more in just a few clicks. No need to learn complex formulas or expression syntax, PowerTools takes care of all the heavy lifting so users can be instantly more productive. With a powerful toolkit of advanced capabilities at their disposal, every user in the organization will have the ability to deliver outstanding results. +Create user-driven solutions that solve everyday business problems in a fraction of the time with the ultimate toolkit for Power Platform professionals. Redact a sensitive document, localize currencies and dates, translate text into multiple languages, perform advanced calculations, convert text to speech and more with only a few clicks. PowerTools PRO eliminates the need for complex expression syntax and formulas, putting the power to build advanced solutions back in the hands of business users. Increase productivity, reduce delivery time and accelerate adoption with a powerful set of utilities designed to supercharge no-code apps, forms and workflows. ## Prerequisites From 8ce0e8fa5ea9867b13593abf208631dcfa16949e Mon Sep 17 00:00:00 2001 From: DominikAmann Date: Tue, 6 Oct 2020 15:48:14 +0200 Subject: [PATCH 116/347] Extend properties Added the property "objectID" to process data violation trigger to allow a further use case. --- .../FORCAM FORCE Bridge/apiDefinition.swagger.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/certified-connectors/FORCAM FORCE Bridge/apiDefinition.swagger.json b/certified-connectors/FORCAM FORCE Bridge/apiDefinition.swagger.json index 46a02fc45..dd1d629c2 100644 --- a/certified-connectors/FORCAM FORCE Bridge/apiDefinition.swagger.json +++ b/certified-connectors/FORCAM FORCE Bridge/apiDefinition.swagger.json @@ -3548,6 +3548,7 @@ "type": "object", "required": [ "callbackID", + "objectID", "timestamp", "eventType", "eventName", @@ -3559,6 +3560,9 @@ "callbackID": { "type": "string" }, + "objectID": { + "type": "string" + }, "timestamp": { "type": "string" }, From fa12e34dba860e297c18e22d2f3b7ffc63d4d914 Mon Sep 17 00:00:00 2001 From: Cloudmersive <35204726+Cloudmersive@users.noreply.github.com> Date: Wed, 7 Oct 2020 10:52:30 -0700 Subject: [PATCH 117/347] Correction --- certified-connectors/Cloudmersive Currency/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Cloudmersive Currency/Readme.md b/certified-connectors/Cloudmersive Currency/Readme.md index 2c569888e..7b1f40a24 100644 --- a/certified-connectors/Cloudmersive Currency/Readme.md +++ b/certified-connectors/Cloudmersive Currency/Readme.md @@ -1,5 +1,5 @@ -## Cloudmersive Video and Media +## Cloudmersive Currency [Currency API](https://cloudmersive.com/currency-api) is critical for working with prices and currencies, enabling conversion between over 30 currencies, and retrieving the latest exchange rates. Cloudmersive Currency covers a wide array of finance and pricing needs. Stateless high-security processing ensures fast performance and strong security. From eb196cafe8c946e2678363d69cabf91508c7fe0c Mon Sep 17 00:00:00 2001 From: Cloudmersive <35204726+Cloudmersive@users.noreply.github.com> Date: Wed, 7 Oct 2020 10:52:50 -0700 Subject: [PATCH 118/347] Additional correction --- certified-connectors/Cloudmersive Video and Media/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Cloudmersive Video and Media/Readme.md b/certified-connectors/Cloudmersive Video and Media/Readme.md index 8cbb696c8..bd3d577ba 100644 --- a/certified-connectors/Cloudmersive Video and Media/Readme.md +++ b/certified-connectors/Cloudmersive Video and Media/Readme.md @@ -1,5 +1,5 @@ -## Cloudmersive Currency +## Cloudmersive Video and Media [Video and Media API](https://cloudmersive.com/video-and-media-services-api) covers a wide array of common video and audio processing needs, including encoding, decoding, editing, resizing, moderating and extracting metadata. Stateless high-security processing ensures fast performance and strong security. From eb16d89d55204219565da573e171c81f0396fb5a Mon Sep 17 00:00:00 2001 From: Skiply Date: Wed, 7 Oct 2020 20:21:14 +0200 Subject: [PATCH 119/347] Add Ubiqod by Skiply connector (#493) * First public release * Add new line after the end * Minor description changes --- .../Ubiqod by Skiply/Readme.md | 43 +++ .../apiDefinition.swagger.json | 273 ++++++++++++++++++ .../Ubiqod by Skiply/apiProperties.json | 23 ++ 3 files changed, 339 insertions(+) create mode 100644 certified-connectors/Ubiqod by Skiply/Readme.md create mode 100644 certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json create mode 100644 certified-connectors/Ubiqod by Skiply/apiProperties.json diff --git a/certified-connectors/Ubiqod by Skiply/Readme.md b/certified-connectors/Ubiqod by Skiply/Readme.md new file mode 100644 index 000000000..222a8c8ca --- /dev/null +++ b/certified-connectors/Ubiqod by Skiply/Readme.md @@ -0,0 +1,43 @@ + +## Ubiqod by Skiply +Ubiqod provides a simple and powerfull platform to connect your Skiply connected buttons or QR Codes to third party platforms. +This connector will trigger a flow each time data is sent by a device belonging to the configured group. + +## Prerequisites +You will need the following to proceed: +* A Microsoft Power Apps or Power Automate plan +* An Ubiqod subscription with Skiply buttons activated +The Ubiqod API Key can be found in the "Account" section of your Ubiqod backend. + +## Prepare your device +Before adding the Ubiqod trigger in Power Automate, pay attention to the following points: +* The connector will be linked to a group. Make sure at least one group exists in your Ubiqod backend. +* If your device is not linked to a Label Template, the default label will apply. + +## Set up the connector +* Add the trigger "When data is received from devices" +* Enter your API Key if requested +* From the list of Group Names, choose the Group that should contain the devices you want to listen to +* Add the steps of your choice + +## Available fields +The following fields are available for mapping: +* Device Name: Device Name as defined in the Ubiqod platform. This name is also visible on the device itself. +* Device Label: Device Label as defined in the Ubiqod platform. Can be an indoor location or any other element that idetifies the device. +* Request Date: Date of the request from Ubiqod server. +* Action Label: Label of the action. Can be the label of a button, or the label of a code, if code mode is activated. +* Times Button Pressed: For non-code mode, indicates the number of times the same button has been pressed. Always at 1 in code mode. +* Site Id: Ubiqod ID of the site associated with the device. +* Site Label: Ubiqod label of the site associated with the device. +* Badge: Will be 1 if badge was used, 0 otherwise. + +## Normal mode vs code mode +In the configuration of your device, you can force the use of code mode. +If you press button 1 and button 2, in normal mode, 2 separate requests will be sent (one for each button). In code mode, this will only send one request, with code "12" (you can configure the associated Label in your Label Template). + +## Test the connection +* Tests accounts include virtual devices which behave in exactly the same way as physical devices. Press the "calculator button" in the device list to launch the simulator. Press one or more buttons, and wait until the 3 green lights stay on for one second (usually 10 seconds after the first press). + +## Supported Operations +The connector supports only one public operation: +* DataIn (triggered each time that a button send data) diff --git a/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json b/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json new file mode 100644 index 000000000..4bbbd1127 --- /dev/null +++ b/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json @@ -0,0 +1,273 @@ +{ + "swagger": "2.0", + "info": { + "title": "Ubiqod by Skiply", + "description": "Ubiqod provides a simple and powerfull platform to connect your Skiply connected buttons or QR Codes to third party platforms. This connector will trigger a flow each time data is sent by a device belonging to the configured group.", + "contact": { + "name": "Skiply Support", + "url": "https://desk.zoho.com/portal/skiply", + "email": "ubiqod@skiply.zohodesk.com" + }, + "version": "1.0" + }, + "host": "admin.ubiqod.com", + "basePath": "/api", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [], + "paths": { + "/key/unsubscribe/{routingId}": { + "delete": { + "responses": { + "default": { + "description": "default" + } + }, + "operationId": "DeleteRouting", + "x-ms-visibility": "internal", + "summary": "Delete a routing", + "description": "Delete the routing of data to the trigger.", + "parameters": [ + { + "name": "routingId", + "in": "path", + "required": true, + "type": "string", + "description": "The routingId is the unique identifier of the routing in the DB.", + "x-ms-url-encoding": "single", + "x-ms-summary": "Routing ID" + }, + { + "name": "Content-Type", + "in": "header", + "required": false, + "type": "string", + "default": "application/json", + "description": "The Content-Type specifies that the data is sent in json format.", + "x-ms-summary": "Content Type of the data" + } + ] + } + }, + "/key/subscribe": { + "x-ms-notification-content": { + "schema": { + "type": "object", + "properties": { + "device_name": { + "type": "string", + "description": "Device Name as defined in the Ubiqod platform. This name is also visible on the device itself.", + "title": "Device Name" + }, + "device_label": { + "type": "string", + "description": "Device Label as defined in the Ubiqod platform. Can be a place or anything helping to identify the device.", + "title": "Device Label" + }, + "request_date": { + "type": "string", + "description": "Date of the request from Ubiqod server.", + "title": "Request Date" + }, + "button_label": { + "type": "string", + "description": "Label of the action. Can be the label of a button, or the label of a code, if code mode is activated.", + "title": "Action Label" + }, + "times_button_pressed": { + "type": "integer", + "format": "int32", + "description": "For non-code mode, indicates the number of times that the same button has been pressed.", + "title": "Times Button Pressed" + }, + "site_id": { + "type": "integer", + "format": "int32", + "description": "Ubiqod ID of the site associated with the device.", + "title": "Site Id" + }, + "site_label": { + "type": "string", + "description": "Ubiqod label of the site associated with the device.", + "title": "Site Label" + }, + "badge": { + "type": "integer", + "format": "int32", + "description": "Will be 1 if badge was used, 0 if not.", + "title": "Badge" + } + } + }, + "headers": { + "Content-Type": { + "description": "application/json", + "type": "string" + } + }, + "description": "Data In" + }, + "post": { + "responses": { + "default": { + "description": "default" + } + }, + "summary": "When data is received from devices", + "description": "This operation triggers when one of the devices in the target group sends data.", + "x-ms-visibility": "important", + "x-ms-trigger": "single", + "operationId": "DataIn", + "parameters": [ + { + "name": "provider", + "in": "query", + "required": true, + "type": "string", + "default": "pa", + "description": "This parameter is used by Ubiqod to determine the origin of the request.", + "x-ms-visibility": "internal", + "x-ms-summary": "Origin of the request" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal", + "description": "The Content-Type specifies that the data is sent on json format.", + "x-ms-summary": "Content Type of Data" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "group_id": { + "type": "integer", + "description": "Name of the Ubiqod group you want to link to this trigger.", + "title": "Group Name", + "format": "int32", + "x-ms-visibility": "important", + "x-ms-dynamic-values": { + "operationId": "GetGroupsList", + "value-path": "id", + "value-title": "group_name", + "parameters": { + "provider": "pa" + } + } + }, + "hookUrl": { + "type": "string", + "description": "URL of the webhook where we will post data.", + "title": "Webhook URL", + "format": "byte", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + }, + "x-ms-visibility": "important", + "required": [ + "hookUrl", + "group_id" + ] + }, + "x-ms-visibility": "important" + } + ] + } + }, + "/key/getGroupsByName": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "ID of the group in the Ubiqod account.", + "title": "Group ID" + }, + "group_name": { + "type": "string", + "description": "Name of the group in the Ubiqod account.", + "title": "Group Name" + } + } + } + } + } + }, + "operationId": "GetGroupsList", + "summary": "Retrieve group list for user", + "description": "Retrieve group list for user, to be used in dynamic fields.", + "parameters": [ + { + "name": "provider", + "in": "query", + "required": true, + "type": "string", + "default": "pa", + "format": "byte", + "description": "This parameter is used by Ubiqod to determine the origin of the request.", + "x-ms-summary": "Origin of the request" + }, + { + "name": "Content-Type", + "in": "header", + "required": false, + "type": "string", + "default": "application/json", + "format": "byte", + "description": "The Content-Type specifies that the data is sent on json format.", + "x-ms-summary": "Content Type of data" + } + ], + "x-ms-visibility": "internal" + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.skiply.eu/en" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.skiply.eu/en/terms-and-conditions-of-use/" + }, + { + "propertyName": "Categories", + "propertyValue": "IOT" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "query", + "name": "api_key" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [] +} diff --git a/certified-connectors/Ubiqod by Skiply/apiProperties.json b/certified-connectors/Ubiqod by Skiply/apiProperties.json new file mode 100644 index 000000000..d5856670e --- /dev/null +++ b/certified-connectors/Ubiqod by Skiply/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "Provide your API Key.", + "tooltip": "You can find the API key in your Ubiqod settings.", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#eeeeee", + "capabilities": [], + "publisher": "Skiply", + "stackOwner": "Skiply" + } +} From eb274f8729cad62a578332844c9689dba0c260a0 Mon Sep 17 00:00:00 2001 From: "SerwerSMS.pl" Date: Thu, 8 Oct 2020 02:50:40 +0200 Subject: [PATCH 120/347] Update (#492) --- .../SerwerSMS/apiDefinition.swagger.json | 484 ++++++++++++++++++ .../SerwerSMS/apiProperties.json | 36 ++ certified-connectors/SerwerSMS/readme.md | 9 + 3 files changed, 529 insertions(+) create mode 100644 certified-connectors/SerwerSMS/apiDefinition.swagger.json create mode 100644 certified-connectors/SerwerSMS/apiProperties.json create mode 100644 certified-connectors/SerwerSMS/readme.md diff --git a/certified-connectors/SerwerSMS/apiDefinition.swagger.json b/certified-connectors/SerwerSMS/apiDefinition.swagger.json new file mode 100644 index 000000000..ebf499313 --- /dev/null +++ b/certified-connectors/SerwerSMS/apiDefinition.swagger.json @@ -0,0 +1,484 @@ +{ + "basePath": "/", + "consumes": [], + "definitions": {}, + "host": "flow.serwersms.pl", + "info": { + "contact": { + "name": "SerwerSMS", + "url": "https://serwersms.pl", + "email": "bok@serwersms.pl" + }, + "description": "SerwerSMS allows sending and receiving SMS messages. Our platform has the function of both single and mass SMS sending. Sending messages has never been so easy, fast and effective.", + "title": "SerwerSMS", + "version": "2.0" + }, + "parameters": {}, + "paths": { + "/action/add_blacklist": { + "post": { + "consumes": [ + "application/json" + ], + "description": "This operation add phone number to blacklist", + "operationId": "add_blacklist", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "phone": { + "description": "Specify the phone number you want to add to the blacklist", + "title": "Phone number", + "type": "string", + "x-ms-visibility": "important" + } + }, + "required": [ + "phone" + ], + "type": "object", + "x-ms-visibility": "important" + }, + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Response for action add_blacklist", + "schema": { + "properties": { + "id": { + "description": "id", + "format": "int32", + "type": "integer" + }, + "success": { + "description": "success", + "type": "boolean" + } + }, + "type": "object" + } + } + }, + "summary": "Add to blacklist", + "x-ms-visibility": "important" + } + }, + "/action/add_contact": { + "post": { + "consumes": [ + "application/json" + ], + "description": "This operation add contact to customer account", + "operationId": "add_contact", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "address": { + "description": "Specify the address of contact", + "title": "Address", + "type": "string", + "x-ms-visibility": "important" + }, + "city": { + "description": "Specify the city of contact", + "title": "City", + "type": "string", + "x-ms-visibility": "important" + }, + "company": { + "description": "Specify the company of contact", + "title": "Company", + "type": "string", + "x-ms-visibility": "important" + }, + "description": { + "description": "Specify the description of contact", + "title": "Description", + "type": "string", + "x-ms-visibility": "important" + }, + "email": { + "description": "Specify the email of contact", + "title": "Email", + "type": "string", + "x-ms-visibility": "important" + }, + "first_name": { + "description": "Specify the first name of contact", + "title": "First name", + "type": "string", + "x-ms-visibility": "important" + }, + "group_id": { + "description": "Specify the group name of contact", + "title": "Group name", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "get_group", + "value-path": "id", + "value-title": "title" + }, + "x-ms-visibility": "important" + }, + "last_name": { + "description": "Specify the last name of contact", + "title": "Last name", + "type": "string", + "x-ms-visibility": "important" + }, + "phone": { + "description": "Specify the phone number of contact", + "title": "Phone number", + "type": "string", + "x-ms-visibility": "important" + }, + "tax_id": { + "description": "Specify the VAT number of contact", + "title": "VAT number", + "type": "string", + "x-ms-visibility": "important" + } + }, + "required": [ + "phone" + ], + "type": "object", + "x-ms-visibility": "important" + }, + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Response for action add_contact", + "schema": { + "properties": { + "id": { + "description": "id", + "format": "int32", + "type": "integer" + }, + "success": { + "description": "success", + "type": "boolean" + } + }, + "type": "object" + } + } + }, + "summary": "Add a new contact", + "x-ms-visibility": "important" + } + }, + "/action/get_group": { + "get": { + "consumes": [ + "application/json" + ], + "description": "This operation retrieves contact groups", + "operationId": "get_group", + "parameters": [], + "responses": { + "200": { + "description": "Response for action get_group", + "schema": { + "items": { + "properties": { + "id": { + "description": "id", + "format": "int32", + "type": "integer" + }, + "title": { + "description": "title", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "summary": "Get groups", + "x-ms-visibility": "internal" + } + }, + "/action/get_sender": { + "get": { + "description": "This operation retrieves sender's name which can be used for sending SMS", + "operationId": "get_sender", + "parameters": [], + "responses": { + "200": { + "description": "Response for action get_sender", + "schema": { + "items": { + "properties": { + "id": { + "description": "id", + "type": "string" + }, + "title": { + "description": "title", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "summary": "Get senders", + "x-ms-visibility": "internal" + } + }, + "/action/send_sms": { + "post": { + "consumes": [ + "application/json" + ], + "description": "This operation send SMS messages", + "operationId": "send_sms", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "group_id": { + "description": "Specify the name of the group of recipients", + "title": "Group name", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "get_group", + "value-path": "id", + "value-title": "title" + }, + "x-ms-visibility": "important" + }, + "message": { + "description": "Specify the message of the SMS", + "title": "Message", + "type": "string", + "x-ms-visibility": "important" + }, + "phone": { + "description": "Specify the recipient's phone number", + "title": "Phone number", + "type": "string", + "x-ms-visibility": "important" + }, + "sender": { + "description": "Specify the sender name (only for FULL SMS)", + "title": "Sender name", + "type": "string", + "x-ms-dynamic-values": { + "operationId": "get_sender", + "value-path": "title", + "value-title": "title" + }, + "x-ms-visibility": "important" + }, + "utf": { + "description": "Select the option to enable sending special characters like cyrylica etc.", + "enum": [ + false, + true + ], + "title": "UCS2 encoding", + "type": "boolean", + "x-ms-visibility": "important" + } + }, + "required": [ + "message" + ], + "type": "object", + "x-ms-visibility": "important" + }, + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Response for action send_sms", + "schema": { + "properties": { + "queued": { + "description": "queued", + "format": "int32", + "type": "integer" + }, + "success": { + "description": "success", + "type": "boolean" + }, + "unsent": { + "description": "unsent", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + } + } + }, + "summary": "Send SMS message", + "x-ms-visibility": "important" + } + }, + "/action=get_group": {}, + "/blacklist/add": {}, + "/contacts/add": {}, + "/index.php": {}, + "/manage/environments/Default-ae6c6278-a863-4b44-9eaa-101d36b02ef2/": {}, + "/messages/send_sms": {}, + "/senders/index": {}, + "/trigger/get_answer": { + "post": { + "consumes": [ + "application/json" + ], + "description": "This operation triggers when a new message is received", + "operationId": "new_answer", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "type": { + "default": "NDI", + "description": "Specify the type of message received", + "enum": [ + "ECO", + "ND", + "NDI", + "MMS", + "2WAY" + ], + "title": "Type of message", + "type": "string", + "x-ms-visibility": "important" + } + }, + "required": [ + "type" + ], + "type": "object", + "x-ms-visibility": "important" + }, + "x-ms-visibility": "important" + } + ], + "responses": { + "200": { + "description": "Response for trigger get_answer", + "schema": { + "properties": { + "items": { + "description": "items", + "items": { + "properties": { + "blacklist": { + "description": "blacklist", + "type": "boolean" + }, + "id": { + "description": "id", + "format": "int32", + "type": "integer" + }, + "message_id": { + "description": "message_id", + "type": "string" + }, + "phone": { + "description": "phone", + "type": "string" + }, + "recived": { + "description": "recived", + "type": "string" + }, + "text": { + "description": "text", + "type": "string" + }, + "type": { + "description": "type", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "summary": "When new SMS message is received", + "x-ms-trigger": "batch", + "x-ms-trigger-metadata": { + "kind": "query", + "mode": "polling" + } + } + } + }, + "produces": [], + "responses": {}, + "schemes": [ + "https" + ], + "security": [ + { + "oauth2_auth": [ + "basic" + ] + } + ], + "securityDefinitions": { + "oauth2_auth": { + "authorizationUrl": "https://api2s2.serwersms.pl/oauth2/authorize", + "flow": "accessCode", + "scopes": { + "basic": "basic" + }, + "tokenUrl": "https://api2s2.serwersms.pl/oauth2/access_token", + "type": "oauth2" + } + }, + "swagger": "2.0", + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://serwersms.pl" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://serwersms.pl/dokumenty/8-polityka_prywatnosci" + }, + { + "propertyName": "Categories", + "propertyValue": "Marketing" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/SerwerSMS/apiProperties.json b/certified-connectors/SerwerSMS/apiProperties.json new file mode 100644 index 000000000..6b5ec653b --- /dev/null +++ b/certified-connectors/SerwerSMS/apiProperties.json @@ -0,0 +1,36 @@ +{ + "properties": { + "publisher": "SerwerSMS", + "stackOwner": "SerwerSMS", + "capabilities": [], + "connectionParameters": { + "token": { + "oAuthSettings": { + "clientId": "CLIENTID", + "customParameters": { + "authorizationUrl": { + "value": "https://api2s2.serwersms.pl/oauth2/authorize" + }, + "refreshUrl": { + "value": "https://api2s2.serwersms.pl/oauth2/refresh_token" + }, + "tokenUrl": { + "value": "https://api2s2.serwersms.pl/oauth2/access_token" + } + }, + "identityProvider": "oauth2", + "properties": { + "IsFirstParty": "False" + }, + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "scopes": [ + "basic" + ] + }, + "type": "oauthSetting" + } + }, + "iconBrandColor": "#DE2228" + } +} \ No newline at end of file diff --git a/certified-connectors/SerwerSMS/readme.md b/certified-connectors/SerwerSMS/readme.md new file mode 100644 index 000000000..1b931e7ce --- /dev/null +++ b/certified-connectors/SerwerSMS/readme.md @@ -0,0 +1,9 @@ +SerwerSMS allows sending and receiving SMS messages. Our platform has the function of both single and mass SMS sending. + +## Prerequisites + +To use the connector, you need to create an account at https://serwersms.pl and make a prepaid payment or sign a contract. Authorization is made on the basis of a login and password. + +## How to get credentials? + +Authorization takes place by entering the login and password established during registration. Registration is available at https://serwersms.pl \ No newline at end of file From a5d7037079efe441d29b091c74c60d566c7550d0 Mon Sep 17 00:00:00 2001 From: Skiply Date: Fri, 9 Oct 2020 18:56:31 +0200 Subject: [PATCH 121/347] Update category from IOT to Internet of Things (#497) --- .../Ubiqod by Skiply/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json b/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json index 4bbbd1127..6f0d9730e 100644 --- a/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json +++ b/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json @@ -251,7 +251,7 @@ }, { "propertyName": "Categories", - "propertyValue": "IOT" + "propertyValue": "Internet of Things" } ], "definitions": {}, From 2c00501d5d5ecb3e67472f5552d91ce25775d8f3 Mon Sep 17 00:00:00 2001 From: Andreas Date: Mon, 12 Oct 2020 10:22:26 +0200 Subject: [PATCH 122/347] Name change --- certified-connectors/Peltarion/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index 18a47964f..7bb050b2f 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "Peltarion", + "title": "Peltarion AI", "description": "Using this connector, you can connect your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data", "version": "1.0", "contact": { From 22102c190ee206c9f694b4ce34696ead500626cf Mon Sep 17 00:00:00 2001 From: Jens Kock Date: Mon, 12 Oct 2020 11:11:13 +0200 Subject: [PATCH 123/347] initial commit for COSMO Bot certification --- certified-connectors/COSMO Bot/Readme.md | 5 + .../COSMO Bot/apiDefinition.swagger.json | 1429 +++++++++++++++++ .../COSMO Bot/apiProperties.json | 43 + 3 files changed, 1477 insertions(+) create mode 100644 certified-connectors/COSMO Bot/Readme.md create mode 100644 certified-connectors/COSMO Bot/apiDefinition.swagger.json create mode 100644 certified-connectors/COSMO Bot/apiProperties.json diff --git a/certified-connectors/COSMO Bot/Readme.md b/certified-connectors/COSMO Bot/Readme.md new file mode 100644 index 000000000..ebc6edb47 --- /dev/null +++ b/certified-connectors/COSMO Bot/Readme.md @@ -0,0 +1,5 @@ +## COSMO Bot +COSMO Bot by COSMO CONSULT increases your business success through more efficiency in everyday life. If you answer a standard question today, you are wasting time. In contact with your customers, this is often a good opportunity to get to know each other and establish a relationship. But internally, from employee to employee, or when there is simply too much to do, it is a luxury that not everyone can allow themselves. This Connector allows you to extend the bots functionality and integrate other systems. + +## Prerequisites +To use this connector you need to have administrative access to a COSMO Bot Instance. [What is COSMO Bot?](https://cosma.cosmoconsult.com/?msg=Was+ist+COSMO+Bot%3F) [How do i get a COSMO Bot instance?](https://cosma.cosmoconsult.com/?msg=How+do+i+get+a+COSMO+Bot+instance%3F) \ No newline at end of file diff --git a/certified-connectors/COSMO Bot/apiDefinition.swagger.json b/certified-connectors/COSMO Bot/apiDefinition.swagger.json new file mode 100644 index 000000000..77b9bf28b --- /dev/null +++ b/certified-connectors/COSMO Bot/apiDefinition.swagger.json @@ -0,0 +1,1429 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0", + "title": "COSMO Bot", + "description": "COSMO Bot increases your business success through more efficiency in everyday life. If you answer a standard question today, you are wasting time. In contact with your customers, this is often a good opportunity to get to know each other and establish a relationship. But internally, from employee to employee, or when there is simply too much to do, it is a luxury that not everyone can allow themselves. This Connector allows you to extend the bots functionality and integrate other systems.", + "contact": { + "name": "COSMO CONSULT Support", + "url": "https://de.cosmoconsult.com/service/support/", + "email": "support.west@cosmoconsult.com" + } + }, + "host": "cc-bot-master-server.azurewebsites.net", + "basePath": "/api/bot/v1", + "schemes": [ + "https" + ], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://cosma.link/cc-bot" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.cosmoconsult.com/data-protection/" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Bot;Chatbot" + } + ], + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "X-ApiKey" + } + }, + "security": [ + { + "API Key": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/global-settings": { + "get": { + "summary": "Get global settings", + "operationId": "GetGlobalSettings", + "description": "Gets the global settings from the connected instance.", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetGlobalSettingsSchema", + "parameters": {} + } + } + } + } + } + }, + "/global-settings/schema": { + "get": { + "summary": "Get global settings schema", + "operationId": "GetGlobalSettingsSchema", + "x-ms-visibility": "internal", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + } + } + }, + "/ask": { + "post": { + "summary": "Ask COSMO Bot a question", + "operationId": "AskQuestion", + "description": "The bot will search through the knowledgebase and return the answer with the best match. Also returns the score.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "question" + ], + "properties": { + "question": { + "title": "Question", + "type": "string", + "example": "What is COSMO Bot?" + }, + "scoreThreshold": { + "title": "Score Threshold", + "description": "Minimum score of an answer for it to be returned.", + "type": "integer", + "example": 70, + "minimum": 0, + "maximum": 100 + } + } + } + } + ], + "responses": { + "200": { + "description": "Found a matching answer.", + "schema": { + "type": "object", + "required": [ + "foundAnswer" + ], + "properties": { + "foundAnswer": { + "title": "Found Answer", + "description": "Whether COSMO Bot found an answer that matched the question.", + "type": "boolean" + }, + "isSubAnswer": { + "title": "Is Shadow-Answer", + "description": "Whether the returned answer is a sub answer.", + "type": "boolean" + }, + "isTranslated": { + "title": "Was Question Translated", + "description": "Whether the question and returned answer was translated.", + "type": "boolean" + }, + "answer": { + "$ref": "#/definitions/Answer" + }, + "score": { + "title": "Score", + "description": "How confident the bot is that the returned answer is correct.", + "type": "integer", + "example": 90 + } + } + } + } + } + } + }, + "/parse": { + "post": { + "summary": "Convert COSMO Bot Script", + "operationId": "ParseText", + "description": "Run the given text through the COSMO Bot Script parser.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "inputText", + "outputFormat" + ], + "properties": { + "inputText": { + "title": "Input Text", + "type": "string" + }, + "outputFormat": { + "title": "Output Format", + "type": "string", + "default": "markdown", + "enum": [ + "markdown", + "html", + "plain" + ], + "x-ms-editor-options": { + "items": [ + { + "title": "Markdown", + "value": "markdown" + }, + { + "title": "HTML", + "value": "html" + }, + { + "title": "Plain text", + "value": "plain" + } + ] + } + } + } + } + } + ], + "responses": { + "200": { + "description": "Response", + "schema": { + "type": "object", + "required": [ + "outputText" + ], + "properties": { + "outputText": { + "title": "Output Text", + "description": "The parsed text returned by the COSMO Bot Script Parser.", + "type": "string" + } + } + } + } + } + } + }, + "/translate": { + "post": { + "summary": "Translate (markdown friendly)", + "operationId": "Translate", + "description": "Translate the given text while respecting the COSMO Bot dialect Markdown syntax.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "targetLanguageCode", + "inputText" + ], + "properties": { + "targetLanguageCode": { + "title": "Target Language", + "description": "The target language code (example: fr).", + "type": "string" + }, + "inputText": { + "title": "Text", + "description": "The text to translate.", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "Response", + "schema": { + "type": "object", + "required": [ + "outputText" + ], + "properties": { + "outputText": { + "title": "Translated Text", + "type": "string" + } + } + } + } + } + } + }, + "/get-all-topics": { + "post": { + "summary": "Get all topics", + "operationId": "GetAllTopics", + "description": "Gets all topics from the connected bot instance.", + "parameters": [], + "responses": { + "200": { + "description": "Returns a list of topics.", + "schema": { + "type": "object", + "required": [ + "topics" + ], + "properties": { + "topics": { + "title": "Topics", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/get-topic": { + "post": { + "summary": "Get topic", + "operationId": "GetTopic", + "description": "Gets a specific topic from the connected instance.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "topicName" + ], + "properties": { + "topicName": { + "title": "Topic Name", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "Returns a topic.", + "schema": { + "type": "object", + "required": [ + "topic" + ], + "properties": { + "topic": { + "title": "Topic", + "type": "object", + "required": [ + "name", + "description" + ], + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + } + } + } + } + } + } + } + }, + "/get-all-answers": { + "post": { + "summary": "Get all question-answer sets", + "operationId": "GetAllAnswers", + "description": "Gets all answers from the connected instance.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "properties": { + "filterByTopic": { + "title": "Filter by Topic (contains)", + "type": "string" + }, + "filterByShortDescription": { + "title": "Filter by Short Description (contains)", + "type": "string" + }, + "filterByQuestionText": { + "title": "Filter by Question Text (contains)", + "type": "string" + }, + "filterByAnswerText": { + "title": "Filter by Answer Text (contains)", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "Returns a list of answers.", + "schema": { + "type": "object", + "required": [ + "answers" + ], + "properties": { + "answers": { + "title": "Answers", + "type": "array", + "items": { + "$ref": "#/definitions/Answer" + } + } + } + } + } + } + } + }, + "/get-experts": { + "post": { + "summary": "Get experts for a topic", + "operationId": "GetExperts", + "description": "Gets all expoerts from the connected instance.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "topic" + ], + "properties": { + "topic": { + "title": "Topic", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "Returns a list of experts.", + "schema": { + "type": "object", + "required": [ + "expertEmails" + ], + "properties": { + "expertEmails": { + "title": "Experts", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/add-expert": { + "post": { + "summary": "Add an expert to a topic", + "operationId": "AddExpert", + "description": "The bot will add the expert to the provided topic.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "topic", + "expertEmail" + ], + "properties": { + "topic": { + "title": "Topic", + "type": "string" + }, + "expertEmail": { + "title": "Expert Email", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/remove-expert": { + "post": { + "summary": "Remove an expert from a topic", + "operationId": "RemoveExpert", + "description": "The bot will remove an expert from the provided topic. If no topic is given, the expert will be removed from all topics.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "expertEmail" + ], + "properties": { + "expertEmail": { + "title": "Expert Email", + "type": "string" + }, + "topic": { + "title": "Topic", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/add-topic": { + "post": { + "summary": "Add a new topic", + "operationId": "AddTopic", + "description": "Adds a new topic to the connected instance.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "name", + "description", + "expertEmails" + ], + "properties": { + "name": { + "title": "Topic Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "expertEmails": { + "title": "Expert Emails", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/rename-topic": { + "post": { + "summary": "Rename an existing topic", + "description": "Rename a existing topic from the connected instance.", + "operationId": "RenameTopic", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "name", + "newName" + ], + "properties": { + "name": { + "title": "Topic Name", + "description": "The name of the existing topic to be renamed.", + "type": "string" + }, + "newName": { + "title": "New Topic Name", + "description": "The name that the topic will be renamed to.", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/add-answer": { + "post": { + "summary": "Add a new question-answer set", + "description": "Adds a new question-answer set to the connected instance.", + "operationId": "AddAnswer", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "topic", + "shortDescription", + "questions", + "answerText" + ], + "properties": { + "topic": { + "title": "Topic", + "type": "string" + }, + "shortDescription": { + "title": "Short Description", + "type": "string" + }, + "questions": { + "title": "Questions", + "type": "array", + "items": { + "type": "string" + } + }, + "answerText": { + "title": "Answer Text", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/edit-answer": { + "post": { + "summary": "Edit an existing question-answer set", + "description": "Edit an existing question-answer set from the connected instance.", + "operationId": "EditAnswer", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "shortDescription" + ], + "properties": { + "shortDescription": { + "title": "Short Description of the Existing Set", + "type": "string" + }, + "newTopic": { + "title": "Updated Topic", + "type": "string" + }, + "newShortDescription": { + "title": "Updated Short Description", + "type": "string" + }, + "newQuestions": { + "title": "Updated Questions", + "type": "array", + "items": { + "type": "string" + } + }, + "newAnswerText": { + "title": "Updated Answer Text", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/delete-answer": { + "post": { + "summary": "Delete a question-answer set", + "operationId": "DeleteAnswer", + "description": "Delete an existing question-answer set from the connected instance.", + + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "shortDescription" + ], + "properties": { + "shortDescription": { + "title": "Short Description", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/add-subanswer": { + "post": { + "summary": "Create a shadow copy of a question-answer set", + "operationId": "AddSubAnswer", + "description": "Adds a new shadow copy for the question-answer set specified by the short description. Careful! These shadow copies are deleted when the answer is updated. It is therefore recommended to automatically call this action using the \"when a question-answer set is updated\" trigger.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "shortDescription", + "subShortDescription", + "subQuestions", + "subAnswerText" + ], + "properties": { + "shortDescription": { + "title": "Original Answer's Short Description", + "type": "string" + }, + "subShortDescription": { + "title": "Shadow Copy's Short Description", + "type": "string" + }, + "subQuestions": { + "title": "Questions", + "type": "array", + "items": { + "type": "string" + } + }, + "subAnswerText": { + "title": "Answer Text", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/get-tickets": { + "post": { + "summary": "Get open tickets", + "operationId": "GetOpenTickets", + "description": "Gets all open tickets from the connected instance.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "properties": { + "filterByHoursSinceOpened": { + "title": "Filter by Open Duration (minimum)", + "description": "Only get tickets that have been open for **longer** than x hours.", + "type": "integer" + }, + "filterByHoursSinceOpenedMax": { + "title": "Filter by Open Duration (maximum)", + "description": "Only get tickets that have been open for **less** than x hours.", + "type": "integer" + }, + "filterByTopic": { + "title": "Filter by Topic", + "type": "string" + }, + "filterByExpertEmail": { + "title": "Filter by Expert", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "Returns a list of tickets.", + "schema": { + "type": "object", + "required": [ + "tickets" + ], + "properties": { + "tickets": { + "title": "Tickets", + "type": "array", + "items": { + "$ref": "#/definitions/Ticket" + } + } + } + } + } + } + } + }, + "/open-ticket-question": { + "post": { + "summary": "Open a ticket (question)", + "operationId": "OpenTicketQuestion", + "description": "Open a new ticket on the connected instance.", + + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "userEmail", + "queryText" + ], + "properties": { + "userEmail": { + "title": "User Email", + "type": "string" + }, + "queryText": { + "title": "Question that was asked by the user", + "type": "string" + }, + "topic": { + "title": "Topic that this question likely belongs to", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "ticket" + ], + "properties": { + "ticket": { + "$ref": "#/definitions/Ticket" + } + } + } + } + } + } + }, + "/open-ticket-feedback": { + "post": { + "summary": "Open a ticket (feedback)", + "operationId": "OpenTicketFeedback", + "description": "Open a new ticket of type feedback on the connected instance.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "userEmail", + "queryText", + "answerShortDescription", + "feedbackText" + ], + "properties": { + "userEmail": { + "title": "User Email", + "type": "string" + }, + "queryText": { + "title": "Question that was asked by the user", + "type": "string" + }, + "answerShortDescription": { + "title": "Short description of the answer", + "type": "string" + }, + "feedbackText": { + "title": "Feedback regarding the answer", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "ticket" + ], + "properties": { + "ticket": { + "$ref": "#/definitions/Ticket" + } + } + } + } + } + } + }, + "/close-ticket": { + "post": { + "summary": "Close a ticket", + "operationId": "CloseTicket", + "description": "Closes an open ticket on the connected instance.", + "parameters": [ + { + "in": "body", + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "ticketId", + "editorEmail", + "editorComment" + ], + "properties": { + "ticketId": { + "title": "Unique Ticket ID", + "type": "string" + }, + "editorEmail": { + "title": "Email of the user that processed the ticket", + "type": "string" + }, + "editorComment": { + "title": "Comment that will be sent to the user", + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/webhooks/{id}": { + "delete": { + "summary": "Delete a webhook", + "operationId": "DeleteTrigger", + "x-ms-visibility": "internal", + "parameters": [ + { + "in": "path", + "name": "id", + "type": "integer", + "required": true, + "x-ms-url-encoding": "single" + } + ], + "responses": { + "default": { + "description": "default" + } + } + } + }, + "/webhooks/new-ticket": { + "x-ms-notification-content": { + "description": "Details for Webhook", + "schema": { + "type": "object", + "required": [ + "ticket" + ], + "properties": { + "ticket": { + "$ref": "#/definitions/Ticket" + } + } + } + }, + "post": { + "summary": "When a new ticket is created", + "operationId": "OnNewTicket", + "description": "When a new Ticket is created.", + "x-ms-trigger": "single", + "x-ms-visibility": "important", + "parameters": [ + { + "in": "body", + "name": "Request body", + "required": true, + "schema": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + } + } + } + ], + "responses": { + "201": { + "description": "Webhook Created" + } + } + } + }, + "/webhooks/resolved-ticket": { + "x-ms-notification-content": { + "description": "Details for Webhook", + "schema": { + "type": "object", + "required": [ + "ticket", + "editorEmail", + "editorComment", + "queryUrl" + ], + "properties": { + "ticket": { + "$ref": "#/definitions/Ticket" + }, + "editorEmail": { + "title": "Editor Email", + "type": "string" + }, + "editorComment": { + "title": "Editor Comment", + "type": "string" + }, + "queryUrl": { + "title": "Deep link to original query", + "type": "string" + } + } + } + }, + "post": { + "summary": "When a ticket is resolved", + "operationId": "OnResolvedTicket", + "description": "When a existing Ticket is resolved.", + "x-ms-trigger": "single", + "x-ms-visibility": "important", + "parameters": [ + { + "in": "body", + "required": true, + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + } + } + } + ], + "responses": { + "201": { + "description": "Webhook Created" + } + } + } + }, + "/webhooks/updated-ticket-topic": { + "x-ms-notification-content": { + "description": "Details for Webhook", + "schema": { + "type": "object", + "required": [ + "ticket" + ], + "properties": { + "ticket": { + "$ref": "#/definitions/Ticket" + } + } + } + }, + "post": { + "summary": "When a ticket's topic is updated", + "description": "When a topic of an existing Ticket is updated.", + "operationId": "OnUpdatedTicketTopic", + "x-ms-trigger": "single", + "x-ms-visibility": "important", + "parameters": [ + { + "in": "body", + "required": true, + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + } + } + } + ], + "responses": { + "201": { + "description": "Webhook Created" + } + } + } + }, + "/webhooks/new-answer": { + "x-ms-notification-content": { + "description": "Details for Webhook", + "schema": { + "type": "object", + "required": [ + "answer" + ], + "properties": { + "answer": { + "$ref": "#/definitions/Answer" + } + } + } + }, + "post": { + "summary": "When a new question-answer set is created", + "description": "When a new question-answer set is created.", + "operationId": "OnNewAnswer", + "x-ms-trigger": "single", + "x-ms-visibility": "important", + "parameters": [ + { + "in": "body", + "required": true, + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + } + } + } + ], + "responses": { + "201": { + "description": "Webhook Created" + } + } + } + }, + "/webhooks/update-answer": { + "x-ms-notification-content": { + "description": "Details for Webhook", + "schema": { + "type": "object", + "required": [ + "answer" + ], + "properties": { + "answer": { + "$ref": "#/definitions/Answer" + } + } + } + }, + "post": { + "summary": "When a question-answer set is created or modified", + "description": "When a question-answer set is created or modified.", + "operationId": "OnUpdateAnswer", + "x-ms-trigger": "single", + "x-ms-visibility": "important", + "parameters": [ + { + "in": "body", + "name": "Request body", + "required": true, + "schema": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + } + } + } + ], + "responses": { + "201": { + "description": "Webhook Created" + } + } + } + }, + "/webhooks/asked-question": { + "x-ms-notification-content": { + "description": "Details for Webhook", + "schema": { + "type": "object", + "required": [ + "userEmail", + "queryText", + "foundAnswer" + ], + "properties": { + "userEmail": { + "title": "User Email", + "type": "string" + }, + "queryText": { + "title": "Question that was asked by the user", + "type": "string" + }, + "foundAnswer": { + "title": "Found Answer", + "description": "Whether COSMO Bot found an answer that matched the user's question.", + "type": "boolean" + }, + "answer": { + "$ref": "#/definitions/Answer" + } + } + } + }, + "post": { + "summary": "When a user asks a question", + "description": "When a user asks a question.", + "operationId": "OnAskedQuestion", + "x-ms-trigger": "single", + "x-ms-visibility": "important", + "parameters": [ + { + "in": "body", + "required": true, + "name": "Request body", + "schema": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "url": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + } + } + } + } + ], + "responses": { + "201": { + "description": "Webhook Created" + } + } + } + } + }, + "definitions": { + "Answer": { + "title": "Answer", + "type": "object", + "required": [ + "topic", + "shortDescription", + "questions", + "answerText" + ], + "properties": { + "topic": { + "title": "Topic", + "type": "string", + "example": "COSMO Bot" + }, + "shortDescription": { + "title": "Short Description", + "type": "string", + "example": "The COSMO Bot" + }, + "questions": { + "title": "Questions", + "type": "array", + "items": { + "type": "string" + } + }, + "answerText": { + "title": "Answer Text", + "type": "string", + "example": "COSMO Bot is a knowledge manager chatbot." + } + } + }, + "Ticket": { + "title": "Ticket", + "type": "object", + "required": [ + "ticketId", + "topic", + "ticketUrl", + "requesterEmail", + "expertEmails", + "queryText", + "feedbackText", + "answerShortDescription", + "answerText", + "dateTimeCreated" + ], + "properties": { + "ticketId": { + "title": "Unique Ticket ID", + "type": "string" + }, + "topic": { + "title": "Topic", + "type": "string" + }, + "ticketUrl": { + "title": "Deep link to process the ticket", + "type": "string" + }, + "requesterEmail": { + "title": "Requester Email", + "type": "string" + }, + "expertEmails": { + "title": "Expert Emails", + "type": "array", + "items": { + "type": "string" + } + }, + "queryText": { + "title": "Question that was asked by the user", + "type": "string" + }, + "feedbackText": { + "title": "Feedback that was submitted by the user", + "description": "This is empty if this ticket is not feedback.", + "type": "string" + }, + "answerShortDescription": { + "title": "Short description of the answer that the user received after asking their question", + "description": "This is empty if this ticket is not feedback.", + "type": "string" + }, + "answerText": { + "title": "Answer that the user received after asking their question", + "description": "This is empty if this ticket is not feedback.", + "type": "string" + }, + "dateTimeCreated": { + "title": "Date and time that the ticket was created", + "type": "string", + "format": "date-time" + } + } + } + } +} diff --git a/certified-connectors/COSMO Bot/apiProperties.json b/certified-connectors/COSMO Bot/apiProperties.json new file mode 100644 index 000000000..7f494fc7a --- /dev/null +++ b/certified-connectors/COSMO Bot/apiProperties.json @@ -0,0 +1,43 @@ +{ + "properties": { + "connectionParameters": { + "botInstanceUrl": { + "type": "string", + "uiDefinition": { + "constraints": { + "required": "true" + }, + "displayName": "Bot Instance URL", + "description": "The URL where your bot instance can be reached", + "tooltip": "Provide the bot instance URL" + } + }, + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API Key", + "description": "The API key for accessing this bot instance", + "tooltip": "Provide the API key", + "constraints": { + "tabIndex": 3, + "clearText": false, + "required": "true" + } + } + } + }, + "policyTemplateInstances": [ + { + "parameters": { + "x-ms-apimTemplateParameter.urlTemplate": "@connectionParameters('botInstanceUrl')/api/v1" + }, + "templateId": "dynamichosturl", + "title": "Bot Instance URL" + } + ], + "iconBrandColor": "#545859", + "capabilities": [], + "publisher": "COSMO CONSULT GmbH", + "stackOwner": "COSMO CONSULT GmbH" + } +} From 9b5ad5d5424bfa3631fd4a1f7b8a411082456d20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Vr=C3=A5lstad?= Date: Mon, 12 Oct 2020 22:36:28 +0200 Subject: [PATCH 124/347] Updated connector title (#499) * - Updated README * Name change --- certified-connectors/Peltarion/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index 18a47964f..7bb050b2f 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "title": "Peltarion", + "title": "Peltarion AI", "description": "Using this connector, you can connect your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data", "version": "1.0", "contact": { From e65f0093ff1cedd3a5b80a1e7657fe57d9961723 Mon Sep 17 00:00:00 2001 From: RjImpx <72759719+RjImpx@users.noreply.github.com> Date: Mon, 12 Oct 2020 18:34:07 -0400 Subject: [PATCH 125/347] Impexium Connector Submission Submitting artifacts required for the Impexium connector. --- certified-connectors/Impexium/README.md | 23 + .../Impexium/apiDefinition.swagger.json | 1846 +++++++++++++++++ .../Impexium/apiProperties.json | 9 + 3 files changed, 1878 insertions(+) create mode 100644 certified-connectors/Impexium/README.md create mode 100644 certified-connectors/Impexium/apiDefinition.swagger.json create mode 100644 certified-connectors/Impexium/apiProperties.json diff --git a/certified-connectors/Impexium/README.md b/certified-connectors/Impexium/README.md new file mode 100644 index 000000000..4c06488b6 --- /dev/null +++ b/certified-connectors/Impexium/README.md @@ -0,0 +1,23 @@ +##Impexium Connector +Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members. + +## Prerequisites +1. Create an account on the Impexium site. Visit support.impexium.com if you need help. +## How to get credentials? + +##Supported Triggers +1. When an Individual is added. +2. When a product is purchased. + +##Supported Actions +1. Add an Individual +2. Add Activity +3. Find Individual by Email Address +4. Add Individual to a Committee +5. Add an Organization +6. Add relationship to an Individual +7. Get a list of all custom fields +8. Find Individual by Phone Number + + + diff --git a/certified-connectors/Impexium/apiDefinition.swagger.json b/certified-connectors/Impexium/apiDefinition.swagger.json new file mode 100644 index 000000000..979979ad1 --- /dev/null +++ b/certified-connectors/Impexium/apiDefinition.swagger.json @@ -0,0 +1,1846 @@ +{ + "swagger": "2.0", + "info": { + "title": "Impexium", + "description": "Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members.", + "version": "1.0", + "contact":{ + "name":"Impexium Support", + "url": "http://support.impexium.com", + "email":"support@impexium.com" + } + }, + "host": "automation.impexium.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/api/v1/Individuals": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "firstName": { + "type": "string", + "description": "firstName" + }, + "lastName": { + "type": "string", + "description": "lastName" + }, + "middleName": { + "type": "string", + "description": "middleName" + }, + "preferredFirstName": { + "type": "string", + "description": "preferredFirstName" + }, + "secondLastName": { + "type": "string", + "description": "secondLastName" + }, + "prefix": { + "type": "string", + "description": "prefix" + }, + "suffix": { + "type": "string", + "description": "suffix" + }, + "gender": { + "type": "string", + "description": "gender" + }, + "primaryOrganization": { + "type": "string", + "description": "primaryOrganization" + }, + "committees": { + "type": "array", + "items": {}, + "description": "committees" + }, + "securityRoles": { + "type": "array", + "items": {}, + "description": "securityRoles" + }, + "user": { + "type": "string", + "description": "user" + }, + "designationData": { + "type": "array", + "items": {}, + "description": "designationData" + }, + "relationships": { + "type": "array", + "items": {}, + "description": "relationships" + }, + "id": { + "type": "string", + "description": "id" + }, + "customerType": { + "type": "string", + "description": "customerType" + }, + "recordNumber": { + "type": "string", + "description": "recordNumber" + }, + "title": { + "type": "string", + "description": "title" + }, + "name": { + "type": "string", + "description": "name" + }, + "addresses": { + "type": "array", + "items": {}, + "description": "addresses" + }, + "email": { + "type": "string", + "description": "email" + }, + "imageUri": { + "type": "string", + "description": "imageUri" + }, + "twitter": { + "type": "string", + "description": "twitter" + }, + "linkedIn": { + "type": "string", + "description": "linkedIn" + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "primary": { + "type": "boolean", + "description": "primary" + }, + "address": { + "type": "string", + "description": "address" + }, + "type": { + "type": "string", + "description": "type" + } + } + }, + "description": "emails" + }, + "phones": { + "type": "array", + "items": {}, + "description": "phones" + }, + "webSite": { + "type": "string", + "description": "webSite" + }, + "memberships": { + "type": "array", + "items": {}, + "description": "memberships" + }, + "category": { + "type": "string", + "description": "category" + }, + "categories": { + "type": "array", + "items": {}, + "description": "categories" + }, + "customFields": { + "type": "array", + "items": {}, + "description": "customFields" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "links": { + "type": "array", + "items": {}, + "description": "links" + } + } + }, + "headers": { + "{": { + "description": "{", + "type": "string" + }, + "\"cache-control\":": { + "description": "\"cache-control\":", + "type": "string" + }, + "\"content-encoding\":": { + "description": "\"content-encoding\":", + "type": "string" + }, + "\"content-type\":": { + "description": "\"content-type\":", + "type": "string" + }, + "\"date\":": { + "description": "\"date\":", + "type": "string" + }, + "\"expires\":": { + "description": "\"expires\":", + "type": "string" + }, + "\"pragma\":": { + "description": "\"pragma\":", + "type": "string" + }, + "\"vary\":": { + "description": "\"vary\":", + "type": "string" + }, + "\"x-aspnet-version\":": { + "description": "\"x-aspnet-version\":", + "type": "string" + }, + "\"x-frame-options\":": { + "description": "\"x-frame-options\":", + "type": "string" + }, + "\"x-powered-by\":": { + "description": "\"x-powered-by\":", + "type": "string" + }, + "}": { + "description": "}", + "type": "string" + } + } + } + }, + "summary": "Add Individual", + "description": "Adds an Individual", + "operationId": "Add-Individual", + "parameters": [ + { + "name": "createUser", + "in": "query", + "required": false, + "type": "string", + "default": "False", + "description": "Choose True if a user account should be created", + "enum": [ + "True", + "False" + ], + "x-ms-visibility": "advanced" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "firstName": { + "type": "string", + "description": "firstName" + }, + "lastName": { + "type": "string", + "description": "lastName" + }, + "email": { + "type": "string", + "description": "email", + "title": "", + "x-ms-visibility": "Advanced" + } + } + } + } + ] + } + }, + "/api/v1/Individuals/{id}/Activities": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Add Activity", + "description": "Add Activity", + "operationId": "Add-Activity", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "Individual ID", + "x-ms-summary": "Individual ID" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "category" + }, + "text": { + "type": "string", + "description": "text" + }, + "url": { + "type": "string", + "description": "url" + }, + "activityDate": { + "type": "string", + "description": "activityDate" + } + } + } + } + ] + } + }, + "/api/v1/Individuals/Profile/{idOrRecordNumberOrEmail}/{pageNumber}/": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32", + "description": "pageNumber" + }, + "dataList": { + "type": "array", + "items": { + "type": "object", + "properties": { + "firstName": { + "type": "string", + "description": "firstName" + }, + "lastName": { + "type": "string", + "description": "lastName" + }, + "middleName": { + "type": "string", + "description": "middleName" + }, + "preferredFirstName": { + "type": "string", + "description": "preferredFirstName" + }, + "secondLastName": { + "type": "string", + "description": "secondLastName" + }, + "prefix": { + "type": "string", + "description": "prefix" + }, + "suffix": { + "type": "string", + "description": "suffix" + }, + "gender": { + "type": "string", + "description": "gender" + }, + "primaryOrganization": { + "type": "object", + "properties": { + "contactIds": { + "type": "array", + "items": {}, + "description": "contactIds" + }, + "parentCompanyId": { + "type": "string", + "description": "parentCompanyId" + }, + "description": { + "type": "string", + "description": "description" + }, + "branchName": { + "type": "string", + "description": "branchName" + }, + "tags": { + "type": "array", + "items": {}, + "description": "tags" + }, + "id": { + "type": "string", + "description": "id" + }, + "customerType": { + "type": "string", + "description": "customerType" + }, + "recordNumber": { + "type": "string", + "description": "recordNumber" + }, + "title": { + "type": "string", + "description": "title" + }, + "name": { + "type": "string", + "description": "name" + }, + "addresses": { + "type": "array", + "items": {}, + "description": "addresses" + }, + "imageUri": { + "type": "string", + "description": "imageUri" + }, + "emails": { + "type": "array", + "items": {}, + "description": "emails" + }, + "phones": { + "type": "array", + "items": {}, + "description": "phones" + }, + "webSite": { + "type": "string", + "description": "webSite" + }, + "memberships": { + "type": "array", + "items": {}, + "description": "memberships" + }, + "category": { + "type": "string", + "description": "category" + }, + "categories": { + "type": "array", + "items": {}, + "description": "categories" + }, + "customFields": { + "type": "array", + "items": {}, + "description": "customFields" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "links": { + "type": "array", + "items": {}, + "description": "links" + }, + "oldId": { + "type": "string", + "description": "oldId" + } + }, + "description": "primaryOrganization" + }, + "committees": { + "type": "array", + "items": {}, + "description": "committees" + }, + "securityRoles": { + "type": "array", + "items": {}, + "description": "securityRoles" + }, + "user": { + "type": "object", + "properties": { + "loginEmail": { + "type": "string", + "description": "loginEmail" + }, + "mustChangePassword": { + "type": "boolean", + "description": "mustChangePassword" + }, + "isApproved": { + "type": "boolean", + "description": "isApproved" + } + }, + "description": "user" + }, + "designationData": { + "type": "array", + "items": {}, + "description": "designationData" + }, + "relationships": { + "type": "array", + "items": {}, + "description": "relationships" + }, + "jobRoles": { + "type": "array", + "items": {}, + "description": "jobRoles" + }, + "id": { + "type": "string", + "description": "id" + }, + "customerType": { + "type": "string", + "description": "customerType" + }, + "recordNumber": { + "type": "string", + "description": "recordNumber" + }, + "title": { + "type": "string", + "description": "title" + }, + "name": { + "type": "string", + "description": "name" + }, + "addresses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "primary": { + "type": "boolean", + "description": "primary" + }, + "line1": { + "type": "string", + "description": "line1" + }, + "line2": { + "type": "string", + "description": "line2" + }, + "line3": { + "type": "string", + "description": "line3" + }, + "city": { + "type": "string", + "description": "city" + }, + "state": { + "type": "string", + "description": "state" + }, + "zipcode": { + "type": "string", + "description": "zipcode" + }, + "country": { + "type": "string", + "description": "country" + }, + "stateAbbreviation": { + "type": "string", + "description": "stateAbbreviation" + }, + "stateISOCode": { + "type": "string", + "description": "stateISOCode" + }, + "type": { + "type": "string", + "description": "type" + }, + "region": { + "type": "string", + "description": "region" + }, + "latitude": { + "type": "number", + "format": "float", + "description": "latitude" + }, + "longitude": { + "type": "number", + "format": "float", + "description": "longitude" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "congressionalDistrict": { + "type": "string", + "description": "congressionalDistrict" + }, + "countryData": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "name": { + "type": "string", + "description": "name" + }, + "twoLetterIsoCode": { + "type": "string", + "description": "twoLetterIsoCode" + }, + "threeLetterIsoCode": { + "type": "string", + "description": "threeLetterIsoCode" + }, + "code": { + "type": "integer", + "format": "int32", + "description": "code" + } + }, + "description": "countryData" + } + } + }, + "description": "addresses" + }, + "email": { + "type": "string", + "description": "email" + }, + "imageUri": { + "type": "string", + "description": "imageUri" + }, + "twitter": { + "type": "string", + "description": "twitter" + }, + "linkedIn": { + "type": "string", + "description": "linkedIn" + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "primary": { + "type": "boolean", + "description": "primary" + }, + "address": { + "type": "string", + "description": "address" + }, + "type": { + "type": "string", + "description": "type" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + } + } + }, + "description": "emails" + }, + "phones": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "primary": { + "type": "boolean", + "description": "primary" + }, + "type": { + "type": "integer", + "format": "int32", + "description": "type" + }, + "country": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "name": { + "type": "string", + "description": "name" + }, + "twoLetterIsoCode": { + "type": "string", + "description": "twoLetterIsoCode" + }, + "threeLetterIsoCode": { + "type": "string", + "description": "threeLetterIsoCode" + }, + "code": { + "type": "integer", + "format": "int32", + "description": "code" + } + }, + "description": "country" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "number": { + "type": "string", + "description": "number" + }, + "extension": { + "type": "string", + "description": "extension" + }, + "typeName": { + "type": "string", + "description": "typeName" + } + } + }, + "description": "phones" + }, + "webSite": { + "type": "string", + "description": "webSite" + }, + "memberships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "membershipType": { + "type": "string", + "description": "membershipType" + }, + "membershipTypeId": { + "type": "string", + "description": "membershipTypeId" + }, + "code": { + "type": "string", + "description": "code" + }, + "expireDate": { + "type": "string", + "description": "expireDate" + }, + "graceExpireDate": { + "type": "string", + "description": "graceExpireDate" + }, + "inheritedMembershipBenefits": { + "type": "boolean", + "description": "inheritedMembershipBenefits" + }, + "renewalUrl": { + "type": "string", + "description": "renewalUrl" + }, + "joinDate": { + "type": "string", + "description": "joinDate" + }, + "terminateDate": { + "type": "string", + "description": "terminateDate" + }, + "effectiveDate": { + "type": "string", + "description": "effectiveDate" + } + } + }, + "description": "memberships" + }, + "category": { + "type": "string", + "description": "category" + }, + "categories": { + "type": "array", + "items": {}, + "description": "categories" + }, + "customFields": { + "type": "array", + "items": {}, + "description": "customFields" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "links": { + "type": "array", + "items": {}, + "description": "links" + }, + "oldId": { + "type": "string", + "description": "oldId" + }, + "isDeceased": { + "type": "boolean", + "description": "isDeceased" + } + } + }, + "description": "dataList" + } + } + } + } + }, + "summary": "Find Individual by ID or Email or RecordNumber", + "description": "Find Individual by ID or Email", + "operationId": "Find-Individual-IDOrEmail", + "parameters": [ + { + "name": "idOrRecordNumberOrEmail", + "in": "path", + "required": true, + "type": "string", + "description": "ID Or Record Number Or Email", + "x-ms-summary": "ID Or Record Number Or Email" + }, + { + "name": "pageNumber", + "in": "path", + "required": true, + "type": "string", + "default": "1", + "x-ms-visibility": "internal" + }, + { + "name": "IncludeDetails", + "in": "query", + "required": true, + "type": "string", + "default": "True", + "x-ms-visibility": "internal" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + } + ] + } + }, + "/api/v1/Committees/{code}/Members": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Add Individual to Committee", + "description": "Add Individual to Committee", + "operationId": "Add-To-Committee", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "type": "string", + "description": "Committee Code", + "x-ms-summary": "Committee Code" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "recordNumber": { + "type": "string", + "description": "recordNumber" + }, + "code": { + "type": "string", + "description": "code", + "title": "", + "x-ms-visibility": "advanced" + }, + "positionCode": { + "type": "string", + "description": "positionCode" + }, + "startDate": { + "type": "string", + "description": "startDate" + } + } + } + } + ] + } + }, + "/api/v1/Organizations": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Add Organization", + "description": "Add Organization", + "operationId": "Add-Organization", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id", + "title": "", + "x-ms-visibility": "advanced" + }, + "name": { + "type": "string", + "description": "name", + "title": "Name", + "x-ms-visibility": "advanced" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory", + "title": "Show In Directory?", + "x-ms-visibility": "internal", + "enum": [ + "", + true, + false + ], + "default": "false" + }, + "branchName": { + "type": "string", + "description": "branchName", + "title": "Branch Name", + "x-ms-visibility": "advanced" + }, + "website": { + "type": "string", + "description": "website", + "title": "Website", + "x-ms-visibility": "advanced" + } + }, + "required": [ + "name", + "showInDirectory" + ] + } + } + ] + } + }, + "/api/v1/Individuals/{id}/Relationships": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Add Relationship to Individual", + "description": "Add Relationship to Individual", + "operationId": "Add-relationship-to-individual", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "Individual ID" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "Application/Json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "relationshipName": { + "type": "string", + "description": "relationshipName", + "title": "Relationship Name", + "x-ms-visibility": "advanced", + "default": "Employee" + }, + "relatedToCustomerRecordNumber": { + "type": "string", + "description": "relatedToCustomerRecordNumber", + "title": "relatedToCustomerRecordNumber", + "x-ms-visibility": "advanced" + }, + "reciprocalRelationshipName": { + "type": "string", + "description": "reciprocalRelationshipName", + "title": "Reciprocal Relationship Name", + "x-ms-visibility": "advanced", + "default": "Employer" + }, + "isPrimary": { + "type": "boolean", + "description": "isPrimary", + "title": "Is Primary?", + "x-ms-visibility": "advanced", + "enum": [ + "", + true, + false + ], + "default": "false" + }, + "startDate": { + "type": "string", + "description": "startDate", + "title": "Start Date", + "x-ms-visibility": "advanced" + }, + "endDate": { + "type": "string", + "description": "endDate", + "title": "End Date", + "x-ms-visibility": "advanced" + } + }, + "required": [ + "reciprocalRelationshipName", + "relatedToCustomerRecordNumber", + "relationshipName" + ] + } + } + ] + } + }, + "/api/v1/Organizations/{id}": { + "put": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Update Organization", + "description": "Update Organization", + "operationId": "Update-Organization", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name" + }, + "description": { + "type": "string", + "description": "description" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "branchName": { + "type": "string", + "description": "branchName" + }, + "website": { + "type": "string", + "description": "website" + } + } + } + } + ] + } + }, + "/api/v1/Setup/customfields/{pageNumber}": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "x-ms-visibility": "internal", + "summary": "List of all custom fields", + "description": "List of all custom fields", + "operationId": "List-of-all-custom-fields", + "parameters": [ + { + "name": "pageNumber", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + } + ] + } + }, + "/": { + "x-ms-notification-content": { + "schema": { + "type": "object", + "properties": { + "WebhookId": { + "type": "string", + "description": "WebhookId" + }, + "Properties": { + "type": "object", + "properties": { + "Date": { + "type": "string", + "description": "Date" + } + }, + "description": "Properties" + }, + "Notifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Action": { + "type": "string", + "description": "Action" + }, + "IndividualId": { + "type": "string", + "description": "IndividualId" + }, + "RecordNumber": { + "type": "string", + "description": "RecordNumber" + }, + "FirstName": { + "type": "string", + "description": "FirstName" + }, + "LastName": { + "type": "string", + "description": "LastName" + }, + "EmailAddress": { + "type": "string", + "description": "EmailAddress" + } + } + }, + "description": "Notifications" + } + } + }, + "description": "Individual Created" + } + }, + "/api/v1/Customers/{pageNumber}": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Find an individual by phone number", + "description": "Find an individual by phone number", + "operationId": "Find-Individual-Phone", + "parameters": [ + { + "name": "pageNumber", + "in": "path", + "required": true, + "type": "string", + "default": "1", + "x-ms-visibility": "internal" + }, + { + "name": "phoneNumber", + "in": "query", + "required": true, + "type": "string" + }, + { + "name": "includeAddress", + "in": "query", + "required": true, + "type": "string", + "default": "True", + "x-ms-visibility": "internal" + }, + { + "name": "includePhone", + "in": "query", + "required": true, + "type": "string", + "default": "True", + "x-ms-visibility": "internal" + }, + { + "name": "includeEmail", + "in": "query", + "required": true, + "type": "string", + "default": "True", + "x-ms-visibility": "internal" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + } + ] + } + }, + "/api/v1/Webhooks": { + "x-ms-notification-content": { + "schema": { + "type": "object", + "properties": { + "WebhookId": { + "type": "string", + "description": "WebhookId" + }, + "Properties": { + "type": "object", + "properties": { + "Date": { + "type": "string", + "description": "Date" + } + }, + "description": "Properties" + }, + "Notifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Action": { + "type": "string", + "description": "Action" + }, + "IndividualId": { + "type": "string", + "description": "IndividualId" + }, + "RecordNumber": { + "type": "string", + "description": "RecordNumber" + }, + "FirstName": { + "type": "string", + "description": "FirstName" + }, + "LastName": { + "type": "string", + "description": "LastName" + }, + "EmailAddress": { + "type": "string", + "description": "EmailAddress" + } + } + }, + "description": "Notifications" + } + } + }, + "description": "Individual Added" + }, + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Individual Created", + "description": "When an Individual is created", + "operationId": "When-Individual-Created", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "typeName": { + "type": "string", + "description": "typeName", + "title": "", + "x-ms-visibility": "internal", + "default": "Individual.Created" + }, + "filters": { + "type": "array", + "items": { + "type": "string", + "title": "Additional Filters", + "x-ms-visibility": "advanced" + }, + "description": "filters" + }, + "secret": { + "type": "string", + "description": "secret", + "title": "", + "x-ms-visibility": "internal", + "default": "MyAssocDemo" + }, + "callBackUrl": { + "type": "string", + "description": "callBackUrl", + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "title": "" + }, + "description": { + "type": "string", + "description": "description", + "title": "", + "x-ms-visibility": "internal", + "default": "Added By MSFlow - SALESDEMO" + } + }, + "required": [ + "callBackUrl", + "secret", + "typeName", + "description" + ] + } + } + ] + } + }, + "/api/v1/Webhooks/ProductPurchased": { + "x-ms-notification-content": { + "description": "Product Purchased", + "schema": { + "type": "object", + "properties": { + "WebhookId": { + "type": "string", + "description": "WebhookId" + }, + "Properties": { + "type": "object", + "properties": { + "AdditionalFilter": { + "type": "string", + "description": "AdditionalFilter" + }, + "Date": { + "type": "string", + "description": "Date" + } + }, + "description": "Properties" + }, + "Notifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Action": { + "type": "string", + "description": "Action" + }, + "OrderNumber": { + "type": "string", + "description": "OrderNumber" + }, + "InvoiceNumber": { + "type": "string", + "description": "InvoiceNumber" + }, + "ProductCode": { + "type": "string", + "description": "ProductCode", + "title": "" + }, + "ProductName": { + "type": "string", + "description": "ProductName" + }, + "ProductType": { + "type": "string", + "description": "ProductType" + }, + "Quantity": { + "type": "string", + "description": "Quantity" + }, + "ItemPrice": { + "type": "string", + "description": "ItemPrice" + }, + "CustomerType": { + "type": "string", + "description": "CustomerType" + }, + "CustomerId": { + "type": "string", + "description": "CustomerId" + }, + "FullName": { + "type": "string", + "description": "FullName" + }, + "FirstName": { + "type": "string", + "description": "FirstName" + }, + "LastName": { + "type": "string", + "description": "LastName" + }, + "EmailAddress": { + "type": "string", + "description": "EmailAddress" + }, + "RecordNumber": { + "type": "string", + "description": "RecordNumber" + } + } + }, + "description": "Notifications" + } + } + } + }, + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "When Product is Purchased", + "description": "When Product is Purchased. Supported Product Types: Merchandise, Courses, Exams", + "operationId": "When-product-purchased", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id", + "title": "", + "x-ms-visibility": "internal" + }, + "typeName": { + "type": "string", + "description": "typeName", + "title": "", + "x-ms-visibility": "internal", + "default": "Product.Purchased" + }, + "filters": { + "type": "array", + "items": { + "type": "string", + "title": "Product Code", + "x-ms-visibility": "advanced" + }, + "description": "filters" + }, + "secret": { + "type": "string", + "description": "secret", + "title": "", + "x-ms-visibility": "internal", + "default": "prodPurchasedFLOW" + }, + "callBackUrl": { + "type": "string", + "description": "callBackUrl", + "title": "", + "x-ms-visibility": "internal", + "x-ms-notification-url": true + }, + "description": { + "type": "string", + "description": "description", + "title": "", + "x-ms-visibility": "internal", + "default": "AddedByFlow" + } + }, + "required": [ + "callBackUrl", + "description", + "secret", + "typeName" + ] + } + } + ] + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "http://www.impexium.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.impexium.com/impexium-information-security-policy/" + }, + { + "propertyName": "Categories", + "propertyValue": "AMS;Membership;Association Membership Management" + } + ] +} diff --git a/certified-connectors/Impexium/apiProperties.json b/certified-connectors/Impexium/apiProperties.json new file mode 100644 index 000000000..8de69fe26 --- /dev/null +++ b/certified-connectors/Impexium/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#007ee5", + "capabilities": [], + "publisher": "Impexium Corporation", + "stackOwner": "Impexium Corporation" + } +} From 4e32210315ff89100835522d2b9d0d579c1e21ef Mon Sep 17 00:00:00 2001 From: RjImpx <72759719+RjImpx@users.noreply.github.com> Date: Mon, 12 Oct 2020 18:43:55 -0400 Subject: [PATCH 126/347] Revert "Impexium Connector Submission" This reverts commit e65f0093ff1cedd3a5b80a1e7657fe57d9961723. --- certified-connectors/Impexium/README.md | 23 - .../Impexium/apiDefinition.swagger.json | 1846 ----------------- .../Impexium/apiProperties.json | 9 - 3 files changed, 1878 deletions(-) delete mode 100644 certified-connectors/Impexium/README.md delete mode 100644 certified-connectors/Impexium/apiDefinition.swagger.json delete mode 100644 certified-connectors/Impexium/apiProperties.json diff --git a/certified-connectors/Impexium/README.md b/certified-connectors/Impexium/README.md deleted file mode 100644 index 4c06488b6..000000000 --- a/certified-connectors/Impexium/README.md +++ /dev/null @@ -1,23 +0,0 @@ -##Impexium Connector -Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members. - -## Prerequisites -1. Create an account on the Impexium site. Visit support.impexium.com if you need help. -## How to get credentials? - -##Supported Triggers -1. When an Individual is added. -2. When a product is purchased. - -##Supported Actions -1. Add an Individual -2. Add Activity -3. Find Individual by Email Address -4. Add Individual to a Committee -5. Add an Organization -6. Add relationship to an Individual -7. Get a list of all custom fields -8. Find Individual by Phone Number - - - diff --git a/certified-connectors/Impexium/apiDefinition.swagger.json b/certified-connectors/Impexium/apiDefinition.swagger.json deleted file mode 100644 index 979979ad1..000000000 --- a/certified-connectors/Impexium/apiDefinition.swagger.json +++ /dev/null @@ -1,1846 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "Impexium", - "description": "Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members.", - "version": "1.0", - "contact":{ - "name":"Impexium Support", - "url": "http://support.impexium.com", - "email":"support@impexium.com" - } - }, - "host": "automation.impexium.com", - "basePath": "/", - "schemes": [ - "https" - ], - "consumes": [], - "produces": [], - "paths": { - "/api/v1/Individuals": { - "post": { - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "firstName": { - "type": "string", - "description": "firstName" - }, - "lastName": { - "type": "string", - "description": "lastName" - }, - "middleName": { - "type": "string", - "description": "middleName" - }, - "preferredFirstName": { - "type": "string", - "description": "preferredFirstName" - }, - "secondLastName": { - "type": "string", - "description": "secondLastName" - }, - "prefix": { - "type": "string", - "description": "prefix" - }, - "suffix": { - "type": "string", - "description": "suffix" - }, - "gender": { - "type": "string", - "description": "gender" - }, - "primaryOrganization": { - "type": "string", - "description": "primaryOrganization" - }, - "committees": { - "type": "array", - "items": {}, - "description": "committees" - }, - "securityRoles": { - "type": "array", - "items": {}, - "description": "securityRoles" - }, - "user": { - "type": "string", - "description": "user" - }, - "designationData": { - "type": "array", - "items": {}, - "description": "designationData" - }, - "relationships": { - "type": "array", - "items": {}, - "description": "relationships" - }, - "id": { - "type": "string", - "description": "id" - }, - "customerType": { - "type": "string", - "description": "customerType" - }, - "recordNumber": { - "type": "string", - "description": "recordNumber" - }, - "title": { - "type": "string", - "description": "title" - }, - "name": { - "type": "string", - "description": "name" - }, - "addresses": { - "type": "array", - "items": {}, - "description": "addresses" - }, - "email": { - "type": "string", - "description": "email" - }, - "imageUri": { - "type": "string", - "description": "imageUri" - }, - "twitter": { - "type": "string", - "description": "twitter" - }, - "linkedIn": { - "type": "string", - "description": "linkedIn" - }, - "emails": { - "type": "array", - "items": { - "type": "object", - "properties": { - "primary": { - "type": "boolean", - "description": "primary" - }, - "address": { - "type": "string", - "description": "address" - }, - "type": { - "type": "string", - "description": "type" - } - } - }, - "description": "emails" - }, - "phones": { - "type": "array", - "items": {}, - "description": "phones" - }, - "webSite": { - "type": "string", - "description": "webSite" - }, - "memberships": { - "type": "array", - "items": {}, - "description": "memberships" - }, - "category": { - "type": "string", - "description": "category" - }, - "categories": { - "type": "array", - "items": {}, - "description": "categories" - }, - "customFields": { - "type": "array", - "items": {}, - "description": "customFields" - }, - "showInDirectory": { - "type": "boolean", - "description": "showInDirectory" - }, - "links": { - "type": "array", - "items": {}, - "description": "links" - } - } - }, - "headers": { - "{": { - "description": "{", - "type": "string" - }, - "\"cache-control\":": { - "description": "\"cache-control\":", - "type": "string" - }, - "\"content-encoding\":": { - "description": "\"content-encoding\":", - "type": "string" - }, - "\"content-type\":": { - "description": "\"content-type\":", - "type": "string" - }, - "\"date\":": { - "description": "\"date\":", - "type": "string" - }, - "\"expires\":": { - "description": "\"expires\":", - "type": "string" - }, - "\"pragma\":": { - "description": "\"pragma\":", - "type": "string" - }, - "\"vary\":": { - "description": "\"vary\":", - "type": "string" - }, - "\"x-aspnet-version\":": { - "description": "\"x-aspnet-version\":", - "type": "string" - }, - "\"x-frame-options\":": { - "description": "\"x-frame-options\":", - "type": "string" - }, - "\"x-powered-by\":": { - "description": "\"x-powered-by\":", - "type": "string" - }, - "}": { - "description": "}", - "type": "string" - } - } - } - }, - "summary": "Add Individual", - "description": "Adds an Individual", - "operationId": "Add-Individual", - "parameters": [ - { - "name": "createUser", - "in": "query", - "required": false, - "type": "string", - "default": "False", - "description": "Choose True if a user account should be created", - "enum": [ - "True", - "False" - ], - "x-ms-visibility": "advanced" - }, - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - }, - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "firstName": { - "type": "string", - "description": "firstName" - }, - "lastName": { - "type": "string", - "description": "lastName" - }, - "email": { - "type": "string", - "description": "email", - "title": "", - "x-ms-visibility": "Advanced" - } - } - } - } - ] - } - }, - "/api/v1/Individuals/{id}/Activities": { - "post": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "summary": "Add Activity", - "description": "Add Activity", - "operationId": "Add-Activity", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string", - "description": "Individual ID", - "x-ms-summary": "Individual ID" - }, - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - }, - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "category": { - "type": "string", - "description": "category" - }, - "text": { - "type": "string", - "description": "text" - }, - "url": { - "type": "string", - "description": "url" - }, - "activityDate": { - "type": "string", - "description": "activityDate" - } - } - } - } - ] - } - }, - "/api/v1/Individuals/Profile/{idOrRecordNumberOrEmail}/{pageNumber}/": { - "get": { - "responses": { - "default": { - "description": "default", - "schema": { - "type": "object", - "properties": { - "pageNumber": { - "type": "integer", - "format": "int32", - "description": "pageNumber" - }, - "dataList": { - "type": "array", - "items": { - "type": "object", - "properties": { - "firstName": { - "type": "string", - "description": "firstName" - }, - "lastName": { - "type": "string", - "description": "lastName" - }, - "middleName": { - "type": "string", - "description": "middleName" - }, - "preferredFirstName": { - "type": "string", - "description": "preferredFirstName" - }, - "secondLastName": { - "type": "string", - "description": "secondLastName" - }, - "prefix": { - "type": "string", - "description": "prefix" - }, - "suffix": { - "type": "string", - "description": "suffix" - }, - "gender": { - "type": "string", - "description": "gender" - }, - "primaryOrganization": { - "type": "object", - "properties": { - "contactIds": { - "type": "array", - "items": {}, - "description": "contactIds" - }, - "parentCompanyId": { - "type": "string", - "description": "parentCompanyId" - }, - "description": { - "type": "string", - "description": "description" - }, - "branchName": { - "type": "string", - "description": "branchName" - }, - "tags": { - "type": "array", - "items": {}, - "description": "tags" - }, - "id": { - "type": "string", - "description": "id" - }, - "customerType": { - "type": "string", - "description": "customerType" - }, - "recordNumber": { - "type": "string", - "description": "recordNumber" - }, - "title": { - "type": "string", - "description": "title" - }, - "name": { - "type": "string", - "description": "name" - }, - "addresses": { - "type": "array", - "items": {}, - "description": "addresses" - }, - "imageUri": { - "type": "string", - "description": "imageUri" - }, - "emails": { - "type": "array", - "items": {}, - "description": "emails" - }, - "phones": { - "type": "array", - "items": {}, - "description": "phones" - }, - "webSite": { - "type": "string", - "description": "webSite" - }, - "memberships": { - "type": "array", - "items": {}, - "description": "memberships" - }, - "category": { - "type": "string", - "description": "category" - }, - "categories": { - "type": "array", - "items": {}, - "description": "categories" - }, - "customFields": { - "type": "array", - "items": {}, - "description": "customFields" - }, - "showInDirectory": { - "type": "boolean", - "description": "showInDirectory" - }, - "links": { - "type": "array", - "items": {}, - "description": "links" - }, - "oldId": { - "type": "string", - "description": "oldId" - } - }, - "description": "primaryOrganization" - }, - "committees": { - "type": "array", - "items": {}, - "description": "committees" - }, - "securityRoles": { - "type": "array", - "items": {}, - "description": "securityRoles" - }, - "user": { - "type": "object", - "properties": { - "loginEmail": { - "type": "string", - "description": "loginEmail" - }, - "mustChangePassword": { - "type": "boolean", - "description": "mustChangePassword" - }, - "isApproved": { - "type": "boolean", - "description": "isApproved" - } - }, - "description": "user" - }, - "designationData": { - "type": "array", - "items": {}, - "description": "designationData" - }, - "relationships": { - "type": "array", - "items": {}, - "description": "relationships" - }, - "jobRoles": { - "type": "array", - "items": {}, - "description": "jobRoles" - }, - "id": { - "type": "string", - "description": "id" - }, - "customerType": { - "type": "string", - "description": "customerType" - }, - "recordNumber": { - "type": "string", - "description": "recordNumber" - }, - "title": { - "type": "string", - "description": "title" - }, - "name": { - "type": "string", - "description": "name" - }, - "addresses": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id" - }, - "primary": { - "type": "boolean", - "description": "primary" - }, - "line1": { - "type": "string", - "description": "line1" - }, - "line2": { - "type": "string", - "description": "line2" - }, - "line3": { - "type": "string", - "description": "line3" - }, - "city": { - "type": "string", - "description": "city" - }, - "state": { - "type": "string", - "description": "state" - }, - "zipcode": { - "type": "string", - "description": "zipcode" - }, - "country": { - "type": "string", - "description": "country" - }, - "stateAbbreviation": { - "type": "string", - "description": "stateAbbreviation" - }, - "stateISOCode": { - "type": "string", - "description": "stateISOCode" - }, - "type": { - "type": "string", - "description": "type" - }, - "region": { - "type": "string", - "description": "region" - }, - "latitude": { - "type": "number", - "format": "float", - "description": "latitude" - }, - "longitude": { - "type": "number", - "format": "float", - "description": "longitude" - }, - "showInDirectory": { - "type": "boolean", - "description": "showInDirectory" - }, - "congressionalDistrict": { - "type": "string", - "description": "congressionalDistrict" - }, - "countryData": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id" - }, - "name": { - "type": "string", - "description": "name" - }, - "twoLetterIsoCode": { - "type": "string", - "description": "twoLetterIsoCode" - }, - "threeLetterIsoCode": { - "type": "string", - "description": "threeLetterIsoCode" - }, - "code": { - "type": "integer", - "format": "int32", - "description": "code" - } - }, - "description": "countryData" - } - } - }, - "description": "addresses" - }, - "email": { - "type": "string", - "description": "email" - }, - "imageUri": { - "type": "string", - "description": "imageUri" - }, - "twitter": { - "type": "string", - "description": "twitter" - }, - "linkedIn": { - "type": "string", - "description": "linkedIn" - }, - "emails": { - "type": "array", - "items": { - "type": "object", - "properties": { - "primary": { - "type": "boolean", - "description": "primary" - }, - "address": { - "type": "string", - "description": "address" - }, - "type": { - "type": "string", - "description": "type" - }, - "showInDirectory": { - "type": "boolean", - "description": "showInDirectory" - } - } - }, - "description": "emails" - }, - "phones": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id" - }, - "primary": { - "type": "boolean", - "description": "primary" - }, - "type": { - "type": "integer", - "format": "int32", - "description": "type" - }, - "country": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id" - }, - "name": { - "type": "string", - "description": "name" - }, - "twoLetterIsoCode": { - "type": "string", - "description": "twoLetterIsoCode" - }, - "threeLetterIsoCode": { - "type": "string", - "description": "threeLetterIsoCode" - }, - "code": { - "type": "integer", - "format": "int32", - "description": "code" - } - }, - "description": "country" - }, - "showInDirectory": { - "type": "boolean", - "description": "showInDirectory" - }, - "number": { - "type": "string", - "description": "number" - }, - "extension": { - "type": "string", - "description": "extension" - }, - "typeName": { - "type": "string", - "description": "typeName" - } - } - }, - "description": "phones" - }, - "webSite": { - "type": "string", - "description": "webSite" - }, - "memberships": { - "type": "array", - "items": { - "type": "object", - "properties": { - "membershipType": { - "type": "string", - "description": "membershipType" - }, - "membershipTypeId": { - "type": "string", - "description": "membershipTypeId" - }, - "code": { - "type": "string", - "description": "code" - }, - "expireDate": { - "type": "string", - "description": "expireDate" - }, - "graceExpireDate": { - "type": "string", - "description": "graceExpireDate" - }, - "inheritedMembershipBenefits": { - "type": "boolean", - "description": "inheritedMembershipBenefits" - }, - "renewalUrl": { - "type": "string", - "description": "renewalUrl" - }, - "joinDate": { - "type": "string", - "description": "joinDate" - }, - "terminateDate": { - "type": "string", - "description": "terminateDate" - }, - "effectiveDate": { - "type": "string", - "description": "effectiveDate" - } - } - }, - "description": "memberships" - }, - "category": { - "type": "string", - "description": "category" - }, - "categories": { - "type": "array", - "items": {}, - "description": "categories" - }, - "customFields": { - "type": "array", - "items": {}, - "description": "customFields" - }, - "showInDirectory": { - "type": "boolean", - "description": "showInDirectory" - }, - "links": { - "type": "array", - "items": {}, - "description": "links" - }, - "oldId": { - "type": "string", - "description": "oldId" - }, - "isDeceased": { - "type": "boolean", - "description": "isDeceased" - } - } - }, - "description": "dataList" - } - } - } - } - }, - "summary": "Find Individual by ID or Email or RecordNumber", - "description": "Find Individual by ID or Email", - "operationId": "Find-Individual-IDOrEmail", - "parameters": [ - { - "name": "idOrRecordNumberOrEmail", - "in": "path", - "required": true, - "type": "string", - "description": "ID Or Record Number Or Email", - "x-ms-summary": "ID Or Record Number Or Email" - }, - { - "name": "pageNumber", - "in": "path", - "required": true, - "type": "string", - "default": "1", - "x-ms-visibility": "internal" - }, - { - "name": "IncludeDetails", - "in": "query", - "required": true, - "type": "string", - "default": "True", - "x-ms-visibility": "internal" - }, - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - } - ] - } - }, - "/api/v1/Committees/{code}/Members": { - "post": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "summary": "Add Individual to Committee", - "description": "Add Individual to Committee", - "operationId": "Add-To-Committee", - "parameters": [ - { - "name": "code", - "in": "path", - "required": true, - "type": "string", - "description": "Committee Code", - "x-ms-summary": "Committee Code" - }, - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - }, - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "recordNumber": { - "type": "string", - "description": "recordNumber" - }, - "code": { - "type": "string", - "description": "code", - "title": "", - "x-ms-visibility": "advanced" - }, - "positionCode": { - "type": "string", - "description": "positionCode" - }, - "startDate": { - "type": "string", - "description": "startDate" - } - } - } - } - ] - } - }, - "/api/v1/Organizations": { - "post": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "summary": "Add Organization", - "description": "Add Organization", - "operationId": "Add-Organization", - "parameters": [ - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - }, - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id", - "title": "", - "x-ms-visibility": "advanced" - }, - "name": { - "type": "string", - "description": "name", - "title": "Name", - "x-ms-visibility": "advanced" - }, - "showInDirectory": { - "type": "boolean", - "description": "showInDirectory", - "title": "Show In Directory?", - "x-ms-visibility": "internal", - "enum": [ - "", - true, - false - ], - "default": "false" - }, - "branchName": { - "type": "string", - "description": "branchName", - "title": "Branch Name", - "x-ms-visibility": "advanced" - }, - "website": { - "type": "string", - "description": "website", - "title": "Website", - "x-ms-visibility": "advanced" - } - }, - "required": [ - "name", - "showInDirectory" - ] - } - } - ] - } - }, - "/api/v1/Individuals/{id}/Relationships": { - "post": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "summary": "Add Relationship to Individual", - "description": "Add Relationship to Individual", - "operationId": "Add-relationship-to-individual", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string", - "description": "Individual ID" - }, - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "Application/Json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - }, - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "relationshipName": { - "type": "string", - "description": "relationshipName", - "title": "Relationship Name", - "x-ms-visibility": "advanced", - "default": "Employee" - }, - "relatedToCustomerRecordNumber": { - "type": "string", - "description": "relatedToCustomerRecordNumber", - "title": "relatedToCustomerRecordNumber", - "x-ms-visibility": "advanced" - }, - "reciprocalRelationshipName": { - "type": "string", - "description": "reciprocalRelationshipName", - "title": "Reciprocal Relationship Name", - "x-ms-visibility": "advanced", - "default": "Employer" - }, - "isPrimary": { - "type": "boolean", - "description": "isPrimary", - "title": "Is Primary?", - "x-ms-visibility": "advanced", - "enum": [ - "", - true, - false - ], - "default": "false" - }, - "startDate": { - "type": "string", - "description": "startDate", - "title": "Start Date", - "x-ms-visibility": "advanced" - }, - "endDate": { - "type": "string", - "description": "endDate", - "title": "End Date", - "x-ms-visibility": "advanced" - } - }, - "required": [ - "reciprocalRelationshipName", - "relatedToCustomerRecordNumber", - "relationshipName" - ] - } - } - ] - } - }, - "/api/v1/Organizations/{id}": { - "put": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "summary": "Update Organization", - "description": "Update Organization", - "operationId": "Update-Organization", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - }, - { - "name": "body", - "in": "body", - "required": false, - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "name" - }, - "description": { - "type": "string", - "description": "description" - }, - "showInDirectory": { - "type": "boolean", - "description": "showInDirectory" - }, - "branchName": { - "type": "string", - "description": "branchName" - }, - "website": { - "type": "string", - "description": "website" - } - } - } - } - ] - } - }, - "/api/v1/Setup/customfields/{pageNumber}": { - "get": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "x-ms-visibility": "internal", - "summary": "List of all custom fields", - "description": "List of all custom fields", - "operationId": "List-of-all-custom-fields", - "parameters": [ - { - "name": "pageNumber", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - } - ] - } - }, - "/": { - "x-ms-notification-content": { - "schema": { - "type": "object", - "properties": { - "WebhookId": { - "type": "string", - "description": "WebhookId" - }, - "Properties": { - "type": "object", - "properties": { - "Date": { - "type": "string", - "description": "Date" - } - }, - "description": "Properties" - }, - "Notifications": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Action": { - "type": "string", - "description": "Action" - }, - "IndividualId": { - "type": "string", - "description": "IndividualId" - }, - "RecordNumber": { - "type": "string", - "description": "RecordNumber" - }, - "FirstName": { - "type": "string", - "description": "FirstName" - }, - "LastName": { - "type": "string", - "description": "LastName" - }, - "EmailAddress": { - "type": "string", - "description": "EmailAddress" - } - } - }, - "description": "Notifications" - } - } - }, - "description": "Individual Created" - } - }, - "/api/v1/Customers/{pageNumber}": { - "get": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "summary": "Find an individual by phone number", - "description": "Find an individual by phone number", - "operationId": "Find-Individual-Phone", - "parameters": [ - { - "name": "pageNumber", - "in": "path", - "required": true, - "type": "string", - "default": "1", - "x-ms-visibility": "internal" - }, - { - "name": "phoneNumber", - "in": "query", - "required": true, - "type": "string" - }, - { - "name": "includeAddress", - "in": "query", - "required": true, - "type": "string", - "default": "True", - "x-ms-visibility": "internal" - }, - { - "name": "includePhone", - "in": "query", - "required": true, - "type": "string", - "default": "True", - "x-ms-visibility": "internal" - }, - { - "name": "includeEmail", - "in": "query", - "required": true, - "type": "string", - "default": "True", - "x-ms-visibility": "internal" - }, - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - } - ] - } - }, - "/api/v1/Webhooks": { - "x-ms-notification-content": { - "schema": { - "type": "object", - "properties": { - "WebhookId": { - "type": "string", - "description": "WebhookId" - }, - "Properties": { - "type": "object", - "properties": { - "Date": { - "type": "string", - "description": "Date" - } - }, - "description": "Properties" - }, - "Notifications": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Action": { - "type": "string", - "description": "Action" - }, - "IndividualId": { - "type": "string", - "description": "IndividualId" - }, - "RecordNumber": { - "type": "string", - "description": "RecordNumber" - }, - "FirstName": { - "type": "string", - "description": "FirstName" - }, - "LastName": { - "type": "string", - "description": "LastName" - }, - "EmailAddress": { - "type": "string", - "description": "EmailAddress" - } - } - }, - "description": "Notifications" - } - } - }, - "description": "Individual Added" - }, - "post": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "summary": "Individual Created", - "description": "When an Individual is created", - "operationId": "When-Individual-Created", - "x-ms-trigger": "single", - "parameters": [ - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "typeName": { - "type": "string", - "description": "typeName", - "title": "", - "x-ms-visibility": "internal", - "default": "Individual.Created" - }, - "filters": { - "type": "array", - "items": { - "type": "string", - "title": "Additional Filters", - "x-ms-visibility": "advanced" - }, - "description": "filters" - }, - "secret": { - "type": "string", - "description": "secret", - "title": "", - "x-ms-visibility": "internal", - "default": "MyAssocDemo" - }, - "callBackUrl": { - "type": "string", - "description": "callBackUrl", - "x-ms-notification-url": true, - "x-ms-visibility": "internal", - "title": "" - }, - "description": { - "type": "string", - "description": "description", - "title": "", - "x-ms-visibility": "internal", - "default": "Added By MSFlow - SALESDEMO" - } - }, - "required": [ - "callBackUrl", - "secret", - "typeName", - "description" - ] - } - } - ] - } - }, - "/api/v1/Webhooks/ProductPurchased": { - "x-ms-notification-content": { - "description": "Product Purchased", - "schema": { - "type": "object", - "properties": { - "WebhookId": { - "type": "string", - "description": "WebhookId" - }, - "Properties": { - "type": "object", - "properties": { - "AdditionalFilter": { - "type": "string", - "description": "AdditionalFilter" - }, - "Date": { - "type": "string", - "description": "Date" - } - }, - "description": "Properties" - }, - "Notifications": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Action": { - "type": "string", - "description": "Action" - }, - "OrderNumber": { - "type": "string", - "description": "OrderNumber" - }, - "InvoiceNumber": { - "type": "string", - "description": "InvoiceNumber" - }, - "ProductCode": { - "type": "string", - "description": "ProductCode", - "title": "" - }, - "ProductName": { - "type": "string", - "description": "ProductName" - }, - "ProductType": { - "type": "string", - "description": "ProductType" - }, - "Quantity": { - "type": "string", - "description": "Quantity" - }, - "ItemPrice": { - "type": "string", - "description": "ItemPrice" - }, - "CustomerType": { - "type": "string", - "description": "CustomerType" - }, - "CustomerId": { - "type": "string", - "description": "CustomerId" - }, - "FullName": { - "type": "string", - "description": "FullName" - }, - "FirstName": { - "type": "string", - "description": "FirstName" - }, - "LastName": { - "type": "string", - "description": "LastName" - }, - "EmailAddress": { - "type": "string", - "description": "EmailAddress" - }, - "RecordNumber": { - "type": "string", - "description": "RecordNumber" - } - } - }, - "description": "Notifications" - } - } - } - }, - "post": { - "responses": { - "default": { - "description": "default", - "schema": {} - } - }, - "summary": "When Product is Purchased", - "description": "When Product is Purchased. Supported Product Types: Merchandise, Courses, Exams", - "operationId": "When-product-purchased", - "x-ms-trigger": "single", - "parameters": [ - { - "name": "Content-Type", - "in": "header", - "required": true, - "type": "string", - "default": "application/json", - "x-ms-visibility": "internal" - }, - { - "name": "AppToken", - "in": "header", - "required": true, - "type": "string", - "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", - "x-ms-visibility": "internal" - }, - { - "name": "UserToken", - "in": "header", - "required": true, - "type": "string", - "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", - "x-ms-visibility": "internal" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id", - "title": "", - "x-ms-visibility": "internal" - }, - "typeName": { - "type": "string", - "description": "typeName", - "title": "", - "x-ms-visibility": "internal", - "default": "Product.Purchased" - }, - "filters": { - "type": "array", - "items": { - "type": "string", - "title": "Product Code", - "x-ms-visibility": "advanced" - }, - "description": "filters" - }, - "secret": { - "type": "string", - "description": "secret", - "title": "", - "x-ms-visibility": "internal", - "default": "prodPurchasedFLOW" - }, - "callBackUrl": { - "type": "string", - "description": "callBackUrl", - "title": "", - "x-ms-visibility": "internal", - "x-ms-notification-url": true - }, - "description": { - "type": "string", - "description": "description", - "title": "", - "x-ms-visibility": "internal", - "default": "AddedByFlow" - } - }, - "required": [ - "callBackUrl", - "description", - "secret", - "typeName" - ] - } - } - ] - } - } - }, - "definitions": {}, - "parameters": {}, - "responses": {}, - "securityDefinitions": {}, - "security": [], - "tags": [], - "x-ms-connector-metadata": [ - { - "propertyName": "Website", - "propertyValue": "http://www.impexium.com" - }, - { - "propertyName": "Privacy policy", - "propertyValue": "https://www.impexium.com/impexium-information-security-policy/" - }, - { - "propertyName": "Categories", - "propertyValue": "AMS;Membership;Association Membership Management" - } - ] -} diff --git a/certified-connectors/Impexium/apiProperties.json b/certified-connectors/Impexium/apiProperties.json deleted file mode 100644 index 8de69fe26..000000000 --- a/certified-connectors/Impexium/apiProperties.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "properties": { - "connectionParameters": {}, - "iconBrandColor": "#007ee5", - "capabilities": [], - "publisher": "Impexium Corporation", - "stackOwner": "Impexium Corporation" - } -} From bf2347c9e5bc62ad727d1dc7cb35c1e657c974e2 Mon Sep 17 00:00:00 2001 From: RjImpx <72759719+RjImpx@users.noreply.github.com> Date: Mon, 12 Oct 2020 19:33:17 -0400 Subject: [PATCH 127/347] Initial submission for Impexium Connector --- certified-connectors/Impexium/README.md | 22 + .../Impexium/apiDefinition.swagger.json | 1850 +++++++++++++++++ .../Impexium/apiProperties.json | 8 + 3 files changed, 1880 insertions(+) create mode 100644 certified-connectors/Impexium/README.md create mode 100644 certified-connectors/Impexium/apiDefinition.swagger.json create mode 100644 certified-connectors/Impexium/apiProperties.json diff --git a/certified-connectors/Impexium/README.md b/certified-connectors/Impexium/README.md new file mode 100644 index 000000000..cadb201eb --- /dev/null +++ b/certified-connectors/Impexium/README.md @@ -0,0 +1,22 @@ +##Impexium Connector +Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members. + +## Prerequisites +1. Create an account on the Impexium site. Visit support.impexium.com if you need help. +## How to get credentials? + +##Supported Triggers +1. When an Individual is added. +2. When a product is purchased. + +##Supported Actions +1. Add an Individual +2. Add Activity +3. Find Individual by Email Address +4. Add Individual to a Committee +5. Add an Organization +6. Add relationship to an Individual +7. Get a list of all custom fields +8. Find Individual by Phone Number + + diff --git a/certified-connectors/Impexium/apiDefinition.swagger.json b/certified-connectors/Impexium/apiDefinition.swagger.json new file mode 100644 index 000000000..a3a124e0e --- /dev/null +++ b/certified-connectors/Impexium/apiDefinition.swagger.json @@ -0,0 +1,1850 @@ +{ + "swagger": "2.0", + "info": { + "title": "Impexium", + "description": "Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members.", + "version": "1.0", + "contact": { + "name": "Impexium Support", + "url": "support.impexium.com", + "email": "support@impexium.com" + } + }, + "host": "automation.impexium.com", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/api/v1/Individuals": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "firstName": { + "type": "string", + "description": "firstName" + }, + "lastName": { + "type": "string", + "description": "lastName" + }, + "middleName": { + "type": "string", + "description": "middleName" + }, + "preferredFirstName": { + "type": "string", + "description": "preferredFirstName" + }, + "secondLastName": { + "type": "string", + "description": "secondLastName" + }, + "prefix": { + "type": "string", + "description": "prefix" + }, + "suffix": { + "type": "string", + "description": "suffix" + }, + "gender": { + "type": "string", + "description": "gender" + }, + "primaryOrganization": { + "type": "string", + "description": "primaryOrganization" + }, + "committees": { + "type": "array", + "items": {}, + "description": "committees" + }, + "securityRoles": { + "type": "array", + "items": {}, + "description": "securityRoles" + }, + "user": { + "type": "string", + "description": "user" + }, + "designationData": { + "type": "array", + "items": {}, + "description": "designationData" + }, + "relationships": { + "type": "array", + "items": {}, + "description": "relationships" + }, + "id": { + "type": "string", + "description": "id" + }, + "customerType": { + "type": "string", + "description": "customerType" + }, + "recordNumber": { + "type": "string", + "description": "recordNumber" + }, + "title": { + "type": "string", + "description": "title" + }, + "name": { + "type": "string", + "description": "name" + }, + "addresses": { + "type": "array", + "items": {}, + "description": "addresses" + }, + "email": { + "type": "string", + "description": "email" + }, + "imageUri": { + "type": "string", + "description": "imageUri" + }, + "twitter": { + "type": "string", + "description": "twitter" + }, + "linkedIn": { + "type": "string", + "description": "linkedIn" + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "primary": { + "type": "boolean", + "description": "primary" + }, + "address": { + "type": "string", + "description": "address" + }, + "type": { + "type": "string", + "description": "type" + } + } + }, + "description": "emails" + }, + "phones": { + "type": "array", + "items": {}, + "description": "phones" + }, + "webSite": { + "type": "string", + "description": "webSite" + }, + "memberships": { + "type": "array", + "items": {}, + "description": "memberships" + }, + "category": { + "type": "string", + "description": "category" + }, + "categories": { + "type": "array", + "items": {}, + "description": "categories" + }, + "customFields": { + "type": "array", + "items": {}, + "description": "customFields" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "links": { + "type": "array", + "items": {}, + "description": "links" + } + } + }, + "headers": { + "{": { + "description": "{", + "type": "string" + }, + "\"cache-control\":": { + "description": "\"cache-control\":", + "type": "string" + }, + "\"content-encoding\":": { + "description": "\"content-encoding\":", + "type": "string" + }, + "\"content-type\":": { + "description": "\"content-type\":", + "type": "string" + }, + "\"date\":": { + "description": "\"date\":", + "type": "string" + }, + "\"expires\":": { + "description": "\"expires\":", + "type": "string" + }, + "\"pragma\":": { + "description": "\"pragma\":", + "type": "string" + }, + "\"vary\":": { + "description": "\"vary\":", + "type": "string" + }, + "\"x-aspnet-version\":": { + "description": "\"x-aspnet-version\":", + "type": "string" + }, + "\"x-frame-options\":": { + "description": "\"x-frame-options\":", + "type": "string" + }, + "\"x-powered-by\":": { + "description": "\"x-powered-by\":", + "type": "string" + }, + "}": { + "description": "}", + "type": "string" + } + } + } + }, + "summary": "Add Individual", + "description": "Adds an Individual", + "operationId": "Add-Individual", + "parameters": [ + { + "name": "createUser", + "in": "query", + "required": false, + "type": "string", + "default": "False", + "description": "Choose True if a user account should be created", + "enum": [ + "True", + "False" + ], + "x-ms-visibility": "advanced", + "x-ms-summary": "Creates User." + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "firstName": { + "type": "string", + "description": "firstName" + }, + "lastName": { + "type": "string", + "description": "lastName" + }, + "email": { + "type": "string", + "description": "email", + "title": "", + "x-ms-visibility": "Advanced" + } + } + } + } + ] + } + }, + "/api/v1/Individuals/{id}/Activities": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Add Activity", + "description": "Add Activity", + "operationId": "Add-Activity", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "Individual ID", + "x-ms-summary": "Individual ID" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "category" + }, + "text": { + "type": "string", + "description": "text" + }, + "url": { + "type": "string", + "description": "url" + }, + "activityDate": { + "type": "string", + "description": "activityDate" + } + } + } + } + ] + } + }, + "/api/v1/Individuals/Profile/{idOrRecordNumberOrEmail}/{pageNumber}/": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "pageNumber": { + "type": "integer", + "format": "int32", + "description": "pageNumber" + }, + "dataList": { + "type": "array", + "items": { + "type": "object", + "properties": { + "firstName": { + "type": "string", + "description": "firstName" + }, + "lastName": { + "type": "string", + "description": "lastName" + }, + "middleName": { + "type": "string", + "description": "middleName" + }, + "preferredFirstName": { + "type": "string", + "description": "preferredFirstName" + }, + "secondLastName": { + "type": "string", + "description": "secondLastName" + }, + "prefix": { + "type": "string", + "description": "prefix" + }, + "suffix": { + "type": "string", + "description": "suffix" + }, + "gender": { + "type": "string", + "description": "gender" + }, + "primaryOrganization": { + "type": "object", + "properties": { + "contactIds": { + "type": "array", + "items": {}, + "description": "contactIds" + }, + "parentCompanyId": { + "type": "string", + "description": "parentCompanyId" + }, + "description": { + "type": "string", + "description": "description" + }, + "branchName": { + "type": "string", + "description": "branchName" + }, + "tags": { + "type": "array", + "items": {}, + "description": "tags" + }, + "id": { + "type": "string", + "description": "id" + }, + "customerType": { + "type": "string", + "description": "customerType" + }, + "recordNumber": { + "type": "string", + "description": "recordNumber" + }, + "title": { + "type": "string", + "description": "title" + }, + "name": { + "type": "string", + "description": "name" + }, + "addresses": { + "type": "array", + "items": {}, + "description": "addresses" + }, + "imageUri": { + "type": "string", + "description": "imageUri" + }, + "emails": { + "type": "array", + "items": {}, + "description": "emails" + }, + "phones": { + "type": "array", + "items": {}, + "description": "phones" + }, + "webSite": { + "type": "string", + "description": "webSite" + }, + "memberships": { + "type": "array", + "items": {}, + "description": "memberships" + }, + "category": { + "type": "string", + "description": "category" + }, + "categories": { + "type": "array", + "items": {}, + "description": "categories" + }, + "customFields": { + "type": "array", + "items": {}, + "description": "customFields" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "links": { + "type": "array", + "items": {}, + "description": "links" + }, + "oldId": { + "type": "string", + "description": "oldId" + } + }, + "description": "primaryOrganization" + }, + "committees": { + "type": "array", + "items": {}, + "description": "committees" + }, + "securityRoles": { + "type": "array", + "items": {}, + "description": "securityRoles" + }, + "user": { + "type": "object", + "properties": { + "loginEmail": { + "type": "string", + "description": "loginEmail" + }, + "mustChangePassword": { + "type": "boolean", + "description": "mustChangePassword" + }, + "isApproved": { + "type": "boolean", + "description": "isApproved" + } + }, + "description": "user" + }, + "designationData": { + "type": "array", + "items": {}, + "description": "designationData" + }, + "relationships": { + "type": "array", + "items": {}, + "description": "relationships" + }, + "jobRoles": { + "type": "array", + "items": {}, + "description": "jobRoles" + }, + "id": { + "type": "string", + "description": "id" + }, + "customerType": { + "type": "string", + "description": "customerType" + }, + "recordNumber": { + "type": "string", + "description": "recordNumber" + }, + "title": { + "type": "string", + "description": "title" + }, + "name": { + "type": "string", + "description": "name" + }, + "addresses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "primary": { + "type": "boolean", + "description": "primary" + }, + "line1": { + "type": "string", + "description": "line1" + }, + "line2": { + "type": "string", + "description": "line2" + }, + "line3": { + "type": "string", + "description": "line3" + }, + "city": { + "type": "string", + "description": "city" + }, + "state": { + "type": "string", + "description": "state" + }, + "zipcode": { + "type": "string", + "description": "zipcode" + }, + "country": { + "type": "string", + "description": "country" + }, + "stateAbbreviation": { + "type": "string", + "description": "stateAbbreviation" + }, + "stateISOCode": { + "type": "string", + "description": "stateISOCode" + }, + "type": { + "type": "string", + "description": "type" + }, + "region": { + "type": "string", + "description": "region" + }, + "latitude": { + "type": "number", + "format": "float", + "description": "latitude" + }, + "longitude": { + "type": "number", + "format": "float", + "description": "longitude" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "congressionalDistrict": { + "type": "string", + "description": "congressionalDistrict" + }, + "countryData": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "name": { + "type": "string", + "description": "name" + }, + "twoLetterIsoCode": { + "type": "string", + "description": "twoLetterIsoCode" + }, + "threeLetterIsoCode": { + "type": "string", + "description": "threeLetterIsoCode" + }, + "code": { + "type": "integer", + "format": "int32", + "description": "code" + } + }, + "description": "countryData" + } + } + }, + "description": "addresses" + }, + "email": { + "type": "string", + "description": "email" + }, + "imageUri": { + "type": "string", + "description": "imageUri" + }, + "twitter": { + "type": "string", + "description": "twitter" + }, + "linkedIn": { + "type": "string", + "description": "linkedIn" + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "primary": { + "type": "boolean", + "description": "primary" + }, + "address": { + "type": "string", + "description": "address" + }, + "type": { + "type": "string", + "description": "type" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + } + } + }, + "description": "emails" + }, + "phones": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "primary": { + "type": "boolean", + "description": "primary" + }, + "type": { + "type": "integer", + "format": "int32", + "description": "type" + }, + "country": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id" + }, + "name": { + "type": "string", + "description": "name" + }, + "twoLetterIsoCode": { + "type": "string", + "description": "twoLetterIsoCode" + }, + "threeLetterIsoCode": { + "type": "string", + "description": "threeLetterIsoCode" + }, + "code": { + "type": "integer", + "format": "int32", + "description": "code" + } + }, + "description": "country" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "number": { + "type": "string", + "description": "number" + }, + "extension": { + "type": "string", + "description": "extension" + }, + "typeName": { + "type": "string", + "description": "typeName" + } + } + }, + "description": "phones" + }, + "webSite": { + "type": "string", + "description": "webSite" + }, + "memberships": { + "type": "array", + "items": { + "type": "object", + "properties": { + "membershipType": { + "type": "string", + "description": "membershipType" + }, + "membershipTypeId": { + "type": "string", + "description": "membershipTypeId" + }, + "code": { + "type": "string", + "description": "code" + }, + "expireDate": { + "type": "string", + "description": "expireDate" + }, + "graceExpireDate": { + "type": "string", + "description": "graceExpireDate" + }, + "inheritedMembershipBenefits": { + "type": "boolean", + "description": "inheritedMembershipBenefits" + }, + "renewalUrl": { + "type": "string", + "description": "renewalUrl" + }, + "joinDate": { + "type": "string", + "description": "joinDate" + }, + "terminateDate": { + "type": "string", + "description": "terminateDate" + }, + "effectiveDate": { + "type": "string", + "description": "effectiveDate" + } + } + }, + "description": "memberships" + }, + "category": { + "type": "string", + "description": "category" + }, + "categories": { + "type": "array", + "items": {}, + "description": "categories" + }, + "customFields": { + "type": "array", + "items": {}, + "description": "customFields" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "links": { + "type": "array", + "items": {}, + "description": "links" + }, + "oldId": { + "type": "string", + "description": "oldId" + }, + "isDeceased": { + "type": "boolean", + "description": "isDeceased" + } + } + }, + "description": "dataList" + } + } + } + } + }, + "summary": "Find Individual by ID or Email or RecordNumber", + "description": "Find Individual by ID or Email", + "operationId": "Find-Individual-IDOrEmail", + "parameters": [ + { + "name": "idOrRecordNumberOrEmail", + "in": "path", + "required": true, + "type": "string", + "description": "ID Or Record Number Or Email", + "x-ms-summary": "ID Or Record Number Or Email" + }, + { + "name": "pageNumber", + "in": "path", + "required": true, + "type": "string", + "default": "1", + "x-ms-visibility": "internal" + }, + { + "name": "IncludeDetails", + "in": "query", + "required": true, + "type": "string", + "default": "True", + "x-ms-visibility": "internal" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + } + ] + } + }, + "/api/v1/Committees/{code}/Members": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Add Individual to Committee", + "description": "Add Individual to Committee", + "operationId": "Add-To-Committee", + "parameters": [ + { + "name": "code", + "in": "path", + "required": true, + "type": "string", + "description": "Committee Code", + "x-ms-summary": "Committee Code" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "recordNumber": { + "type": "string", + "description": "recordNumber" + }, + "code": { + "type": "string", + "description": "code", + "title": "", + "x-ms-visibility": "advanced" + }, + "positionCode": { + "type": "string", + "description": "positionCode" + }, + "startDate": { + "type": "string", + "description": "startDate" + } + } + } + } + ] + } + }, + "/api/v1/Organizations": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Add Organization", + "description": "Add Organization", + "operationId": "Add-Organization", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id", + "title": "ID", + "x-ms-visibility": "advanced" + }, + "name": { + "type": "string", + "description": "name", + "title": "Name", + "x-ms-visibility": "advanced" + }, + "showInDirectory": { + "type": "boolean", + "description": "show In Directory", + "title": "Show In Directory?", + "x-ms-visibility": "internal", + "enum": [ + true, + false + ], + "default": false + }, + "branchName": { + "type": "string", + "description": "branchName", + "title": "Branch Name", + "x-ms-visibility": "advanced" + }, + "website": { + "type": "string", + "description": "website", + "title": "Website", + "x-ms-visibility": "advanced" + } + }, + "required": [ + "name", + "showInDirectory" + ] + } + } + ] + } + }, + "/api/v1/Individuals/{id}/Relationships": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Add Relationship to Individual", + "description": "Add Relationship to Individual", + "operationId": "Add-relationship-to-individual", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "Individual ID", + "x-ms-summary": "Individual ID" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "Application/Json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "relationshipName": { + "type": "string", + "description": "relationshipName", + "title": "Relationship Name", + "x-ms-visibility": "advanced", + "default": "Employee" + }, + "relatedToCustomerRecordNumber": { + "type": "string", + "description": "relatedToCustomerRecordNumber", + "title": "relatedToCustomerRecordNumber", + "x-ms-visibility": "advanced" + }, + "reciprocalRelationshipName": { + "type": "string", + "description": "reciprocalRelationshipName", + "title": "Reciprocal Relationship Name", + "x-ms-visibility": "advanced", + "default": "Employer" + }, + "isPrimary": { + "type": "boolean", + "description": "isPrimary", + "title": "Is Primary?", + "x-ms-visibility": "advanced", + "enum": [ + true, + false + ], + "default": false + }, + "startDate": { + "type": "string", + "description": "startDate", + "title": "Start Date", + "x-ms-visibility": "advanced" + }, + "endDate": { + "type": "string", + "description": "endDate", + "title": "End Date", + "x-ms-visibility": "advanced" + } + }, + "required": [ + "reciprocalRelationshipName", + "relatedToCustomerRecordNumber", + "relationshipName" + ] + } + } + ] + } + }, + "/api/v1/Organizations/{id}": { + "put": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Update Organization", + "description": "Update Organization", + "operationId": "Update-Organization", + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "Organization ID", + "x-ms-summary": "Organization ID" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "name" + }, + "description": { + "type": "string", + "description": "description" + }, + "showInDirectory": { + "type": "boolean", + "description": "showInDirectory" + }, + "branchName": { + "type": "string", + "description": "branchName" + }, + "website": { + "type": "string", + "description": "website" + } + } + } + } + ] + } + }, + "/api/v1/Setup/customfields/{pageNumber}": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "x-ms-visibility": "internal", + "summary": "List of all custom fields", + "description": "List of all custom fields", + "operationId": "List-of-all-custom-fields", + "parameters": [ + { + "name": "pageNumber", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + } + ] + } + }, + "/": { + "x-ms-notification-content": { + "schema": { + "type": "object", + "properties": { + "WebhookId": { + "type": "string", + "description": "WebhookId" + }, + "Properties": { + "type": "object", + "properties": { + "Date": { + "type": "string", + "description": "Date" + } + }, + "description": "Properties" + }, + "Notifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Action": { + "type": "string", + "description": "Action" + }, + "IndividualId": { + "type": "string", + "description": "IndividualId" + }, + "RecordNumber": { + "type": "string", + "description": "RecordNumber" + }, + "FirstName": { + "type": "string", + "description": "FirstName" + }, + "LastName": { + "type": "string", + "description": "LastName" + }, + "EmailAddress": { + "type": "string", + "description": "EmailAddress" + } + } + }, + "description": "Notifications" + } + } + }, + "description": "Individual Created" + } + }, + "/api/v1/Customers/{pageNumber}": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Find an individual by phone number", + "description": "Find an individual by phone number", + "operationId": "Find-Individual-Phone", + "parameters": [ + { + "name": "pageNumber", + "in": "path", + "required": true, + "type": "string", + "default": "1", + "x-ms-visibility": "internal" + }, + { + "name": "phoneNumber", + "in": "query", + "required": true, + "type": "string", + "description": "Phone Number", + "x-ms-summary": "Phone Number" + }, + { + "name": "includeAddress", + "in": "query", + "required": true, + "type": "string", + "default": "True", + "x-ms-visibility": "internal" + }, + { + "name": "includePhone", + "in": "query", + "required": true, + "type": "string", + "default": "True", + "x-ms-visibility": "internal" + }, + { + "name": "includeEmail", + "in": "query", + "required": true, + "type": "string", + "default": "True", + "x-ms-visibility": "internal" + }, + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + } + ] + } + }, + "/api/v1/Webhooks": { + "x-ms-notification-content": { + "schema": { + "type": "object", + "properties": { + "WebhookId": { + "type": "string", + "description": "WebhookId" + }, + "Properties": { + "type": "object", + "properties": { + "Date": { + "type": "string", + "description": "Date" + } + }, + "description": "Properties" + }, + "Notifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Action": { + "type": "string", + "description": "Action" + }, + "IndividualId": { + "type": "string", + "description": "IndividualId" + }, + "RecordNumber": { + "type": "string", + "description": "RecordNumber" + }, + "FirstName": { + "type": "string", + "description": "FirstName" + }, + "LastName": { + "type": "string", + "description": "LastName" + }, + "EmailAddress": { + "type": "string", + "description": "EmailAddress" + } + } + }, + "description": "Notifications" + } + } + }, + "description": "Individual Added" + }, + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Individual Created", + "description": "When an Individual is created", + "operationId": "When-Individual-Created", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "typeName": { + "type": "string", + "description": "typeName", + "title": "", + "x-ms-visibility": "internal", + "default": "Individual.Created" + }, + "filters": { + "type": "array", + "items": { + "type": "string", + "title": "Additional Filters", + "x-ms-visibility": "advanced" + }, + "description": "filters" + }, + "secret": { + "type": "string", + "description": "secret", + "title": "", + "x-ms-visibility": "internal", + "default": "MyAssocDemo" + }, + "callBackUrl": { + "type": "string", + "description": "callBackUrl", + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "title": "" + }, + "description": { + "type": "string", + "description": "description", + "title": "", + "x-ms-visibility": "internal", + "default": "Added By MSFlow - SALESDEMO" + } + }, + "required": [ + "callBackUrl", + "secret", + "typeName", + "description" + ] + } + } + ] + } + }, + "/api/v1/Webhooks/ProductPurchased": { + "x-ms-notification-content": { + "description": "Product Purchased", + "schema": { + "type": "object", + "properties": { + "WebhookId": { + "type": "string", + "description": "WebhookId" + }, + "Properties": { + "type": "object", + "properties": { + "AdditionalFilter": { + "type": "string", + "description": "AdditionalFilter" + }, + "Date": { + "type": "string", + "description": "Date" + } + }, + "description": "Properties" + }, + "Notifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Action": { + "type": "string", + "description": "Action" + }, + "OrderNumber": { + "type": "string", + "description": "OrderNumber" + }, + "InvoiceNumber": { + "type": "string", + "description": "InvoiceNumber" + }, + "ProductCode": { + "type": "string", + "description": "ProductCode", + "title": "" + }, + "ProductName": { + "type": "string", + "description": "ProductName" + }, + "ProductType": { + "type": "string", + "description": "ProductType" + }, + "Quantity": { + "type": "string", + "description": "Quantity" + }, + "ItemPrice": { + "type": "string", + "description": "ItemPrice" + }, + "CustomerType": { + "type": "string", + "description": "CustomerType" + }, + "CustomerId": { + "type": "string", + "description": "CustomerId" + }, + "FullName": { + "type": "string", + "description": "FullName" + }, + "FirstName": { + "type": "string", + "description": "FirstName" + }, + "LastName": { + "type": "string", + "description": "LastName" + }, + "EmailAddress": { + "type": "string", + "description": "EmailAddress" + }, + "RecordNumber": { + "type": "string", + "description": "RecordNumber" + } + } + }, + "description": "Notifications" + } + } + } + }, + "post": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "When Product is Purchased", + "description": "When Product is Purchased. Supported Product Types: Merchandise, Courses, Exams", + "operationId": "When-product-purchased", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "Content-Type", + "in": "header", + "required": true, + "type": "string", + "default": "application/json", + "x-ms-visibility": "internal" + }, + { + "name": "AppToken", + "in": "header", + "required": true, + "type": "string", + "default": "69a489d9-53fd-43aa-b04c-5c15ed4c73dd", + "x-ms-visibility": "internal" + }, + { + "name": "UserToken", + "in": "header", + "required": true, + "type": "string", + "default": "98ae7807-0902-4e66-9b0a-bfe0ecd204de", + "x-ms-visibility": "internal" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id", + "title": "", + "x-ms-visibility": "internal" + }, + "typeName": { + "type": "string", + "description": "typeName", + "title": "", + "x-ms-visibility": "internal", + "default": "Product.Purchased" + }, + "filters": { + "type": "array", + "items": { + "type": "string", + "title": "Product Code", + "x-ms-visibility": "advanced" + }, + "description": "filters" + }, + "secret": { + "type": "string", + "description": "secret", + "title": "", + "x-ms-visibility": "internal", + "default": "prodPurchasedFLOW" + }, + "callBackUrl": { + "type": "string", + "description": "callBackUrl", + "title": "", + "x-ms-visibility": "internal", + "x-ms-notification-url": true + }, + "description": { + "type": "string", + "description": "description", + "title": "", + "x-ms-visibility": "internal", + "default": "AddedByFlow" + } + }, + "required": [ + "callBackUrl", + "description", + "secret", + "typeName" + ] + } + } + ] + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "security": [], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "http://wwww.impexium.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.impexium.com/impexium-information-security-policy/" + }, + { + "propertyName": "Categories", + "propertyValue": "AMS;Membership;Association Management Software" + } + ] +} diff --git a/certified-connectors/Impexium/apiProperties.json b/certified-connectors/Impexium/apiProperties.json new file mode 100644 index 000000000..8e3259ef2 --- /dev/null +++ b/certified-connectors/Impexium/apiProperties.json @@ -0,0 +1,8 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#D7212F", + "capabilities": [], + "publisher": "Impexium Corportation" + } +} From a43eac1e7fcf5b97b2f65e2194ac7d613c672bf8 Mon Sep 17 00:00:00 2001 From: RjImpx <72759719+RjImpx@users.noreply.github.com> Date: Mon, 12 Oct 2020 19:37:52 -0400 Subject: [PATCH 128/347] Update apiProperties - Fix Typo --- certified-connectors/Impexium/apiProperties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Impexium/apiProperties.json b/certified-connectors/Impexium/apiProperties.json index 8e3259ef2..e4cbfb334 100644 --- a/certified-connectors/Impexium/apiProperties.json +++ b/certified-connectors/Impexium/apiProperties.json @@ -3,6 +3,6 @@ "connectionParameters": {}, "iconBrandColor": "#D7212F", "capabilities": [], - "publisher": "Impexium Corportation" + "publisher": "Impexium Corporation" } } From ab30a1bc84008b12b8d67619b88b226aa23ce86e Mon Sep 17 00:00:00 2001 From: RjImpx <72759719+RjImpx@users.noreply.github.com> Date: Mon, 12 Oct 2020 19:39:41 -0400 Subject: [PATCH 129/347] Update ReadMe.md --- certified-connectors/Impexium/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/Impexium/README.md b/certified-connectors/Impexium/README.md index cadb201eb..25a93c428 100644 --- a/certified-connectors/Impexium/README.md +++ b/certified-connectors/Impexium/README.md @@ -2,8 +2,8 @@ Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members. ## Prerequisites -1. Create an account on the Impexium site. Visit support.impexium.com if you need help. -## How to get credentials? +Create an account on the Impexium site. Visit support.impexium.com if you need help. + ##Supported Triggers 1. When an Individual is added. From e01646325ead6e64274fd32f505599d9a5b3fd13 Mon Sep 17 00:00:00 2001 From: MickH3 <35348655+MickH3@users.noreply.github.com> Date: Mon, 12 Oct 2020 21:42:55 -0400 Subject: [PATCH 130/347] AtBot Admin Connector (#485) * AtBot Admin Connector Initial submission for AtBot Admin connector. * Removed client id reference Pre recommendation. * Converted dummy values to null --- certified-connectors/AtBot Admin/README.md | 18 + .../AtBot Admin/apiDefinition.swagger.json | 941 ++++++++++++++++++ .../AtBot Admin/apiProperties.json | 34 + 3 files changed, 993 insertions(+) create mode 100644 certified-connectors/AtBot Admin/README.md create mode 100644 certified-connectors/AtBot Admin/apiDefinition.swagger.json create mode 100644 certified-connectors/AtBot Admin/apiProperties.json diff --git a/certified-connectors/AtBot Admin/README.md b/certified-connectors/AtBot Admin/README.md new file mode 100644 index 000000000..25d8f7a69 --- /dev/null +++ b/certified-connectors/AtBot Admin/README.md @@ -0,0 +1,18 @@ +# AtBot Admin Connector +AtBot by H3 Solutions, Inc., is a business bot that services the Microsoft cloud. + +## Supported Operations + +| Operation Name | Description | +| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| **When a skill is created or modified** | This operation triggers when a skill is created or updated. | +| **Redact bot message** | Replace a bot message with a redaction message. | +| **Get Admin Item Types for Read** | Get all Admin Item Types for Read | +| **Get Admin Item Types for Create** | Get all Admin Item Types for Create | +| **Get Admin Item Types for Update** | Get all Admin Item Types for Update | +| **Get Admin Item Types for Delete** | Get all Admin Item Types for Delete | +| **Get Admin Items by Type** | Get an Admin Items by Type | +| **Create Admin Item by Type** | Create an Admin Item by Type | +| **Update Admin Item by Type and Id** | Update an Admin Item by Type and Id | +| **Get Admin Item by Type and Id** | Get an Admin Item by Type and Id | +| **Delete Admin Item by Type and Id** | Delete an Admin Item by Type and Id | diff --git a/certified-connectors/AtBot Admin/apiDefinition.swagger.json b/certified-connectors/AtBot Admin/apiDefinition.swagger.json new file mode 100644 index 000000000..5eaf7f92e --- /dev/null +++ b/certified-connectors/AtBot Admin/apiDefinition.swagger.json @@ -0,0 +1,941 @@ +{ + "swagger": "2.0", + "info": { + "version": "2.2.0", + "title": "AtBot Admin", + "description": "AtBot is a no-code bot building service that allows you to create conversational UIs quickly without any programming experience. The Admin connector provides programmatic access to the configuration portal.", + "contact": { + "name": "AtBot Support", + "url": "https://admin.atbot.io/Docs", + "email": "support@atbot.io" + } + }, + "host": "bizzywork.azurewebsites.net", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/api/triggers/webhooks/registerAdmin_SkillModified": { + "post": { + "tags": [ + "WebHookRegistrations" + ], + "summary": "When a skill is created or modified", + "description": "This operation triggers when a skill is created or updated.", + "x-ms-no-generic-test": true, + "operationId": "WebHookRegistrations_Post_SkillModified", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "webHook", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WebHookEx_Admin_SkillModified" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/WebHook" + } + } + }, + "deprecated": false, + "x-ms-trigger": "single" + }, + "x-ms-notification-content": { + "description": "Data from the bot.", + "schema": { + "$ref": "#/definitions/SkillModifiedTriggerOutput" + } + } + }, + "/api/triggers/webhooks/delete_Admin": { + "delete": { + "tags": [ + "WebHookRegistrations" + ], + "summary": "Delete webhook", + "description": "Deletes the webhook.", + "x-ms-no-generic-test": true, + "operationId": "WebHookRegistrations_Delete", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "id", + "in": "query", + "description": "WebHook Id.", + "required": true, + "x-ms-summary": "WebHook Id", + "type": "string" + }, + { + "name": "pid", + "in": "query", + "description": "Principal Id.", + "required": true, + "x-ms-summary": "Principal Id", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK" + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/redactBotMessage": { + "post": { + "tags": [ + "Bot Data Compliance" + ], + "summary": "Redact bot message", + "description": "Replace a bot message with a redaction message.", + "operationId": "Admin_RedactBotMessage", + "consumes": [], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "content", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/AdminRedactBotMessageInfo" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/AdminRedactBotMessagePayload" + } + }, + "400": { + "description": "Unable to redact bot message." + }, + "500": { + "description": "Error redacting bot message." + } + }, + "deprecated": false + } + }, + "/api/triggers/admin/ListAdminItemTypesForGet": { + "get": { + "tags": [ "Admin Item Types for Read" ], + "summary": "Get Admin Item Types for Read", + "description": "Get all Admin Item Types for Read", + "operationId": "ListAdminItemTypesForGet", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AdminItemType" + } + } + }, + "400": { + "description": "No Admin Item Types found." + }, + "500": { + "description": "Error looking up Admin Item Types." + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/ListAdminItemTypesForCreate": { + "get": { + "tags": [ "Admin Item Types for Create" ], + "summary": "Get Admin Item Types for Create", + "description": "Get all Admin Item Types for Create", + "operationId": "ListAdminItemTypesForCreate", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AdminItemType" + } + } + }, + "400": { + "description": "No Admin Item Types found." + }, + "500": { + "description": "Error looking up Admin Item Types." + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/ListAdminItemTypesForUpdate": { + "get": { + "tags": [ "Admin Item Types for Update" ], + "summary": "Get Admin Item Types for Update", + "description": "Get all Admin Item Types for Update", + "operationId": "ListAdminItemTypesForUpdate", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AdminItemType" + } + } + }, + "400": { + "description": "No Admin Item Types found." + }, + "500": { + "description": "Error looking up Admin Item Types." + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/ListAdminItemTypesForDelete": { + "get": { + "tags": [ "Admin Item Types for Delete" ], + "summary": "Get Admin Item Types for Delete", + "description": "Get all Admin Item Types for Delete", + "operationId": "ListAdminItemTypesForDelete", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AdminItemType" + } + } + }, + "400": { + "description": "No Admin Item Types found." + }, + "500": { + "description": "Error looking up Admin Item Types." + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/AdminItems/{type}": { + "get": { + "tags": [ "Admin Item Types for Read" ], + "summary": "Get Admin Items by Type", + "description": "Get an Admin Items by Type", + "operationId": "GetAdminItem", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Select the type of item to get.", + "required": true, + "x-ms-summary": "Selected Type", + "x-ms-dynamic-values": { + "operationId": "ListAdminItemTypesForGet", + "parameters": {}, + "value-path": "value", + "value-title": "name" + }, + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/DynamicSchemaGetAdminItemOutput" + } + } + }, + "400": { + "description": "No Admin Items found." + }, + "500": { + "description": "Error getting Admin Items." + } + }, + "deprecated": false + }, + "post": { + "tags": [ "Admin Item Types for Create" ], + "summary": "Create Admin Item by Type", + "description": "Create an Admin Item by Type", + "operationId": "CreateAdminItem", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Select the type of item to get.", + "required": true, + "x-ms-summary": "Selected Type", + "x-ms-dynamic-values": { + "operationId": "ListAdminItemTypesForCreate", + "parameters": {}, + "value-path": "value", + "value-title": "name" + }, + "type": "integer", + "format": "int32" + }, + { + "name": "content", + "in": "body", + "required": true, + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "AdminItem_GetFieldsCreate", + "parameters": { + "type": { + "parameter": "type" + } + }, + "value-path": "notifications" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DynamicSchemaCreateUpdateAdminItemOutput" + } + }, + "400": { + "description": "No Admin Items found." + }, + "500": { + "description": "Error creating Admin Item." + } + }, + "deprecated": false + }, + "put": { + "tags": [ "Admin Item Types for Update" ], + "summary": "Update Admin Item by Type and Id", + "description": "Update an Admin Item by Type and Id", + "operationId": "UpdateAdminItem", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Select the type of item to get.", + "required": true, + "x-ms-summary": "Selected Type", + "x-ms-dynamic-values": { + "operationId": "ListAdminItemTypesForUpdate", + "parameters": {}, + "value-path": "value", + "value-title": "name" + }, + "type": "integer", + "format": "int32" + }, + { + "name": "content", + "in": "body", + "required": true, + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "AdminItem_GetFieldsUpdate", + "parameters": { + "type": { + "parameter": "type" + } + }, + "value-path": "notifications" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/DynamicSchemaCreateUpdateAdminItemOutput" + } + } + }, + "400": { + "description": "No Admin Items found." + }, + "500": { + "description": "Error updating Admin Item." + } + }, + "deprecated": false + } + }, + "/api/triggers/admin/AdminItems/{type}/{id}": { + "get": { + "tags": [ "Admin Item Types for Read" ], + "summary": "Get Admin Item by Type and Id", + "description": "Get an Admin Item by Type and Id", + "operationId": "GetAdminItemById", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Select the type of item to get.", + "required": true, + "x-ms-summary": "Selected Type", + "x-ms-dynamic-values": { + "operationId": "ListAdminItemTypesForGet", + "parameters": {}, + "value-path": "value", + "value-title": "name" + }, + "type": "integer", + "format": "int32" + }, + { + "name": "id", + "in": "path", + "description": "Provide the Id of item to get. Type NA when retrieving Logging and Settings", + "required": true, + "x-ms-summary": "Admin Item Id", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DynamicSchemaGetAdminItemOutput" + } + }, + "400": { + "description": "No Admin Items found." + }, + "500": { + "description": "Error getting Admin Item." + } + }, + "deprecated": false + }, + "delete": { + "tags": [ "Admin Item Types for Delete" ], + "summary": "Delete Admin Item by Type and Id", + "description": "Delete an Admin Item by Type and Id", + "operationId": "DeleteAdminItem", + "consumes": [], + "produces": [ "application/json" ], + "parameters": [ + { + "name": "type", + "in": "path", + "description": "Select the type of item to delete.", + "required": true, + "x-ms-summary": "Selected Type", + "x-ms-dynamic-values": { + "operationId": "ListAdminItemTypesForDelete", + "parameters": {}, + "value-path": "value", + "value-title": "name" + }, + "type": "integer", + "format": "int32" + }, + { + "name": "id", + "in": "path", + "description": "Provide the Id of item to delete.", + "required": true, + "x-ms-summary": "Admin Item Id", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "No Admin Items found." + }, + "500": { + "description": "Error deleting Admin Item." + } + }, + "deprecated": false + } + }, + "/api/triggers/admin/dynamicSchemaGetAdminItemOutput": { + "get": { + "tags": [ + "Admin Item Types for Read" + ], + "summary": "Get Admin Item Output Schema", + "description": "For internal use only.", + "operationId": "GenerateDynamicSchemaGetAdminItemOutput", + "consumes": [], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "type", + "in": "query", + "description": "The Item Type.", + "required": true, + "x-ms-summary": "Item Type", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/dynamicSchemaCreateUpdateAdminItemOutput": { + "get": { + "tags": [ + "Admin Item Types for Create" + ], + "summary": "Create or Update Admin Item Output Schema", + "description": "For internal use only.", + "operationId": "GenerateDynamicSchemaCreateUpdateAdminItemOutput", + "consumes": [], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "type", + "in": "query", + "description": "The Item Type.", + "required": true, + "x-ms-summary": "Item Type", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/dynamicSchemaCreateAdminItemFields": { + "get": { + "tags": [ + "Admin Item Types for Create" + ], + "summary": "Create Admin Item Field Schema", + "description": "For internal use only.", + "operationId": "AdminItem_GetFieldsCreate", + "consumes": [], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "type", + "in": "query", + "description": "The Item Type.", + "required": true, + "x-ms-summary": "Item Type", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/dynamicSchemaUpdateAdminItemFields": { + "get": { + "tags": [ + "Admin Item Types for Update" + ], + "summary": "Update Admin Item Field Schema", + "description": "For internal use only.", + "operationId": "AdminItem_GetFieldsUpdate", + "consumes": [], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "type", + "in": "query", + "description": "The Item Type.", + "required": true, + "x-ms-summary": "Item Type", + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + }, + "/api/triggers/admin/ListSpeechRegions": { + "get": { + "tags": [ + "Speech Regions" + ], + "summary": "List Speech Regions", + "description": "List suppported speech regions.", + "operationId": "ListSpeechRegions", + "consumes": [], + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/SpeechRegion" + } + } + }, + "400": { + "description": "No speech regions found." + }, + "500": { + "description": "Error looking up speech regions." + } + }, + "deprecated": false, + "x-ms-visibility": "internal" + } + } + }, + "definitions": { + "AdminItemType": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "DynamicSchemaGetAdminItemOutput": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GenerateDynamicSchemaGetAdminItemOutput", + "parameters": { + "type": { + "parameter": "type" + } + }, + "value-path": "item" + } + }, + "DynamicSchemaCreateUpdateAdminItemOutput": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GenerateDynamicSchemaCreateUpdateAdminItemOutput", + "parameters": { + "type": { + "parameter": "type" + } + }, + "value-path": "item" + } + }, + "SpeechRegion": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + } + } + }, + "AdminRedactBotMessageInfo": { + "required": [ + "messageRef", + "redactionMessage" + ], + "type": "object", + "properties": { + "messageRef": { + "description": "Message reference from chat transcripts.", + "type": "string", + "x-ms-summary": "Message reference" + }, + "redactionMessage": { + "description": "Type the message which will replace the bot message.", + "type": "string", + "x-ms-summary": "Redaction message" + } + } + }, + "AdminRedactBotMessagePayload": { + "type": "object", + "properties": { + "response": { + "type": "string" + } + } + }, + "SkillModifiedTriggerOutput": { + "type": "object", + "properties": { + "skillId": { + "description": "ID of the skill.", + "type": "string", + "x-ms-summary": "Skill ID" + }, + "skillName": { + "description": "Name of the skill.", + "type": "string", + "x-ms-summary": "Skill Name" + }, + "userName": { + "description": "User who created or updated the skill.", + "type": "string", + "x-ms-summary": "User Name" + }, + "categoryCount": { + "description": "Count of categories the skill is in. Will be 0 for uncategorized skills.", + "type": "integer", + "x-ms-summary": "Category Count" + }, + "categoryJSON": { + "description": "Category Json.", + "type": "string", + "x-ms-summary": "Category Json" + }, + "keywordJSON": { + "description": "Keyword Json.", + "type": "string", + "x-ms-summary": "Keyword Json" + }, + "intentJSON": { + "description": "LUIS Intents Json.", + "type": "string", + "x-ms-summary": "LUIS Intents Json" + } + } + }, + "WebHookEx_Admin_SkillModified": { + "required": [ + "webHookUri" + ], + "type": "object", + "properties": { + "id": { + "type": "string", + "x-ms-visibility": "internal" + }, + "webHookUri": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + }, + "secret": { + "type": "string", + "x-ms-visibility": "internal" + }, + "description": { + "type": "string", + "x-ms-visibility": "internal" + }, + "isPaused": { + "type": "boolean", + "x-ms-visibility": "internal" + }, + "filters": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "readOnly": true + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "readOnly": true + } + } + }, + "WebHook": { + "required": [ + "webHookUri" + ], + "type": "object", + "properties": { + "id": { + "type": "string", + "x-ms-visibility": "internal" + }, + "webHookUri": { + "type": "string", + "x-ms-notification-url": true, + "x-ms-visibility": "internal" + }, + "secret": { + "type": "string", + "x-ms-visibility": "internal" + }, + "description": { + "type": "string", + "x-ms-visibility": "internal" + }, + "isPaused": { + "type": "boolean", + "x-ms-visibility": "internal" + }, + "filters": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "readOnly": true + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "readOnly": true + } + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "AAD": { + "type": "oauth2", + "flow": "accessCode", + "authorizationUrl": "https://login.windows.net/common/oauth2/authorize", + "tokenUrl": "https://login.windows.net/common/oauth2/token", + "scopes": {} + } + }, + "security": [], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://admin.atbot.io" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://admin.atbot.io/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Productivity" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/AtBot Admin/apiProperties.json b/certified-connectors/AtBot Admin/apiProperties.json new file mode 100644 index 000000000..a0e1d07cb --- /dev/null +++ b/certified-connectors/AtBot Admin/apiProperties.json @@ -0,0 +1,34 @@ +{ + "properties": { + "capabilities": [], + "connectionParameters": { + "token": { + "oAuthSettings": { + "clientId": null, + "customParameters": { + "loginUri": { + "value": "https://login.windows.net" + }, + "resourceUri": { + "value": null + }, + "tenantId": { + "value": "common" + } + }, + "identityProvider": "aad", + "properties": { + "IsFirstParty": "False" + }, + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "scopes": [] + }, + "type": "oauthSetting" + } + }, + "iconBrandColor": "#1a050d", + "publisher": "H3 Solutions, Inc.", + "stackOwner": "H3 Solutions, Inc.", + "policyTemplateInstances": [] + } +} \ No newline at end of file From f4e68854e41788761bda50eaa7d081f511e81b90 Mon Sep 17 00:00:00 2001 From: skiplyfrance Date: Tue, 13 Oct 2020 07:33:44 +0200 Subject: [PATCH 131/347] Replace default responses by expected status codes Follow the recommandation of Srikanth: please replace the "default" responses with expected status codes, otherwise users may see errors about incorrect schema instead of real error responses from your service in OpenAPI mode. --- .../Ubiqod by Skiply/apiDefinition.swagger.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json b/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json index 6f0d9730e..09588ce1b 100644 --- a/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json +++ b/certified-connectors/Ubiqod by Skiply/apiDefinition.swagger.json @@ -23,8 +23,8 @@ "/key/unsubscribe/{routingId}": { "delete": { "responses": { - "default": { - "description": "default" + "200": { + "description": "Unsubscribe response" } }, "operationId": "DeleteRouting", @@ -113,8 +113,8 @@ }, "post": { "responses": { - "default": { - "description": "default" + "201": { + "description": "Subscribe response" } }, "summary": "When data is received from devices", @@ -188,8 +188,8 @@ "/key/getGroupsByName": { "get": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Group list response", "schema": { "type": "array", "items": { From 197a9d67b96fb3d36a8cdb369c822898a7ba8e2d Mon Sep 17 00:00:00 2001 From: Andreas Date: Tue, 13 Oct 2020 10:19:12 +0200 Subject: [PATCH 132/347] Updated description --- certified-connectors/Peltarion/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index 7bb050b2f..197a29404 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "title": "Peltarion AI", - "description": "Using this connector, you can connect your app with your Peltarion models. Just add the connector and enter URL and token from the Peltarion platform, and send your data", + "description": "The simplest and fastest way to use deep learning in your Power Apps. Add the connector, build your AI model and connect by adding your credentials.", "version": "1.0", "contact": { "name": "Peltarion", From b8ab6672fffb17930dc5c0ea9e29f9b7c8682563 Mon Sep 17 00:00:00 2001 From: Andreas Date: Tue, 13 Oct 2020 11:23:30 +0200 Subject: [PATCH 133/347] Updated descriptiont --- certified-connectors/Peltarion/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Peltarion/apiDefinition.swagger.json b/certified-connectors/Peltarion/apiDefinition.swagger.json index 197a29404..ef2dae148 100644 --- a/certified-connectors/Peltarion/apiDefinition.swagger.json +++ b/certified-connectors/Peltarion/apiDefinition.swagger.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "title": "Peltarion AI", - "description": "The simplest and fastest way to use deep learning in your Power Apps. Add the connector, build your AI model and connect by adding your credentials.", + "description": "The simplest and fastest way to use deep learning. Add the connector, build your AI model and connect by adding your credentials.", "version": "1.0", "contact": { "name": "Peltarion", From 3e11f19b7c63d3bbd3b042c2051d672285f5fb69 Mon Sep 17 00:00:00 2001 From: Paulius Podolskis Date: Tue, 13 Oct 2020 13:31:09 +0300 Subject: [PATCH 134/347] Dokobit Portal: status signed_file type fix --- .../Dokobit Portal/apiDefinition.swagger.json | 11 +++++++++-- certified-connectors/Dokobit Portal/readme.md | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/certified-connectors/Dokobit Portal/apiDefinition.swagger.json b/certified-connectors/Dokobit Portal/apiDefinition.swagger.json index e6017b78e..fea730281 100644 --- a/certified-connectors/Dokobit Portal/apiDefinition.swagger.json +++ b/certified-connectors/Dokobit Portal/apiDefinition.swagger.json @@ -440,9 +440,16 @@ "x-ms-summary title": "Name of the file" }, "signed_file": { - "type": "string", + "type": "object", "description": "signed_file", - "x-ms-summary title": "Signed file" + "x-ms-summary title": "Signed file", + "properties": { + "url": { + "type": "string", + "description": "url", + "x-ms-summary title": "url" + } + } }, "signers": { "type": "array", diff --git a/certified-connectors/Dokobit Portal/readme.md b/certified-connectors/Dokobit Portal/readme.md index 4ac29b246..d35761ea1 100644 --- a/certified-connectors/Dokobit Portal/readme.md +++ b/certified-connectors/Dokobit Portal/readme.md @@ -4,7 +4,7 @@ Use Dokobit portal with all the features that it has but make it automated so th ## Prerequisites -Dokobit Portal Flow connector requires a valid Dokobit Portal account with API access token. +In order to use Dokobit Portal, a Business or Enterprise plan in Dokobit Portal is required. Register for free at https://app.dokobit.com to explore the benefits, and contact us at sales@dokobit.com about upgrading your plan. ## How to get credentials? From 4ef0e3823819ec69913ab36bf619545358297a6d Mon Sep 17 00:00:00 2001 From: Jens Kock Date: Wed, 14 Oct 2020 08:36:28 +0200 Subject: [PATCH 135/347] changes based on pr feedback --- .../COSMO Bot/apiDefinition.swagger.json | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/certified-connectors/COSMO Bot/apiDefinition.swagger.json b/certified-connectors/COSMO Bot/apiDefinition.swagger.json index 77b9bf28b..3b3bf49b6 100644 --- a/certified-connectors/COSMO Bot/apiDefinition.swagger.json +++ b/certified-connectors/COSMO Bot/apiDefinition.swagger.json @@ -26,7 +26,7 @@ }, { "propertyName": "Categories", - "propertyValue": "AI;Bot;Chatbot" + "propertyValue": "AI;Communication" } ], "securityDefinitions": { @@ -61,7 +61,8 @@ "type": "object", "x-ms-dynamic-schema": { "operationId": "GetGlobalSettingsSchema", - "parameters": {} + "parameters": {}, + "value-path": "schema" } } } @@ -78,7 +79,15 @@ "200": { "description": "OK", "schema": { - "type": "object" + "type": "object", + "required": [ + "schema" + ], + "properties": { + "schema": { + "type": "object" + } + } } } } @@ -1000,7 +1009,7 @@ } ], "responses": { - "default": { + "200": { "description": "default" } } From 72ebbae5344c923be3a4d7828353142599b2843b Mon Sep 17 00:00:00 2001 From: RjImpx <72759719+RjImpx@users.noreply.github.com> Date: Wed, 14 Oct 2020 16:11:07 -0400 Subject: [PATCH 136/347] Changes based on feedback --- .../Impexium/apiDefinition.swagger.json | 52 +++++++++---------- .../Impexium/apiProperties.json | 3 +- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/certified-connectors/Impexium/apiDefinition.swagger.json b/certified-connectors/Impexium/apiDefinition.swagger.json index a3a124e0e..3f09ced7b 100644 --- a/certified-connectors/Impexium/apiDefinition.swagger.json +++ b/certified-connectors/Impexium/apiDefinition.swagger.json @@ -2,11 +2,11 @@ "swagger": "2.0", "info": { "title": "Impexium", - "description": "Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members.", + "description": "Impexium is the premier association management software solution for nonprofits and member-based organizations.", "version": "1.0", "contact": { "name": "Impexium Support", - "url": "support.impexium.com", + "url": "https://support.impexium.com", "email": "support@impexium.com" } }, @@ -21,8 +21,8 @@ "/api/v1/Individuals": { "post": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": { "type": "object", "properties": { @@ -311,8 +311,8 @@ "/api/v1/Individuals/{id}/Activities": { "post": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": {} } }, @@ -384,8 +384,8 @@ "/api/v1/Individuals/Profile/{idOrRecordNumberOrEmail}/{pageNumber}/": { "get": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": { "type": "object", "properties": { @@ -901,7 +901,7 @@ } } }, - "summary": "Find Individual by ID or Email or RecordNumber", + "summary": "Find Individual by ID or Email or Record Number", "description": "Find Individual by ID or Email", "operationId": "Find-Individual-IDOrEmail", "parameters": [ @@ -959,8 +959,8 @@ "/api/v1/Committees/{code}/Members": { "post": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": {} } }, @@ -1034,8 +1034,8 @@ "/api/v1/Organizations": { "post": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": {} } }, @@ -1122,8 +1122,8 @@ "/api/v1/Individuals/{id}/Relationships": { "post": { "responses": { - "default": { - "description": "default", + "200": { + "description": "200", "schema": {} } }, @@ -1227,8 +1227,8 @@ "/api/v1/Organizations/{id}": { "put": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": {} } }, @@ -1304,8 +1304,8 @@ "/api/v1/Setup/customfields/{pageNumber}": { "get": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": {} } }, @@ -1407,8 +1407,8 @@ "/api/v1/Customers/{pageNumber}": { "get": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": {} } }, @@ -1541,8 +1541,8 @@ }, "post": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": {} } }, @@ -1730,8 +1730,8 @@ }, "post": { "responses": { - "default": { - "description": "default", + "200": { + "description": "Success", "schema": {} } }, @@ -1844,7 +1844,7 @@ }, { "propertyName": "Categories", - "propertyValue": "AMS;Membership;Association Management Software" + "propertyValue": "Sales and CRM" } ] } diff --git a/certified-connectors/Impexium/apiProperties.json b/certified-connectors/Impexium/apiProperties.json index e4cbfb334..e6d5f76a6 100644 --- a/certified-connectors/Impexium/apiProperties.json +++ b/certified-connectors/Impexium/apiProperties.json @@ -3,6 +3,7 @@ "connectionParameters": {}, "iconBrandColor": "#D7212F", "capabilities": [], - "publisher": "Impexium Corporation" + "publisher": "Impexium Corporation", + "stackOwner": "Impexium Corporation" } } From 0efcf95f1823aa44005e45c4d6f2198b7f9b3d0b Mon Sep 17 00:00:00 2001 From: RjImpx <72759719+RjImpx@users.noreply.github.com> Date: Wed, 14 Oct 2020 16:14:22 -0400 Subject: [PATCH 137/347] Updated Readme.md --- certified-connectors/Impexium/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Impexium/README.md b/certified-connectors/Impexium/README.md index 25a93c428..a2a7cae47 100644 --- a/certified-connectors/Impexium/README.md +++ b/certified-connectors/Impexium/README.md @@ -1,5 +1,5 @@ ##Impexium Connector -Impexium is a SaaS based AMS that allows businesses to automate workflows, including adding activities, contacts, relationships and committee members. +Impexium is the premier association management software solution for nonprofits and member-based organizations. ## Prerequisites Create an account on the Impexium site. Visit support.impexium.com if you need help. From 4f11c88c9db07f0b22b86772cc0aeddbaba61256 Mon Sep 17 00:00:00 2001 From: Thaminda Edirisooriya Date: Wed, 14 Oct 2020 17:03:25 -0700 Subject: [PATCH 138/347] remove default response for errors --- .../apiDefinition.swagger.json | 35 +++---------------- 1 file changed, 5 insertions(+), 30 deletions(-) diff --git a/certified-connectors/CognitiveServicesTextAnalytics/apiDefinition.swagger.json b/certified-connectors/CognitiveServicesTextAnalytics/apiDefinition.swagger.json index 85f49a068..af231c861 100644 --- a/certified-connectors/CognitiveServicesTextAnalytics/apiDefinition.swagger.json +++ b/certified-connectors/CognitiveServicesTextAnalytics/apiDefinition.swagger.json @@ -220,12 +220,7 @@ "schema": { "$ref": "#/definitions/EntitiesResult" } - }, - "default": { - "description": "Error Response", - "schema": { - "$ref": "#/definitions/TextAnalyticsError" - } + } } }, "deprecated": false @@ -273,12 +268,7 @@ "schema": { "$ref": "#/definitions/EntityLinkingResult" } - }, - "default": { - "description": "Error Response", - "schema": { - "$ref": "#/definitions/TextAnalyticsError" - } + } } }, "deprecated": false @@ -326,12 +316,7 @@ "schema": { "$ref": "#/definitions/KeyPhraseResult" } - }, - "default": { - "description": "Error Response", - "schema": { - "$ref": "#/definitions/TextAnalyticsError" - } + } } }, "deprecated": false @@ -379,12 +364,7 @@ "schema": { "$ref": "#/definitions/LanguageResult" } - }, - "default": { - "description": "Error Response", - "schema": { - "$ref": "#/definitions/TextAnalyticsError" - } + } } }, "deprecated": false @@ -432,12 +412,7 @@ "schema": { "$ref": "#/definitions/SentimentResponse" } - }, - "default": { - "description": "Error Response", - "schema": { - "$ref": "#/definitions/TextAnalyticsError" - } + } } }, "deprecated": false From 594e1d7f43beacddfb97f91d333ba52061266b78 Mon Sep 17 00:00:00 2001 From: River <22485304+actual-size@users.noreply.github.com> Date: Thu, 15 Oct 2020 11:16:59 +1100 Subject: [PATCH 139/347] Add files via upload --- certified-connectors/Panviva/README.md | 110 +- .../Panviva/apiDefinition.swagger.json | 7905 +++++++++-------- .../Panviva/apiProperties.json | 46 +- 3 files changed, 4127 insertions(+), 3934 deletions(-) diff --git a/certified-connectors/Panviva/README.md b/certified-connectors/Panviva/README.md index d4cff2b21..7e79bd99b 100644 --- a/certified-connectors/Panviva/README.md +++ b/certified-connectors/Panviva/README.md @@ -1,55 +1,55 @@ -## Panviva Connector - -Panviva provides a powerful and very extensive REST API. Using this API, you can access and manage knowledge stores in your Panviva instances. This connector allows you to leverage the same knowledge within your application, or in your process automation. - -## Prerequisites - -You will need the following to proceed: - -- A Microsoft Power Apps or Power Automate plan with custom connector feature -- A Panviva subscription -- The Power Platform CLI tools - -## Building the connector - -Since the Panviva APIs are secured, you will need - -1. Access to a Panviva instance (also known as a tenant) -2. A developer account on the Panviva developer portal [https://dev.panviva.com](https://dev.panviva.com) -3. An active Panviva API subscription (also known as an API plan) and valid Panviva API credentials - After that is completed, you can create and test the connector. - -### Deploying the sample - -Run the following commands and follow the prompts: - -```paconn -paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json -``` - -## Supported Actions - -The connector supports the following actions: - -- **Search Operations** - - `Search`: Search documents, folders, and files (external documents) for a term and return paginated results - - `Search Artefacts`: Return search results for a given query -- **Live Operations** - - `Live CSH`: Perform a CSH keyword search and present the results on an active user's Panviva client - - `Live Document`: Present a document on an active user's Panviva client - - `Live Search`: Search and present the results on an active user's Panviva client -- **Document Operations** - - `Document`: Return a document using the document ID provided - - `Document Containers`: Return a list of containers using the document ID provided - - `Document Container Relationships`: List parent-child relationships between the containers of a Panviva document - - `Container`: Return a container using the container ID provided - - `Document Translations`: List all translations (per language and locale) of a Panviva document -- **Resource Operations** - - `Artefact`: Return an artefact using the ID provided - - `Artefact Categories`: List all available artefact categories - - `File`: Retrieve a file (external document) from Panviva - - `Folder`: Return information about a Panviva folder and references to each of its direct children - - `Folder Children`: Get all the immediate children of a Panviva folder, not including grandchildren. Children can be folders, documents, or files (external documents) - - `Folder Translations`: Get all the translations of a Panviva folder, along with each translated folders respective children - - `Folder Root`: Get the root/home folder in all of Panviva, which can be drilled into using the Get Folder Children endpoint. Note this endpoint was formerly referred to as the 'Folder Search' endpoint - - `Image`: Retrieve an image from Panviva. Image data is represented as a base64 string +## Panviva Connector + +Panviva provides a powerful and very extensive REST API. Using this API, you can access and manage knowledge stores in your Panviva instances. This connector allows you to leverage the same knowledge within your application, or in your process automation. + +## Prerequisites + +You will need the following to proceed: + +- A Microsoft Power Apps or Power Automate plan with custom connector feature +- A Panviva subscription +- The Power Platform CLI tools + +## Building the connector + +Since the Panviva APIs are secured, you will need + +1. Access to a Panviva instance (also known as a tenant) +2. A developer account on the Panviva developer portal [https://dev.panviva.com](https://dev.panviva.com) +3. An active Panviva API subscription (also known as an API plan) and valid Panviva API credentials + After that is completed, you can create and test the connector. + +### Deploying the sample + +Run the following commands and follow the prompts: + +```paconn +paconn create --api-def apiDefinition.swagger.json --api-prop apiProperties.json +``` + +## Supported Actions + +The connector supports the following actions: + +- **Search Operations** + - `Search`: Search documents, folders, and files (external documents) for a term and return paginated results + - `Search Artefacts`: Return search results for a given query +- **Live Operations** + - `Live CSH`: Perform a CSH keyword search and present the results on an active user's Panviva client + - `Live Document`: Present a document on an active user's Panviva client + - `Live Search`: Search and present the results on an active user's Panviva client +- **Document Operations** + - `Document`: Return a document using the document ID provided + - `Document Containers`: Return a list of containers using the document ID provided + - `Document Container Relationships`: List parent-child relationships between the containers of a Panviva document + - `Container`: Return a container using the container ID provided + - `Document Translations`: List all translations (per language and locale) of a Panviva document +- **Resource Operations** + - `Artefact`: Return an artefact using the ID provided + - `Artefact Categories`: List all available artefact categories + - `File`: Retrieve a file (external document) from Panviva + - `Folder`: Return information about a Panviva folder and references to each of its direct children + - `Folder Children`: Get all the immediate children of a Panviva folder, not including grandchildren. Children can be folders, documents, or files (external documents) + - `Folder Translations`: Get all the translations of a Panviva folder, along with each translated folders respective children + - `Folder Root`: Get the root/home folder in all of Panviva, which can be drilled into using the Get Folder Children endpoint. Note this endpoint was formerly referred to as the 'Folder Search' endpoint + - `Image`: Retrieve an image from Panviva. Image data is represented as a base64 string diff --git a/certified-connectors/Panviva/apiDefinition.swagger.json b/certified-connectors/Panviva/apiDefinition.swagger.json index 86927fd28..a8d70b213 100644 --- a/certified-connectors/Panviva/apiDefinition.swagger.json +++ b/certified-connectors/Panviva/apiDefinition.swagger.json @@ -1,3856 +1,4049 @@ -{ - "swagger": "2.0", - "info": { - "title": "Panviva", - "version": "1.0", - "description": "Wouldn't it be great if you could share information seamlessly? This connector allows you to push your knowledge further and consume a complete list of Panviva's API offerings.\n\n**Content APIs** perform resource related operations , e.g. `document`, `folder`, `file`, `container`, `image`.\n\n**Live APIs** enable real-time communications with online users on our client application.\n\n**Artefact APIs** interact with curated Panviva content, created by Digital Orchestrator.", - "contact": { - "name": "Panviva Customer Advocacy Team", - "url": "https://www.panviva.com/support", - "email": "support@panviva.com" - } - }, - "host": "api.panviva.com", - "basePath": "/v3", - "schemes": ["https"], - "consumes": [], - "produces": [], - "x-ms-connector-metadata": [ - { - "propertyName": "Website", - "propertyValue": "https://www.panviva.com" - }, - { - "propertyName": "Privacy policy", - "propertyValue": "https://www.panviva.com/privacy-policy" - }, - { - "propertyName": "Categories", - "propertyValue": "Business Management;Productivity" - } - ], - "paths": { - "/{instance}/operations/search": { - "get": { - "description": "Searches documents, folders, and files (external documents) for a term and returns paginated results", - "operationId": "OperationsSearch", - "summary": "Search", - "tags": ["Operations"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Term", - "name": "term", - "in": "query", - "description": "The word or phrase to be searched for", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Page Offset", - "name": "pageOffset", - "in": "query", - "description": "The pagination offset to denote the number of initial search results to skip. For example, pageOffset of 100 and pageLimit of 10 would return records 101-110.", - "type": "integer", - "x-ms-visibility": "advanced" - }, - { - "x-ms-summary": "Page Limit", - "name": "pageLimit", - "in": "query", - "description": "The number of records to return. Must be an integer between 0 and 1000.", - "type": "integer", - "x-ms-visibility": "advanced" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetSearchResponse" - }, - "examples": { - "application/json": { - "results": [ - { - "type": "document", - "id": "123", - "name": "Spiderman", - "layout": "topTabsMedium", - "description": "The chronicles of Spiderman", - "classification": "films", - "updatedDate": "2018-05-04T00:00:00Z", - "matchedFields": ["name"], - "snippet": "Spiderman is a superhero", - "language": "en-AU", - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/documents/123", - "rel": "document", - "type": "GET" - } - ] - }, - { - "type": "folder", - "id": "32", - "name": "Marvel Trivia", - "description": "All things Marvel", - "matchedFields": ["name"], - "snippet": "Marvel Trivia", - "language": "en-AU", - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/folder/32", - "rel": "file", - "type": "GET" - } - ] - }, - { - "type": "file", - "id": "124", - "name": "Spiderman Book", - "fileName": "spiderman-1.pdf", - "description": "A book detailing the history of Spiderman", - "classification": "books", - "updatedDate": "2018-05-04T00:00:00Z", - "matchedFields": ["content", "name", "fileName"], - "snippet": "Spiderman is a hero born in New York", - "language": "en-AU", - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/files/124", - "rel": "file", - "type": "GET" - } - ] - } - ], - "total": 57, - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=0&pageLimit=2", - "rel": "first", - "type": "GET" - }, - { - "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=56&pageLimit=2", - "rel": "last", - "type": "GET" - }, - { - "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=2&pageLimit=2", - "rel": "prev", - "type": "GET" - }, - { - "href": "https://dev.panviva.com/v3/marvel/operations/search?term=hero&pageOffset=6&pageLimit=2", - "rel": "next", - "type": "GET" - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/{instance}/operations/artefact/nls": { - "get": { - "description": "Return search results for a given query", - "operationId": "OperationsArtefactNls", - "summary": "Search Artefacts", - "tags": ["Operations"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Simple Query", - "name": "simplequery", - "in": "query", - "description": "Natural language query string. For example: ```Action Movies```. (Note: Use simplequery OR advancedquery, not both.)", - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Advanced Query", - "name": "advancedquery", - "in": "query", - "description": "Query string written in Lucene query syntax. For example: ```films AND \"a story\"```. (Note: Use simplequery OR advancedquery, not both.)", - "type": "string", - "x-ms-visibility": "advanced" - }, - { - "x-ms-summary": "Filter", - "name": "filter", - "in": "query", - "description": "Accepts a Lucene-formatted filter string. Examples: ```category eq 'Mortgages'```, ```panvivaDocumentVersion gt '8'```. (Filterable fields include dateCreated, dateModified, dateDeleted, categoryJson, queryVariationsJson, title, category, primaryQuery, isDeleted, timestamp, panvivaDocumentId, panvivaDocumentVersion, id)", - "type": "string", - "x-ms-visibility": "advanced" - }, - { - "x-ms-summary": "Channel", - "name": "channel", - "in": "query", - "description": "Return response for a specific channel, instead of the default", - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Page Offset", - "name": "pageOffset", - "in": "query", - "description": "The pagination offset to denote the number of initial search results to skip. For example, pageOffset of 100 and pageLimit of 10 would return records 101-110.", - "type": "integer", - "x-ms-visibility": "advanced" - }, - { - "x-ms-summary": "Page Limit", - "name": "pageLimit", - "in": "query", - "description": "The number of records to return. Must be an integer between 0 and 1000.", - "type": "integer", - "x-ms-visibility": "advanced" - }, - { - "x-ms-summary": "Facet", - "name": "facet", - "in": "query", - "description": "Accepts a Lucene-formatted facet string. Examples: ```facet=Category,count:10&facet=Rating```. (Facetable fields include metaData/values)", - "type": "string", - "x-ms-visibility": "advanced" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetSearchArtefactResponse" - }, - "examples": { - "application/json": { - "facets": null, - "results": [ - { - "id": "ae18c1ae-dd63-445b-b69a-46d89f8c315c", - "content": [ - { - "mediaType": "text/plain", - "text": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", - "href": null, - "resourceLocation": null - } - ], - "category": { - "name": "Marvel Cinematic Universe", - "id": 1, - "dateCreated": "2018-09-05T04:12:52.83+00:00", - "dateModified": "2018-09-05T04:12:52.83+00:00" - }, - "metaData": { - "Superheroes": { - "values": ["Captain America", "Captain Marvel"], - "dataType": "string" - }, - "Villains": { - "values": ["Thanos"], - "dataType": "string" - } - }, - "searchScore": 0.99844, - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/artefacts/12", - "rel": "artefact", - "type": "GET" - } - ], - "queryVariations": null, - "primaryQuery": "What is the Marvel Cinematic Universe?", - "panvivaDocumentId": 235, - "panvivaDocumentVersion": 5, - "title": "About Marvel Cinematic Universe" - } - ], - "total": 1 - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/{instance}/operations/live/csh": { - "post": { - "description": "Present a CSH search result page of the passing query on Panviva client to specified user on Panviva client", - "operationId": "OperationsLiveCsh", - "summary": "Live CSH", - "tags": ["Operations"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "name": "postLiveCshRequest", - "in": "body", - "schema": { - "$ref": "#/definitions/PostLiveCshRequest" - }, - "description": "JSON object containing information required to perform a live activity:", - "x-ms-visibility": "important" - } - ], - "consumes": ["application/json"], - "produces": ["application/json"], - "responses": { - "202": { - "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", - "schema": { - "$ref": "#/definitions/PostLiveCshResponse" - }, - "examples": { - "application/json": null - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/{instance}/operations/live/document": { - "post": { - "description": "Present a document page to specified user on Panviva client", - "operationId": "OperationsLiveDocument", - "summary": "Live Document", - "tags": ["Operations"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "name": "postLiveDocumentRequest", - "in": "body", - "schema": { - "$ref": "#/definitions/PostLiveDocumentRequest" - }, - "description": "JSON object containing information required to perform a live activity:", - "x-ms-visibility": "important" - } - ], - "consumes": ["application/json"], - "produces": ["application/json"], - "responses": { - "202": { - "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", - "schema": { - "$ref": "#/definitions/PostLiveDocumentResponse" - }, - "examples": { - "application/json": null - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/{instance}/operations/live/search": { - "post": { - "description": "Present a search result page of the passing query on Panviva client to specified user on Panviva client", - "operationId": "OperationsLiveSearch", - "summary": "Live Search", - "tags": ["Operations"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "name": "postLiveSearchRequest", - "in": "body", - "schema": { - "$ref": "#/definitions/PostLiveSearchRequest" - }, - "description": "JSON object containing information required to perform a live activity:", - "x-ms-visibility": "important" - } - ], - "consumes": ["application/json"], - "produces": ["application/json"], - "responses": { - "202": { - "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", - "schema": { - "$ref": "#/definitions/PostLiveSearchResponse" - }, - "examples": { - "application/json": null - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/{instance}/resources/container/{id}": { - "get": { - "description": "Return a container using the container ID provided", - "operationId": "ResourcesContainerById", - "summary": "Container", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The id of a document container", - "required": true, - "type": "string", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetContainerResponse" - }, - "examples": { - "application/json": { - "id": "343-229-1-2", - "name": "Captain America: Civil War", - "body": "

Captain America: Civil War

SupportPoint Image 738

" - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/document/{id}": { - "get": { - "description": "Return a document using the document ID provided", - "operationId": "ResourcesDocumentById", - "summary": "Document", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "A document unique identifier, Document ID. If a document is a translated document, this value represents Internal ID or IID in Panviva API v1.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Version", - "name": "version", - "in": "query", - "description": "Request the API to return a particular version of the specified document.", - "type": "integer", - "x-ms-visibility": "advanced" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetDocumentResponse" - }, - "examples": { - "application/json": { - "id": "343", - "name": "Marvel Cinematic Universe (Films)", - "description": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", - "version": 229, - "language": "en-AU", - "tags": [ - { - "name": "Rank", - "value": "1" - }, - { - "name": "Effective date", - "value": "2018-05-04T00:00:00Z" - } - ], - "hidden": false, - "type": "document", - "release": 33, - "released": true, - "copyright": "Marvel Studios, LLC", - "classification": "films", - "status": "Phase Three", - "percentage": 100, - "releaseDate": "2017-09-09T04:12:52.83Z", - "layout": "leftTabsMedium", - "training": { - "failureFeedback": "Please review the Marvel documentation in document 343", - "forcePageSequence": true, - "forceQuestionSequence": true, - "passingScore": 10, - "successFeedback": "With great power comes great responsibility." - }, - "keywords": [ - "Iron Man", - "Hulk", - "Thor", - "Captain America", - "Avenger", - "Guardians of the Galaxy", - "Ant-Man", - "Doctor Strange", - "Spider-Man", - "Black Panter", - "Captain Marvel" - ], - "cshKeywords": ["Chrome", "MCU"], - "updatedDate": "2017-09-09T04:12:52.83Z", - "createdDate": "2017-08-09T04:02:46.907Z", - "reusableContent": false, - "changeNote": "Added in Captain Marvel", - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/document/343/translations", - "rel": "translations", - "type": "GET" - }, - { - "href": "https://dev.panviva.com/v3/marvel/resources/document/343/containers", - "rel": "containers", - "type": "GET" - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/artefact/{id}": { - "get": { - "description": "Return an artefact using the ID provided", - "operationId": "ResourcesArtefactById", - "summary": "Artefact", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "Format - uuid. The id (ID) of an artefact", - "required": true, - "type": "string", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetResponseResponse" - }, - "examples": { - "application/json": { - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/document/343?version=229", - "rel": "document", - "type": "GET" - } - ], - "title": "About Marvel Cinematic Universe", - "content": [ - { - "mediaType": "text/plain", - "text": "The Marvel Cinematic Universe (MCU) is an American media franchise and shared universe that is centered on a series of superhero films.", - "href": null, - "resourceLocation": null - }, - { - "mediaType": "image/jpeg", - "text": null, - "href": "https://terrigen-cdn-dev.marvel.com/content/prod/1x/mi-promo-featured-half-dsk-1140x680.jpg", - "resourceLocation": "external" - } - ], - "variations": [ - { - "content": [ - { - "mediaType": "text/plain", - "text": "The Marvel Cinematic Universe is a shared universe that is centered on a series of superhero films.", - "href": null, - "resourceLocation": null - } - ], - "channels": [ - { - "name": "Amazon Alexa" - } - ], - "id": 2, - "dateCreated": "2018-09-10T04:12:52.83+00:00", - "dateModified": "2018-09-10T04:12:52.83+00:00" - } - ], - "category": { - "name": "Marvel Cinematic Universe", - "id": 1, - "dateCreated": "2018-09-05T04:12:52.83+00:00", - "dateModified": "2018-09-05T04:12:52.83+00:00" - }, - "primaryQuery": "What is the Marvel Cinematic Universe?", - "queryVariations": [ - { - "id": 12, - "query": "What is MCU?" - } - ], - "panvivaDocumentId": 235, - "panvivaDocumentVersion": 5, - "metaData": { - "Superheroes": { - "values": ["Captain America", "Captain Marvel"], - "dataType": "string" - }, - "Villains": { - "values": ["Thanos"], - "dataType": "string" - } - }, - "id": "ae18c1ae-dd63-445b-b69a-46d89f8c315c", - "dateCreated": "2018-09-09T04:12:52.83+00:00", - "dateModified": "2018-09-10T04:12:52.83+00:00" - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/document/{id}/containers": { - "get": { - "description": "Return a list of containers using the document ID provided", - "operationId": "ResourcesDocumentByIdContainers", - "summary": "Document Containers", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The internal id (IID) of a Panviva document", - "required": true, - "type": "integer", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetDocumentContainersResponse" - }, - "examples": { - "application/json": { - "containers": [ - { - "id": "343-229-0-0", - "name": "Phase Three", - "body": null - }, - { - "id": "343-229-1-2", - "name": "Captain America: Civil War", - "body": "
Captain America: Civil War

SupportPoint Image 738

" - }, - { - "id": "343-229-3-4", - "name": "Doctor Strange", - "body": "
Doctor Strange

Mr. Doctor?

" - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/document/{id}/containers/relationships": { - "get": { - "description": "Return a list of the parent-child relationship between each container for the document ID provided", - "operationId": "ResourcesDocumentByIdContainersRelationships", - "summary": "Document Container Relationships", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The internal id (IID) of a Panviva document", - "required": true, - "type": "integer", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetDocumentContainerRelationshipsResponse" - }, - "examples": { - "application/json": { - "relationships": [ - { - "id": "343-229-0-0", - "parent": null, - "children": ["343-229-1-2", "343-229-3-4"], - "taskFlow": null - }, - { - "id": "343-229-1-2", - "parent": "343-229-0-0", - "children": null, - "taskFlow": null - }, - { - "id": "343-229-3-4", - "parent": "343-229-0-0", - "children": null, - "taskFlow": null - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - } - } - }, - "/{instance}/resources/document/{id}/translations": { - "get": { - "description": "Return a list of all translations (per language and locale) of a Panviva document", - "operationId": "ResourcesDocumentByIdTranslations", - "summary": "Document Translations", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The internal id (IID) of a Panviva document.", - "required": true, - "type": "integer", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetDocumentTranslationsResponse" - }, - "examples": { - "application/json": { - "translations": [ - { - "id": "568", - "name": "Univers cinématographique Marvel. (Films)", - "description": "Marvel Cinematic Universe (MCU) est une franchise de médias américains et un univers partagé centré sur une série de films de super héros.", - "version": 52, - "language": "fr-FR", - "tags": [ - { - "name": "Rang", - "value": "2" - }, - { - "name": "Date effective", - "value": "2018-05-04T00:00:00Z" - } - ], - "hidden": false, - "type": "document", - "release": 23, - "released": true, - "copyright": "Marvel Studios, LLC", - "classification": "films", - "status": "Phase Trois", - "percentage": 100, - "releaseDate": "2017-09-09T04:12:52.83Z", - "layout": "leftTabsMedium", - "training": { - "failureFeedback": "Veuillez consulter la documentation Marvel dans le document 343", - "forcePageSequence": true, - "forceQuestionSequence": true, - "passingScore": 10, - "successFeedback": "Un grand pouvoir implique de grandes responsabilités" - }, - "keywords": [ - "Iron Man", - "Hulk", - "Thor", - "Captain America", - "Avenger", - "Guardians of the Galaxy", - "Ant-Man", - "Doctor Strange", - "Spider-Man", - "Black Panter", - "Captain Marvel" - ], - "cshKeywords": ["Chrome", "MCU"], - "updatedDate": "2017-09-09T04:12:52.83Z", - "createdDate": "2017-08-09T04:02:46.907Z", - "reusableContent": false, - "changeNote": "Added in Captain Marvel", - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/document/568/translations", - "rel": "translations", - "type": "GET" - } - ] - } - ], - "origin": "343" - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/file/{id}": { - "get": { - "description": "Returns a file (external document) from Panviva", - "operationId": "ResourcesFileById", - "summary": "File", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The internal id (IID) of a Panviva file (external document)", - "required": true, - "type": "integer", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetFileResponse" - }, - "examples": { - "application/json": { - "id": "file", - "name": "A to Z in Marvel Comic Series", - "description": "Contains details of all featured series.", - "version": 2, - "language": "en-AU", - "tags": [ - { - "name": "custom-category", - "value": "MVU-10" - } - ], - "hidden": false, - "type": "file", - "content": "JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9DcmVhdG9yIChNb3ppbGxhLzUuMCBcKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NFwpIEFwcGxlV2ViS2l0LzUzNy4zNiBcKEtIVE1MLCBsaWtlIEdlY2tvXCkgQ2hyb21lLzcxLjAuMzU3OC45OCBTYWZhcmkvNTM3LjM2KQovUHJvZHVjZXIgKFNraWEvUERGIG03MSkKL0NyZWF0aW9uRGF0ZSAoRDoyMDE5MDEzMDA1NTM0NyswMCcwMCcpCi9Nb2REYXRlIChEOjIwMTkwMTMwMDU1MzQ3KzAwJzAw ...................................... CBuIAowMDAwMzgwMzI0IDAwMDAwIG4gCjAwMDAzODA1NDQgMDAwMDAgbiAKMDAwMDM4MDc2NyAwMDAwMCBuIAowMDAwMzgwOTg2IDAwMDAwIG4gCjAwMDAzODEyMDYgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDEwNwovUm9vdCAxOSAwIFIKL0luZm8gMSAwIFI+PgpzdGFydHhyZWYKMzgxNDIzCiUlRU9G", - "fileName": "A to Z in Marvel Comic Series.pdf", - "release": 2, - "released": true, - "copyright": "public domain", - "classification": "general", - "status": "released", - "percentage": 100, - "releaseDate": "2019-01-30T17:00:53.563Z", - "keywords": ["general info", "series"], - "cshKeywords": ["series"], - "changeNote": "Uploaded linked document.", - "updatedDate": "2019-01-30T17:00:53.563Z", - "createdDate": "2019-01-30T16:54:51.637Z" - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/{instance}/resources/folder/{id}": { - "get": { - "description": "Return information about a Panviva folder and references to each of its direct children", - "operationId": "ResourcesFolderById", - "summary": "Folder", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The internal id (IID) of a Panviva folder", - "required": true, - "type": "integer", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetFolderResponse" - }, - "examples": { - "application/json": { - "id": "342", - "name": "the films", - "description": "Films that make a grown man squeal by the memories of his childhood.", - "version": 10, - "language": "en-AU", - "tags": [ - { - "name": "Rank", - "value": "1" - }, - { - "name": "Effective Date", - "value": "2015-02-15T00:00:00Z" - } - ], - "hidden": false, - "type": "folder", - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/folder/342/children", - "rel": "children", - "type": "GET" - }, - { - "href": "https://dev.panviva.com/v3/marvel/resources/folder/342/translations", - "rel": "translations", - "type": "GET" - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/folder/{id}/children": { - "get": { - "description": "Gets all the immediate children of a Panviva folder, not including grandchildren. Children can be folders, documents, or files (external documents)", - "operationId": "ResourcesFolderByIdChildren", - "summary": "Folder Children", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The internal id (IID) of a Panviva folder", - "required": true, - "type": "integer", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetFolderChildrenResponse" - }, - "examples": { - "application/json": { - "children": [ - { - "id": "84374", - "name": "Infinity stones", - "description": "All information relating to Marvel's infinity stones.", - "version": 1, - "language": "en-AU", - "tags": [ - { - "name": "Rank", - "value": "1" - }, - { - "name": "Effective Date", - "value": "2015-02-15T00:00:00Z" - } - ], - "hidden": true, - "type": "folder", - "links": null - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/folder/{id}/translations": { - "get": { - "description": "Gets all the translations of a Panviva folder, along with each translated folders respective children", - "operationId": "ResourcesFolderByIdTranslations", - "summary": "Folder Translations", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The internal id (IID) of a Panviva folder", - "required": true, - "type": "integer", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetFolderTranslationsResponse" - }, - "examples": { - "application/json": { - "translations": [ - { - "id": "84374", - "name": "die Filme", - "description": "Filme, die einen erwachsenen Mann durch die Erinnerungen an seine Kindheit zum Quietschen bringen.", - "version": 1, - "language": "de-DE", - "tags": [ - { - "name": "Rank", - "value": "1" - }, - { - "name": "Effective Date", - "value": "2015-02-15T00:00:00Z" - } - ], - "hidden": false, - "type": "folder", - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/translations", - "rel": "translations", - "type": "GET" - }, - { - "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/children", - "rel": "children", - "type": "GET" - } - ] - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/folder/root": { - "get": { - "description": "Gets the root/home folder in all of Panviva, which can be drilled into using the Get Folder Children endpoint. Note this endpoint was formerly referred to as the 'Folder Search' endpoint", - "operationId": "ResourcesFolderRoot", - "summary": "Folder Root", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetFolderRootResponse" - }, - "examples": { - "application/json": { - "id": "1", - "name": "Home", - "description": "The Home folder of Panviva", - "version": 8, - "language": "en-AU", - "tags": [ - { - "name": "Rank", - "value": "1" - }, - { - "name": "Effective Date", - "value": "2015-02-15T00:00:00Z" - } - ], - "hidden": false, - "type": "folder", - "links": [ - { - "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/translations", - "rel": "translations", - "type": "GET" - }, - { - "href": "https://dev.panviva.com/v3/marvel/resources/folder/84374/children", - "rel": "children", - "type": "GET" - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - }, - "/{instance}/resources/image/{id}": { - "get": { - "description": "Returns an image from Panviva. Image data is represented as a base64 string", - "operationId": "ResourcesImageById", - "summary": "Image", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "x-ms-summary": "Id", - "x-ms-url-encoding": "single", - "name": "id", - "in": "path", - "description": "The id of a Panviva image", - "required": true, - "type": "integer", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetImageResponse" - }, - "examples": { - "application/json": { - "id": "627", - "name": "avengers-marvel-marvel-comics", - "width": 128, - "height": 128, - "size": 12311, - "contentType": "image/png", - "content": "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAC+sSURBVHhe7Xz3nxRl1u/90+7n3sh/tkrt4vFHyBAXgASfwuuzLg0LCJTeB7wp3ccA/yRs8O8I82DPvwjswME71psv ...................................... Y/zniEzcr3ZXrg2s9fxSz495H+/l9MgF9ZMtUoAbnc5Pev+qvCDq+EQ1OTAJik5xC+bXoE+LOH9tEc+QQwvIVhyxqce6crjvCNWPVz2zkCmmN8VnAEp+KNgEtRpuAFqNNQIvRJqDFaBPQYrQJaDHaBLQYbQJajDYBLUabgBajTUCL0SagxWgT0GK0CWgx2gS0GG0CWow2AS1Gm4AWo01Ai9EmoMVoE9BitAloMdoEtBhtAlqMNgEtRpuAFqNNQIvRJqDFaBPQYrQJaCkk6f8DK/JmX1NVAtQAAAAASUVORK5CYII=" - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "important" - } - }, - "/{instance}/resources/artefactcategory": { - "get": { - "description": "Gets a list of all available artefact categories", - "operationId": "ResourcesArtefactCategoriesGet", - "summary": "Get Artefact Categories", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - } - ], - "produces": ["application/json"], - "responses": { - "200": { - "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", - "schema": { - "$ref": "#/definitions/GetArtefactCategoriesResponse" - }, - "examples": { - "application/json": { - "categories": [ - { - "id": 1, - "categoryName": "Marvel Cinematic Universe" - } - ] - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "important" - }, - "post": { - "description": "Creates a category for classifying artefacts", - "operationId": "ResourcesArtefactCategoryPost", - "summary": "Create Artefact Category", - "tags": ["Resources"], - "parameters": [ - { - "x-ms-summary": "Instance", - "x-ms-url-encoding": "single", - "name": "instance", - "in": "path", - "description": "The instance name as shown on the Panviva Developer Portal.", - "required": true, - "type": "string", - "x-ms-visibility": "important" - }, - { - "name": "postArtefactCategoryRequest", - "in": "body", - "schema": { - "$ref": "#/definitions/PostArtefactCategoryRequest" - }, - "description": "JSON object containing the category name" - } - ], - "consumes": ["application/json"], - "produces": ["application/json"], - "responses": { - "201": { - "description": "Success", - "schema": { - "$ref": "#/definitions/PostArtefactCategoryResponse" - }, - "examples": { - "application/json": { - "categoryId": 1, - "categoryName": "Marvel Cinematic Universe" - } - } - }, - "400": { - "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", - "examples": { - "application/json": { - "errorCode": "400", - "message": "Bad Request" - } - } - }, - "403": { - "description": "Out of call volume quota.", - "examples": { - "application/json": { - "errorCode": "403", - "message": "Out of call volume quota" - } - } - }, - "404": { - "description": "Document not found - The server has not found anything matching the request URI.", - "examples": { - "application/json": { - "errorCode": "404", - "message": "Not Found" - } - } - }, - "405": { - "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", - "examples": { - "application/json": { - "errorCode": "405", - "message": "Method Not Allowed" - } - } - }, - "406": { - "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", - "examples": { - "application/json": { - "errorCode": "406", - "message": "Not Acceptable" - } - } - }, - "415": { - "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", - "examples": { - "application/json": { - "errorCode": "415", - "message": "Unsupported Media Type" - } - } - }, - "429": { - "description": "Too many requests - The number of requests has reached the plan’s rate limit.", - "examples": { - "application/json": { - "errorCode": "429", - "message": "Too Many Requests" - } - } - }, - "503": { - "description": "Service Unavailable - Panviva servers are under maintenance.", - "examples": { - "application/json": { - "errorCode": "503", - "message": "Service Unavailable" - } - } - } - }, - "x-ms-visibility": "advanced" - } - } - }, - "definitions": { - "Link": { - "type": "object", - "properties": { - "href": { - "type": "string" - }, - "rel": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "ResourceSearchResult": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "matchedFields": { - "type": "array", - "items": { - "type": "string" - } - }, - "snippet": { - "type": "string" - }, - "language": { - "type": "string" - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - } - } - }, - "GetSearchResponse": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/ResourceSearchResult" - } - }, - "total": { - "type": "integer" - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - } - } - }, - "StringInt64NullableKeyValuePair": { - "type": "object", - "properties": { - "key": { - "type": "string", - "readOnly": true - }, - "value": { - "format": "int64", - "type": "integer", - "readOnly": true - } - } - }, - "Facet": { - "type": "object", - "properties": { - "field": { - "type": "string" - }, - "groups": { - "type": "array", - "items": { - "$ref": "#/definitions/StringInt64NullableKeyValuePair" - } - } - } - }, - "ResponseSection": { - "type": "object", - "properties": { - "mediaType": { - "type": "string" - }, - "text": { - "type": "string" - }, - "href": { - "type": "string" - }, - "resourceLocation": { - "type": "string" - } - } - }, - "Category": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "dateCreated": { - "format": "date-time", - "type": "string" - }, - "dateModified": { - "format": "date-time", - "type": "string" - } - } - }, - "MetaDataValueDetails": { - "type": "object", - "properties": { - "values": { - "type": "array", - "items": { - "type": "string" - } - }, - "dataType": { - "type": "string" - } - } - }, - "QueryVariation": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "query": { - "type": "string" - } - } - }, - "SearchResult": { - "type": "object", - "properties": { - "id": { - "format": "uuid", - "type": "string" - }, - "content": { - "type": "array", - "items": { - "$ref": "#/definitions/ResponseSection" - } - }, - "category": { - "$ref": "#/definitions/Category" - }, - "metaData": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/MetaDataValueDetails" - } - }, - "searchScore": { - "type": "number" - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - }, - "queryVariations": { - "type": "array", - "items": { - "$ref": "#/definitions/QueryVariation" - } - }, - "primaryQuery": { - "type": "string" - }, - "panvivaDocumentId": { - "type": "integer" - }, - "panvivaDocumentVersion": { - "type": "integer" - }, - "title": { - "type": "string" - } - } - }, - "GetSearchArtefactResponse": { - "type": "object", - "properties": { - "facets": { - "type": "array", - "items": { - "$ref": "#/definitions/Facet" - } - }, - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/SearchResult" - } - }, - "total": { - "type": "integer" - } - } - }, - "PostLiveCshRequest": { - "type": "object", - "properties": { - "username": { - "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", - "type": "string" - }, - "userId": { - "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", - "type": "string" - }, - "query": { - "description": "The CSH term to search for.", - "type": "string" - }, - "showFirstResult": { - "description": "True to immediately open the first document found, or false to show the list of results.", - "type": "boolean" - }, - "maximizeClient": { - "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", - "type": "boolean" - } - } - }, - "PostLiveCshResponse": { - "type": "object" - }, - "PostLiveDocumentRequest": { - "type": "object", - "properties": { - "username": { - "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", - "type": "string" - }, - "userId": { - "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", - "type": "string" - }, - "id": { - "description": "The Document ID of the Panviva Document you wish to send.", - "type": "string" - }, - "location": { - "description": "The Section ID you would like the user to see, when the specified document is opened.", - "type": "string" - }, - "maximizeClient": { - "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", - "type": "boolean" - } - } - }, - "PostLiveDocumentResponse": { - "type": "object" - }, - "PostLiveSearchRequest": { - "type": "object", - "properties": { - "username": { - "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", - "type": "string" - }, - "userId": { - "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", - "type": "string" - }, - "query": { - "description": "The term to search for.", - "type": "string" - }, - "maximizeClient": { - "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", - "type": "boolean" - }, - "showFirstResult": { - "description": "True to immediately open the first document found, or false to show the list of results.", - "type": "boolean" - } - } - }, - "PostLiveSearchResponse": { - "type": "object" - }, - "GetContainerResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "body": { - "type": "string" - } - } - }, - "Tag": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "Training": { - "type": "object", - "properties": { - "failureFeedback": { - "type": "string" - }, - "forcePageSequence": { - "type": "boolean" - }, - "forceQuestionSequence": { - "type": "boolean" - }, - "passingScore": { - "type": "integer" - }, - "successFeedback": { - "type": "string" - } - } - }, - "GetDocumentResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "version": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/Tag" - } - }, - "hidden": { - "type": "boolean" - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - }, - "release": { - "type": "integer" - }, - "released": { - "type": "boolean" - }, - "copyright": { - "type": "string" - }, - "classification": { - "type": "string" - }, - "status": { - "type": "string" - }, - "percentage": { - "type": "integer" - }, - "releaseDate": { - "format": "date-time", - "type": "string" - }, - "layout": { - "type": "string" - }, - "training": { - "$ref": "#/definitions/Training" - }, - "keywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "cshKeywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "updatedDate": { - "format": "date-time", - "type": "string" - }, - "createdDate": { - "format": "date-time", - "type": "string" - }, - "reusableContent": { - "type": "boolean" - }, - "changeNote": { - "type": "string" - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - } - } - }, - "Channel": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } - }, - "ResponseVariation": { - "type": "object", - "properties": { - "content": { - "type": "array", - "items": { - "$ref": "#/definitions/ResponseSection" - } - }, - "channels": { - "type": "array", - "items": { - "$ref": "#/definitions/Channel" - } - }, - "id": { - "type": "integer" - }, - "dateCreated": { - "format": "date-time", - "type": "string" - }, - "dateModified": { - "format": "date-time", - "type": "string" - } - } - }, - "GetResponseResponse": { - "type": "object", - "properties": { - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - }, - "title": { - "type": "string" - }, - "content": { - "type": "array", - "items": { - "$ref": "#/definitions/ResponseSection" - } - }, - "variations": { - "type": "array", - "items": { - "$ref": "#/definitions/ResponseVariation" - } - }, - "category": { - "$ref": "#/definitions/Category" - }, - "primaryQuery": { - "type": "string" - }, - "queryVariations": { - "type": "array", - "items": { - "$ref": "#/definitions/QueryVariation" - } - }, - "panvivaDocumentId": { - "type": "integer" - }, - "panvivaDocumentVersion": { - "type": "integer" - }, - "metaData": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/MetaDataValueDetails" - } - }, - "id": { - "format": "uuid", - "type": "string" - }, - "dateCreated": { - "format": "date-time", - "type": "string" - }, - "dateModified": { - "format": "date-time", - "type": "string" - } - } - }, - "Container": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "body": { - "type": "string" - } - } - }, - "GetDocumentContainersResponse": { - "type": "object", - "properties": { - "containers": { - "type": "array", - "items": { - "$ref": "#/definitions/Container" - } - } - } - }, - "ContainerRelationship": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "parent": { - "type": "string" - }, - "children": { - "type": "array", - "items": { - "type": "string" - } - }, - "taskFlow": { - "type": "string" - } - } - }, - "GetDocumentContainerRelationshipsResponse": { - "type": "object", - "properties": { - "relationships": { - "type": "array", - "items": { - "$ref": "#/definitions/ContainerRelationship" - } - } - } - }, - "Document": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "version": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/Tag" - } - }, - "hidden": { - "type": "boolean" - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - }, - "release": { - "type": "integer" - }, - "released": { - "type": "boolean" - }, - "copyright": { - "type": "string" - }, - "classification": { - "type": "string" - }, - "status": { - "type": "string" - }, - "percentage": { - "type": "integer" - }, - "releaseDate": { - "format": "date-time", - "type": "string" - }, - "layout": { - "type": "string" - }, - "training": { - "$ref": "#/definitions/Training" - }, - "keywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "cshKeywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "updatedDate": { - "format": "date-time", - "type": "string" - }, - "createdDate": { - "format": "date-time", - "type": "string" - }, - "reusableContent": { - "type": "boolean" - }, - "changeNote": { - "type": "string" - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - } - } - }, - "GetDocumentTranslationsResponse": { - "type": "object", - "properties": { - "translations": { - "type": "array", - "items": { - "$ref": "#/definitions/Document" - } - }, - "origin": { - "type": "string" - } - } - }, - "GetFileResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "version": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/Tag" - } - }, - "hidden": { - "type": "boolean" - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - }, - "content": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "release": { - "type": "integer" - }, - "released": { - "type": "boolean" - }, - "copyright": { - "type": "string" - }, - "classification": { - "type": "string" - }, - "status": { - "type": "string" - }, - "percentage": { - "type": "integer" - }, - "releaseDate": { - "format": "date-time", - "type": "string" - }, - "keywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "cshKeywords": { - "type": "array", - "items": { - "type": "string" - } - }, - "changeNote": { - "type": "string" - }, - "updatedDate": { - "format": "date-time", - "type": "string" - }, - "createdDate": { - "format": "date-time", - "type": "string" - } - } - }, - "GetFolderResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "version": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/Tag" - } - }, - "hidden": { - "type": "boolean" - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - } - } - }, - "Resource": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "version": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/Tag" - } - }, - "hidden": { - "type": "boolean" - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "GetFolderChildrenResponse": { - "type": "object", - "properties": { - "children": { - "type": "array", - "items": { - "$ref": "#/definitions/Resource" - } - } - } - }, - "Folder": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "version": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/Tag" - } - }, - "hidden": { - "type": "boolean" - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - } - } - }, - "GetFolderTranslationsResponse": { - "type": "object", - "properties": { - "translations": { - "type": "array", - "items": { - "$ref": "#/definitions/Folder" - } - } - } - }, - "GetFolderRootResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "description": { - "type": "string" - }, - "version": { - "type": "integer" - }, - "language": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/definitions/Tag" - } - }, - "hidden": { - "type": "boolean" - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - }, - "links": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - } - } - }, - "GetImageResponse": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "width": { - "type": "integer" - }, - "height": { - "type": "integer" - }, - "size": { - "type": "integer" - }, - "contentType": { - "type": "string" - }, - "content": { - "type": "string" - } - } - }, - "ArtefactCategory": { - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "categoryName": { - "type": "string" - } - } - }, - "GetArtefactCategoriesResponse": { - "type": "object", - "properties": { - "categories": { - "type": "array", - "items": { - "$ref": "#/definitions/ArtefactCategory" - } - } - } - }, - "PostArtefactCategoryRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } - }, - "PostArtefactCategoryResponse": { - "type": "object", - "properties": { - "categoryId": { - "type": "integer" - }, - "categoryName": { - "type": "string" - } - } - } - }, - "securityDefinitions": { - "apiKeyHeader": { - "type": "apiKey", - "name": "Ocp-Apim-Subscription-Key", - "in": "header" - } - }, - "security": [ - { - "apiKeyHeader": [] - } - ], - "tags": [] -} +{ + "swagger": "2.0", + "info": { + "title": "Panviva", + "version": "1.0", + "description": "Panviva is an omnichannel knowledge management solution. Our priority is to aid our clients in keeping their employees happy, so that they can focus on ensuring their customers are happy. Digitally transforming organisations for the last 20 years, we're now helping our customers to deliver knowledge nuggets to their employees and customers, whether they are in the home or the office - anytime and anywhere.", + "contact": { + "name": "Panviva Customer Advocacy Team", + "url": "https://www.panviva.com/support", + "email": "support@panviva.com" + } + }, + "host": "api.panviva.com", + "basePath": "/v3", + "schemes": ["https"], + "consumes": [], + "produces": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.panviva.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.panviva.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Business Management;Productivity" + } + ], + "paths": { + "/{instance}/operations/search": { + "get": { + "description": "Searches documents, folders, and files (external documents) for a term and returns paginated results", + "operationId": "OperationsSearch", + "summary": "Search", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Term", + "name": "term", + "in": "query", + "description": "The word or phrase to be searched for", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Page Offset", + "name": "pageOffset", + "in": "query", + "description": "The pagination offset to denote the number of initial search results to skip. For example, pageOffset of 100 and pageLimit of 10 would return records 101-110.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Page Limit", + "name": "pageLimit", + "in": "query", + "description": "The number of records to return. Must be an integer between 0 and 1000.", + "type": "integer", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetSearchResponse" + }, + "examples": { + "application/json": { + "results": [ + { + "type": "document", + "id": "648", + "name": "Set up banking app for Viva Bank", + "layout": "topTabsSmall", + "description": "This describes how to setup banking app for vivabank.", + "classification": "web-enabled|Bots & Assistants", + "updatedDate": "2020-03-31T00:35:30.757Z", + "matchedFields": ["Container.body"], + "snippet": "49637\" data-link-id=\"1222\">

Cancel a debit card", + "language": "en-US", + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/document/648", + "rel": "document", + "type": "GET" + } + ] + }, + { + "type": "document", + "id": "831", + "name": "Card compromise event Date: 20/08/2020 - Acknowledgement", + "layout": "topTabsSmall", + "description": null, + "classification": null, + "updatedDate": "2020-08-18T23:04:03.777Z", + "matchedFields": ["name", "Container.body"], + "snippet": "Card compromise event Date: 20/08/2020 - Acknowledgement", + "language": "en-US", + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/document/831", + "rel": "document", + "type": "GET" + } + ] + }, + { + "type": "document", + "id": "594", + "name": "Overview - Credit Cards", + "layout": "topTabsSmall", + "description": "Overview of Credit Cards available.", + "classification": null, + "updatedDate": "2020-10-07T07:23:33.26Z", + "matchedFields": ["Container.body"], + "snippet": "pv-paragraph\" data-db-id=\"46882\" data-link-id=\"19\">All travel booked on your American Express Travel card", + "language": "en-US", + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/document/594", + "rel": "document", + "type": "GET" + } + ] + } + ], + "total": 22, + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/operations/search?term=card&page[offset]=0&page[limit]=3", + "rel": "first", + "type": "GET" + }, + { + "href": "https://api.panviva.com/v3/viva-bank/operations/search?term=card&page[offset]=21&page[limit]=3", + "rel": "last", + "type": "GET" + }, + { + "href": "https://api.panviva.com/v3/viva-bank/operations/search?term=card&page[offset]=3&page[limit]=3", + "rel": "next", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/artefact/nls": { + "get": { + "description": "Return search results for a given query", + "operationId": "OperationsArtefactNls", + "summary": "Search Artefacts", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Simple Query", + "name": "simplequery", + "in": "query", + "description": "Natural language query string. For example: 'Action Movies'. (Note: Use simplequery OR advancedquery, not both.)", + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Advanced Query", + "name": "advancedquery", + "in": "query", + "description": "Query string written in Lucene query syntax. For example: 'films AND \"a story\"'. (Note: Use simplequery OR advancedquery, not both.)", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Filter", + "name": "filter", + "in": "query", + "description": "Accepts a Lucene-formatted filter string. Examples: 'category eq \"Mortgages\"', 'panvivaDocumentVersion gt \"8\"'. (Filterable fields include dateCreated, dateModified, dateDeleted, categoryJson, queryVariationsJson, title, category, primaryQuery, isDeleted, timestamp, panvivaDocumentId, panvivaDocumentVersion, id)", + "type": "string", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Channel", + "name": "channel", + "in": "query", + "description": "Return response for a specific channel, instead of the default", + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Page Offset", + "name": "pageOffset", + "in": "query", + "description": "The pagination offset to denote the number of initial search results to skip. For example, pageOffset of 100 and pageLimit of 10 would return records 101-110.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Page Limit", + "name": "pageLimit", + "in": "query", + "description": "The number of records to return. Must be an integer between 0 and 1000.", + "type": "integer", + "x-ms-visibility": "advanced" + }, + { + "x-ms-summary": "Facet", + "name": "facet", + "in": "query", + "description": "Accepts a Lucene-formatted facet string. Examples: 'facet=Category,count:10&facet=Rating'. (Facetable fields include metaData/values)", + "type": "string", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetSearchArtefactResponse" + }, + "examples": { + "application/json": { + "results": [ + { + "id": "c714385f-f54c-4405-9d46-edcdbe2e453c", + "content": [ + { + "mediaType": "text/plain", + "text": "Minimum: $25,000.\nNo Maximum.", + "href": null, + "resourceLocation": "inline" + } + ], + "category": { + "name": "feature", + "id": 12, + "dateCreated": "2020-03-03T00:56:59.744+00:00", + "dateModified": "2020-04-07T13:46:29.92+00:00" + }, + "metaData": { + "keyword": { + "values": null, + "dataType": null + }, + "product": { + "values": [ + "Personal-Lending-Mortgage-Rapid-Repay", + "Personal-Lending-Mortgage-5-1", + "Personal-Lending-Mortgage-15", + "Personal-Lending-Mortgage-30" + ], + "dataType": "string" + }, + "entity": { + "values": ["Personal"], + "dataType": "string" + }, + "type": { + "values": ["Lending"], + "dataType": "string" + } + }, + "searchScore": 1.2721065, + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/artefact/c714385f-f54c-4405-9d46-edcdbe2e453c", + "rel": "artefact", + "type": "GET" + } + ], + "queryVariations": [ + { + "id": 22, + "query": "What is the minimum loan size?" + }, + { + "id": 23, + "query": "What is the maximum loan size?" + } + ], + "primaryQuery": "What is the loan size?", + "panvivaDocumentId": 616, + "panvivaDocumentVersion": 11, + "title": "Minimum/Maximum loan amount" + }, + { + "id": "c40d51e5-1f40-41e9-a55b-f3498d293119", + "content": [ + { + "mediaType": "text/plain", + "text": "Rapid Repay Loans allow customers to pay off their investment loan sooner or reduce the amount of interest they pay during the life of the loan, through the use of an offset account.", + "href": null, + "resourceLocation": "inline" + } + ], + "category": { + "name": "feature", + "id": 12, + "dateCreated": "2020-03-03T00:56:59.744+00:00", + "dateModified": "2020-03-10T00:29:16.417+00:00" + }, + "metaData": { + "keyword": { + "values": null, + "dataType": null + }, + "product": { + "values": ["Personal-Lending-Mortgage-Rapid-Repay"], + "dataType": "string" + }, + "entity": { + "values": ["Personal"], + "dataType": "string" + }, + "type": { + "values": ["Lending"], + "dataType": "string" + } + }, + "searchScore": 0.26734138, + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/artefact/c40d51e5-1f40-41e9-a55b-f3498d293119", + "rel": "artefact", + "type": "GET" + } + ], + "queryVariations": [], + "primaryQuery": "What are the key benefits of Rapid Repay loans?", + "panvivaDocumentId": 616, + "panvivaDocumentVersion": 11, + "title": "Rapid Repay Loans" + }, + { + "id": "bb957b03-18df-4d21-b7cc-64a0f6a33381", + "content": [ + { + "mediaType": "text/plain", + "text": "- Accessing any additional money they may have available in redraw in their eligible loan", + "href": null, + "resourceLocation": "inline" + }, + { + "mediaType": "text/plain", + "text": "- Consider if Interest Only payments are right for the customer", + "href": null, + "resourceLocation": "inline" + }, + { + "mediaType": "text/plain", + "text": "- Reducing customers' repayments to the minimum monthly repayment amount", + "href": null, + "resourceLocation": "inline" + }, + { + "mediaType": "text/plain", + "text": "- Utilising money in customer's Everyday Offset [If available]", + "href": null, + "resourceLocation": "inline" + } + ], + "category": { + "name": "feature", + "id": 12, + "dateCreated": "2020-03-03T00:56:59.744+00:00", + "dateModified": "2020-05-08T07:10:34.347+00:00" + }, + "metaData": { + "keyword": { + "values": ["COVID"], + "dataType": "string" + }, + "product": { + "values": ["Home Loan"], + "dataType": "string" + }, + "entity": { + "values": null, + "dataType": null + }, + "type": { + "values": null, + "dataType": null + } + }, + "searchScore": 0.26044145, + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/artefact/bb957b03-18df-4d21-b7cc-64a0f6a33381", + "rel": "artefact", + "type": "GET" + } + ], + "queryVariations": [ + { + "id": 64, + "query": "Can a customer reduce their monthly repayments of their home loan?" + } + ], + "primaryQuery": "Options for home loan repayments during COVID ", + "panvivaDocumentId": 817, + "panvivaDocumentVersion": 8, + "title": "Ways to assist customers during COVID " + } + ], + "total": 14 + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/csh": { + "post": { + "description": "Present a CSH search result page of the passing query on Panviva client to specified user on Panviva client", + "operationId": "OperationsLiveCsh", + "summary": "Live CSH", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveCshRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveCshRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveCshResponse" + }, + "examples": { + "application/json": { + "errorCode": "202", + "message": "Accepted" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/document": { + "post": { + "description": "Present a document page to specified user on Panviva client", + "operationId": "OperationsLiveDocument", + "summary": "Live Document", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveDocumentRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveDocumentRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveDocumentResponse" + }, + "examples": { + "application/json": { + "errorCode": "202", + "message": "Accepted" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/operations/live/search": { + "post": { + "description": "Present a search result page of the passing query on Panviva client to specified user on Panviva client", + "operationId": "OperationsLiveSearch", + "summary": "Live Search", + "tags": ["Operations"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postLiveSearchRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostLiveSearchRequest" + }, + "description": "JSON object containing information required to perform a live activity:", + "x-ms-visibility": "important" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed. There is a possibility that the request will fail, if it is disallowed when processing actually takes place. There is no facility for sending a completion-status code from this operation.", + "schema": { + "$ref": "#/definitions/PostLiveSearchResponse" + }, + "examples": { + "application/json": { + "errorCode": "202", + "message": "Accepted" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/container/{id}": { + "get": { + "description": "Return a container using the container ID provided", + "operationId": "ResourcesContainerById", + "summary": "Container", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The id of a document container", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetContainerResponse" + }, + "examples": { + "application/json": { + "id": "648-6-256-258", + "name": "Guidelines", + "body": "

Guidelines

The Viva Bank app can provide financial information and process transactions from any banking app-enabled device.

" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}": { + "get": { + "description": "Return a document using the document ID provided", + "operationId": "ResourcesDocumentById", + "summary": "Document", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "A document unique identifier, Document ID. If a document is a translated document, this value represents Internal ID or IID in Panviva API v1.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Version", + "name": "version", + "in": "query", + "description": "Request the API to return a particular version of the specified document.", + "type": "integer", + "x-ms-visibility": "advanced" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentResponse" + }, + "examples": { + "application/json": { + "id": "648", + "name": "Set up your Virtual Personal Assistant for Viva Bank", + "description": "This describes how to setup your Virtual Personal Assistant for vivabank.", + "version": 6, + "language": "en-US", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective date", + "value": "2020-05-04T00:00:00Z" + } + ], + "hidden": false, + "type": "document", + "release": 6, + "released": true, + "copyright": null, + "classification": "web-enabled|Bots & Assistants", + "status": "Complete", + "percentage": 100, + "releaseDate": "2020-03-06T13:00:00Z", + "layout": "topTabsSmall", + "training": null, + "keywords": ["keyword1", "keyword2", "keyword3"], + "cshKeywords": ["cshkeyword1", "cshkeyword2", "cshkeyword3"], + "updatedDate": "2020-03-31T00:35:30.757Z", + "createdDate": "2020-03-06T16:21:05.787Z", + "reusableContent": null, + "changeNote": null, + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/document/648/containers", + "rel": "containers", + "type": "GET" + }, + { + "href": "https://api.panviva.com/v3/viva-bank/resources/document/648/translations", + "rel": "translations", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/artefact/{id}": { + "get": { + "description": "Return an artefact using the ID provided", + "operationId": "ResourcesArtefactById", + "summary": "Artefact", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "Format - uuid. The id (ID) of an artefact", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetResponseResponse" + }, + "examples": { + "application/json": { + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/document/648?version=3", + "rel": "document", + "type": "GET" + } + ], + "title": "Commands for your Virtual Personal Assistant", + "content": [ + { + "mediaType": "text/plain", + "text": "You can begin a conversation with your Virtual Personal Assistant in one of two ways:\nSay \"open Viva Bank\" or \"tell Viva Bank...\"\nThe second option skips the welcome message and your VPA begins the request immediately. \nTo stop the conversation at any time just say \"Cancel.\"", + "href": null, + "resourceLocation": "inline" + } + ], + "variations": [], + "category": { + "name": "how to", + "id": 13, + "dateCreated": "2020-03-03T00:57:11.92+00:00", + "dateModified": "2020-03-10T19:10:19.457+00:00" + }, + "primaryQuery": "What are some common VPA banking commands?", + "queryVariations": [ + { + "id": 12, + "query": "Quick commands?" + } + ], + "panvivaDocumentId": 648, + "panvivaDocumentVersion": 3, + "metaData": { + "keyword": { + "values": null, + "dataType": null + }, + "product": { + "values": [ + "Personal-Lending-Mortgage-Rapid-Repay", + "Personal-Deposit-Child-Savings", + "Personal-Deposit-Savings-safe-balance", + "Personal-Lending-Mortgage-5-1", + "Personal-Lending-Mortgage-30" + ], + "dataType": "string" + }, + "entity": { + "values": ["Personal"], + "dataType": "string" + }, + "type": { + "values": ["Lending", "Deposit"], + "dataType": "string" + } + }, + "id": "b014a024-d246-4da0-89b5-c53e710fed4c", + "dateCreated": "2020-03-10T19:10:19.457+00:00", + "dateModified": "2020-03-10T19:10:19.457+00:00" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}/containers": { + "get": { + "description": "Return a list of containers using the document ID provided", + "operationId": "ResourcesDocumentByIdContainers", + "summary": "Document Containers", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentContainersResponse" + }, + "examples": { + "application/json": { + "containers": [ + { + "id": "648-6-259-268", + "name": "Description", + "body": "

Purpose

To guide a member in the setup, usage and troubleshooting of the Viva Bank skill for any VPA-enabled device.

Who

All Employees

When

A member needs help with the Viva Bank app on any VPA-enabled device.

Before you begin

Ensure the member has enrolled in Online Banking.

" + }, + { + "id": "648-6-4-41", + "name": "Verify member and Online Banking enrollment", + "body": "
Verify member and Online Banking enrollment

VPA-enabled devices

The member must verify three of the following:

A valid photo identification;

Date of birth;

SSN;

A password or security question for any bank account you have with us;

A bank account number;

Any transactions for the bank account;

Any direct deposit information for the bank account; or

Their car registration or title.

Ask the member...

Are you enrolled in Online Banking?

Choose the next step:

If...

Then...

Yes

Go to task 2.

No

Refer to Enroll in Online Banking.

Go to task 2.

" + }, + { + "id": "648-6-249-255", + "name": "Rules", + "body": "

Rules

The member must be enrolled in online banking in order to use the app.

The app must be added to an VPA-enabled device before it can be used.

External transfers cannot be made using the app.


" + }, + { + "id": "648-6-42-66", + "name": "Determine member need", + "body": "
Determine member need

The member is enrolled in Online Banking.

Choose the next step:

To help them...

Then go to...

Set up the app on their device

Task 3.

Use the app

Task 4.

Troubleshoot the app

Task 5.

" + }, + { + "id": "648-6-3-3", + "name": "Tasks", + "body": null + }, + { + "id": "648-6-256-258", + "name": "Guidelines", + "body": "

Guidelines

The Viva Bank app can provide financial information and process transactions from any VPA-enabled device.

" + }, + { + "id": "648-6-67-83", + "name": "Set up app on device", + "body": "
Set up app on device

Say to the member...

On your mobile device, open the VPA app.

From the Home Screen, tap the Menu Hint.

Select Skills & Games.

Tap the magnifying glass . Hint.

Type Viva Bank in the app name.

Tap Search.

Tap Enable.

Tap Accept and Continue.

Type your online banking username.

Type your online banking password.

Tap Verify.

Tap Map Accounts

Type a 4-digit PIN.

Tap Submit

Go to task 6.

" + }, + { + "id": "648-6-217-248", + "name": "Close call", + "body": "
Close call

Is there anything else I can help you with today?

Choose the next step:

If...

Then...

Yes

Return to Home page.

No

Thank them for calling.


" + }, + { + "id": "648-6-173-216", + "name": "Troubleshoot", + "body": "
Troubleshoot

The member has added the Viva Bank app to their device and needs help troubleshooting.

Choose the next step:

If...

Then...

VPA doesn't understand a request or has an unanticipated response

Speak \"cancel\" into the device.

VPA will confirm the process is cancelled.

Restart the conversation.

You receive the error \"There was a problem with the requested response\"

VPA has encountered a problem completing the task.

Say \"VPA, cancel\" and restart the conversation.

You have more than one task to complete in the Viva Bank app

Only one conversation can be conducted at a time.

When the initial conversation is complete, start a new conversation by saying \"VPA, ask Viva Bank to…\".

VPA doesn't recognize an account or gives an error that a nickname is not mapped for an account

You can request a list of your mapped accounts by saying \"VPA, what accounts do I have mapped?\"

You want to change your mapped nicknames; or

You want to change your 4-digit security PIN; or

You want to change your email address; or

You want to change your mobile phone number

Disable the VPA app, re-enable it, and complete the set up process again.

Go to task 6.

" + }, + { + "id": "648-6-0-2", + "name": "Taskflow", + "body": "

Task level instructions

Click a task to display its instructions.

" + }, + { + "id": "648-6-84-172", + "name": "Use app", + "body": "
Use app

Advise the member...

You can begin a conversation with VPA in one of two ways:

Say \"VPA, open Viva Bank\"  Example; or

Say \"VPA, tell Viva Bank...\"  Example

Once you've started a conversation, VPA responds with questions when she needs information to complete a task.

If VPA prompts you for your 4-digit PIN, say the PIN out loud to authenticate.

To stop the conversation at any time just say \"Cancel.\"

Common commands for VPA

To...

Say something like...

Cancel a debit card

\"VPA, tell Viva Bank that I lost my debit card;\" or

\"VPA, tell Viva Bank to cancel my card.\"

Perform an immediate transfer

From share to share; or

From share to loan

\"VPA, tell Viva Bank to

Transfer $10 from savings to checking; or

Pay my auto loan.

Get the balance for a share

\"VPA, ask Viva Bank

What is my savings balance?\" or

\"VPA, tell Viva Bank to

Text me my savings balance;\" or

Email me my savings balance.\"

Get your share history

\"VPA, ask Viva Bank to

Tell me about my savings account history;\" or

Text me my savings account history;\" or

Email me my savings account history.\"

Get information about a specific loan

\"VPA, ask Viva Bank to

Tell me about my auto loan; or

Text me information about my auto loan; or

Email me information about my auto loan.\"

Get information about all of your shares

\"VPA ask Viva Bank

What are my shares? or

To text me a summary of my shares; or

To email me a summary of my shares.\"

Request the User Help document

\"VPA, ask Viva Bank

What commands I can use;\" or

\"To send user commands.\"

Go to task 6.

" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/document/{id}/containers/relationships": { + "get": { + "description": "Return a list of the parent-child relationship between each container for the document ID provided", + "operationId": "ResourcesDocumentByIdContainersRelationships", + "summary": "Document Container Relationships", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentContainerRelationshipsResponse" + }, + "examples": { + "application/json": { + "relationships": [ + { + "id": "648-6-0-2", + "parent": null, + "children": null, + "taskFlow": "648-6-3-3" + }, + { + "id": "648-6-3-3", + "parent": null, + "children": [ + "648-6-4-41", + "648-6-42-66", + "648-6-67-83", + "648-6-84-172", + "648-6-173-216", + "648-6-217-248" + ], + "taskFlow": null + }, + { + "id": "648-6-4-41", + "parent": "648-6-3-3", + "children": null, + "taskFlow": null + }, + { + "id": "648-6-42-66", + "parent": "648-6-3-3", + "children": null, + "taskFlow": null + }, + { + "id": "648-6-67-83", + "parent": "648-6-3-3", + "children": null, + "taskFlow": null + }, + { + "id": "648-6-84-172", + "parent": "648-6-3-3", + "children": null, + "taskFlow": null + }, + { + "id": "648-6-173-216", + "parent": "648-6-3-3", + "children": null, + "taskFlow": null + }, + { + "id": "648-6-217-248", + "parent": "648-6-3-3", + "children": null, + "taskFlow": null + }, + { + "id": "648-6-249-255", + "parent": null, + "children": null, + "taskFlow": null + }, + { + "id": "648-6-256-258", + "parent": null, + "children": null, + "taskFlow": null + }, + { + "id": "648-6-259-268", + "parent": null, + "children": null, + "taskFlow": null + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + } + } + }, + "/{instance}/resources/document/{id}/translations": { + "get": { + "description": "Return a list of all translations (per language and locale) of a Panviva document", + "operationId": "ResourcesDocumentByIdTranslations", + "summary": "Document Translations", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva document.", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetDocumentTranslationsResponse" + }, + "examples": { + "application/json": { + "translations": [], + "origin": null + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/file/{id}": { + "get": { + "description": "Returns a file (external document) from Panviva", + "operationId": "ResourcesFileById", + "summary": "File", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva file (external document)", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFileResponse" + }, + "examples": { + "application/json": { + "id": "file", + "name": "example PDF", + "description": "Contains details", + "version": 2, + "language": "en-AU", + "tags": [ + { + "name": "custom-category", + "value": "MVU-10" + } + ], + "hidden": false, + "type": "file", + "content": "JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9DcmVhdG9yIChNb3ppbGxhLzUuMCBcKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NFwpIEFwcGxlV2ViS2l0LzUzNy4zNiBcKEtIVE1MLCBsaWtlIEdlY2tvXCkgQ2hyb21lLzcxLjAuMzU3OC45OCBTYWZhcmkvNTM3LjM2KQovUHJvZHVjZXIgKFNraWEvUERGIG03MSkKL0NyZWF0aW9uRGF0ZSAoRDoyMDE5MDEzMDA1NTM0NyswMCcwMCcpCi9Nb2REYXRlIChEOjIwMTkwMTMwMDU1MzQ3KzAwJzAw ...................................... CBuIAowMDAwMzgwMzI0IDAwMDAwIG4gCjAwMDAzODA1NDQgMDAwMDAgbiAKMDAwMDM4MDc2NyAwMDAwMCBuIAowMDAwMzgwOTg2IDAwMDAwIG4gCjAwMDAzODEyMDYgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDEwNwovUm9vdCAxOSAwIFIKL0luZm8gMSAwIFI+PgpzdGFydHhyZWYKMzgxNDIzCiUlRU9G", + "fileName": "details.pdf", + "release": 2, + "released": true, + "copyright": "public domain", + "classification": "general", + "status": "released", + "percentage": 100, + "releaseDate": "2019-01-30T17:00:53.563Z", + "keywords": ["general info", "series"], + "cshKeywords": ["series"], + "changeNote": "Uploaded linked document.", + "updatedDate": "2019-01-30T17:00:53.563Z", + "createdDate": "2019-01-30T16:54:51.637Z" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/folder/{id}": { + "get": { + "description": "Return information about a Panviva folder and references to each of its direct children", + "operationId": "ResourcesFolderById", + "summary": "Folder", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderResponse" + }, + "examples": { + "application/json": { + "id": "342", + "name": "the films", + "description": "Various film information", + "version": 10, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/folder/342/children", + "rel": "children", + "type": "GET" + }, + { + "href": "https://api.panviva.com/v3/viva-bank/resources/folder/342/translations", + "rel": "translations", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/{id}/children": { + "get": { + "description": "Gets all the immediate children of a Panviva folder, not including grandchildren. Children can be folders, documents, or files (external documents)", + "operationId": "ResourcesFolderByIdChildren", + "summary": "Folder Children", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderChildrenResponse" + }, + "examples": { + "application/json": { + "children": [ + { + "id": "84374", + "name": "Books", + "description": "Information pertaining to books.", + "version": 1, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": true, + "type": "folder", + "links": null + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/{id}/translations": { + "get": { + "description": "Gets all the translations of a Panviva folder, along with each translated folders respective children", + "operationId": "ResourcesFolderByIdTranslations", + "summary": "Folder Translations", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The internal id (IID) of a Panviva folder", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderTranslationsResponse" + }, + "examples": { + "application/json": { + "translations": [ + { + "id": "84374", + "name": "die Filme", + "description": "Information ueber Filme.", + "version": 1, + "language": "de-DE", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/folder/84374/translations", + "rel": "translations", + "type": "GET" + }, + { + "href": "https://api.panviva.com/v3/viva-bank/resources/folder/84374/children", + "rel": "children", + "type": "GET" + } + ] + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/folder/root": { + "get": { + "description": "Gets the root/home folder in all of Panviva, which can be drilled into using the Get Folder Children endpoint. Note this endpoint was formerly referred to as the 'Folder Search' endpoint", + "operationId": "ResourcesFolderRoot", + "summary": "Folder Root", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetFolderRootResponse" + }, + "examples": { + "application/json": { + "id": "1", + "name": "Home", + "description": "The Home folder of Panviva", + "version": 8, + "language": "en-AU", + "tags": [ + { + "name": "Rank", + "value": "1" + }, + { + "name": "Effective Date", + "value": "2015-02-15T00:00:00Z" + } + ], + "hidden": false, + "type": "folder", + "links": [ + { + "href": "https://api.panviva.com/v3/viva-bank/resources/folder/84374/translations", + "rel": "translations", + "type": "GET" + }, + { + "href": "https://api.panviva.com/v3/viva-bank/resources/folder/84374/children", + "rel": "children", + "type": "GET" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + }, + "/{instance}/resources/image/{id}": { + "get": { + "description": "Returns an image from Panviva. Image data is represented as a base64 string", + "operationId": "ResourcesImageById", + "summary": "Image", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "x-ms-summary": "Id", + "x-ms-url-encoding": "single", + "name": "id", + "in": "path", + "description": "The id of a Panviva image", + "required": true, + "type": "integer", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetImageResponse" + }, + "examples": { + "application/json": { + "id": "1097", + "name": "guidelines", + "width": 41, + "height": 44, + "size": 1042, + "contentType": "image/png", + "content": "iVBORw0KGgoAAAANSUhEUgAAACkAAAAsCAYAAAD4rZFFAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAOYSURBVFhH7ZhrSBRRFMe3srBSsyzCIC1Jk4UWbEkyKq2+l0QSZdsi5mtNZ2bXRz7qOpOZtj4qbGeVJMtMlFroofSlote3ioS+BGoGCaVSPhOzOp3Rq+7aQha4tw/7hz9359zL3N+cmZ0596rccsstF8lkNi/lRTmDE+V6TrQ2zsaGXHOZTqcLA4B59DRzK0Oa6TwvWeFvHc/lPo+O1vnR08ytOEnusZ8cj8c4ydrOS3ILttcwy7cwe6/xeMR+HB4Pp5OqAHqauRXe5j67yb8jmI0Xq3cIpGwFIY88DKTSSyCVG3ipqoIXrZ+ZQOJkXyYnxoy94iTLRtrlICOpWomQV/EifjCDHJ+8QI6lYadK4vKiONEyxBBSHoiPF1bQsFPtCwz0xWe0lx2kKPck+vsvoWGnItiPkN3MINHDu4ICdtOwU8WEBmi5gkv9LCF/pmQU3c8MW7uGdjmIqNVeqak55zDjYywhx9+RQlZJpSEiIrBKq10IKtW8JpVqwRHN6qXG5Mxj/Glr1+RYZpAUdCQ5Lf+piZPMxpMXjMbs4hPJCcJ1fD0pz+LP6bEMIacsygoQ3lp5dPrdaO//AfKPZgxZ25AAd5t1cLtZD3ewvdcS7dA/YYaQNfXJMNC1Cr72eKIXw3D3Yhj66AdPH0fZATKEzCkpg6H3HtDf4QV97d5TreLBziVQ36hjD5lbXA4Db3yh95X/uHtoq/hL6yqor4tjD5lztgI+PQ6ADw/W/+auR+ug9nISe8iswgvQ2rAZOm8Fw7tJ25Q2BNpsarBcNLKHVFxUIsHL6ghor9kIbZdDoa0mFDrwN5a8doCMIRXnFpYBOVPi4JljmEPOzgwh8ds9qiwjeNFiFUT5lCBayjH2EKsfWpEzhsRv9JggybWpRdUhekI8CSHzYwhZxJEKX6GwOpsWGcwhn/DEEkS7HJRG6nwmsqoUHYwglVry4HHTfhp2qkPHhXAcz64yV9bf4bHhPjTsVBqTRtmSYbjGwYX/psPbl9OwU2kTtctwLDtIzORoXJZ0gIad6mg22Yl/nkF2mVRACywvNHs0IbTLQVt0W/wScoqvTFfpLoRUnsVJSPT3pLzSm3qBbN22d5t3ZGSkhzpG7ZUuycH6jJPl2D91Qa6FnLGrhpN/Q/C3KXmltrSCS1dS8kttGG/FOLtdNQP3b/uTCUL+M5ftTyo7vfgsZuLENzCDTbOyZDVnSdZNLtvpdcutOZNK9Qt8glpWKJJs4gAAAABJRU5ErkJggg==" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + } + }, + "/{instance}/resources/artefactcategory": { + "get": { + "description": "Gets a list of all available artefact categories", + "operationId": "ResourcesArtefactCategoriesGet", + "summary": "Get Artefact Categories", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + } + ], + "produces": ["application/json"], + "responses": { + "200": { + "description": "The operation is successful and returns with the requested resource. An example of a successful response can be seen in the Sample payload.", + "schema": { + "$ref": "#/definitions/GetArtefactCategoriesResponse" + }, + "examples": { + "application/json": { + "categories": [ + { + "id": 12, + "categoryName": "feature" + }, + { + "id": 13, + "categoryName": "how to" + }, + { + "id": 14, + "categoryName": "other" + }, + { + "id": 15, + "categoryName": "lookup" + }, + { + "id": 16, + "categoryName": "what is" + }, + { + "id": 17, + "categoryName": "corporate policy" + }, + { + "id": 19, + "categoryName": "testCategory" + }, + { + "id": 20, + "categoryName": "testcat" + }, + { + "id": 21, + "categoryName": "string" + }, + { + "id": 22, + "categoryName": "test category" + }, + { + "id": 23, + "categoryName": "test10" + } + ] + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "important" + }, + "post": { + "description": "Creates a category for classifying artefacts", + "operationId": "ResourcesArtefactCategoryPost", + "summary": "Create Artefact Category", + "tags": ["Resources"], + "parameters": [ + { + "x-ms-summary": "Instance", + "x-ms-url-encoding": "single", + "name": "instance", + "in": "path", + "description": "The instance name as shown on the Panviva Developer Portal.", + "required": true, + "type": "string", + "x-ms-visibility": "important" + }, + { + "name": "postArtefactCategoryRequest", + "in": "body", + "schema": { + "$ref": "#/definitions/PostArtefactCategoryRequest" + }, + "description": "JSON object containing the category name" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "responses": { + "201": { + "description": "Success", + "schema": { + "$ref": "#/definitions/PostArtefactCategoryResponse" + }, + "examples": { + "application/json": { + "categoryId": 1, + "categoryName": "Loans" + } + } + }, + "400": { + "description": "Bad Request - The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications.", + "examples": { + "application/json": { + "errorCode": "400", + "message": "Bad Request" + } + } + }, + "403": { + "description": "Out of call volume quota.", + "examples": { + "application/json": { + "errorCode": "403", + "message": "Out of call volume quota" + } + } + }, + "404": { + "description": "Document not found - The server has not found anything matching the request URI.", + "examples": { + "application/json": { + "errorCode": "404", + "message": "Not Found" + } + } + }, + "405": { + "description": "Method Not Allowed - The method specified in the request is not allowed for the resource identified by the request URI.", + "examples": { + "application/json": { + "errorCode": "405", + "message": "Method Not Allowed" + } + } + }, + "406": { + "description": "Not Acceptable - The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. If accept headers is specified, application/json must be the only media type.", + "examples": { + "application/json": { + "errorCode": "406", + "message": "Not Acceptable" + } + } + }, + "415": { + "description": "Unsupported Media Type - The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method. The only supported media type is application/json.", + "examples": { + "application/json": { + "errorCode": "415", + "message": "Unsupported Media Type" + } + } + }, + "429": { + "description": "Too many requests - The number of requests has reached the plan's rate limit.", + "examples": { + "application/json": { + "errorCode": "429", + "message": "Too Many Requests" + } + } + }, + "503": { + "description": "Service Unavailable - Panviva servers are under maintenance.", + "examples": { + "application/json": { + "errorCode": "503", + "message": "Service Unavailable" + } + } + } + }, + "x-ms-visibility": "advanced" + } + } + }, + "definitions": { + "Link": { + "type": "object", + "properties": { + "href": { + "type": "string" + }, + "rel": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "ResourceSearchResult": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "matchedFields": { + "type": "array", + "items": { + "type": "string" + } + }, + "snippet": { + "type": "string" + }, + "language": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetSearchResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/ResourceSearchResult" + } + }, + "total": { + "type": "integer" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "StringInt64NullableKeyValuePair": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int64", + "type": "integer", + "readOnly": true + } + } + }, + "Facet": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/definitions/StringInt64NullableKeyValuePair" + } + } + } + }, + "ResponseSection": { + "type": "object", + "properties": { + "mediaType": { + "type": "string" + }, + "text": { + "type": "string" + }, + "href": { + "type": "string" + }, + "resourceLocation": { + "type": "string" + } + } + }, + "Category": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "MetaDataValueDetails": { + "type": "object", + "properties": { + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "dataType": { + "type": "string" + } + } + }, + "QueryVariation": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "query": { + "type": "string" + } + } + }, + "SearchResult": { + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "category": { + "$ref": "#/definitions/Category" + }, + "metaData": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MetaDataValueDetails" + } + }, + "searchScore": { + "type": "number" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + }, + "queryVariations": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryVariation" + } + }, + "primaryQuery": { + "type": "string" + }, + "panvivaDocumentId": { + "type": "integer" + }, + "panvivaDocumentVersion": { + "type": "integer" + }, + "title": { + "type": "string" + } + } + }, + "GetSearchArtefactResponse": { + "type": "object", + "properties": { + "facets": { + "type": "array", + "items": { + "$ref": "#/definitions/Facet" + } + }, + "results": { + "type": "array", + "items": { + "$ref": "#/definitions/SearchResult" + } + }, + "total": { + "type": "integer" + } + } + }, + "PostLiveCshRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "query": { + "description": "The CSH term to search for.", + "type": "string" + }, + "showFirstResult": { + "description": "True to immediately open the first document found, or false to show the list of results.", + "type": "boolean" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + } + } + }, + "PostLiveCshResponse": { + "type": "object" + }, + "PostLiveDocumentRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "id": { + "description": "The Document ID of the Panviva Document you wish to send.", + "type": "string" + }, + "location": { + "description": "The Section ID you would like the user to see, when the specified document is opened.", + "type": "string" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + } + } + }, + "PostLiveDocumentResponse": { + "type": "object" + }, + "PostLiveSearchRequest": { + "type": "object", + "properties": { + "username": { + "description": "The Panviva user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "userId": { + "description": "The numeric ID of the user to whom you wish to send the result. (Note: Use username OR userId, not both.)", + "type": "string" + }, + "query": { + "description": "The term to search for.", + "type": "string" + }, + "maximizeClient": { + "description": "True/False depending on whether you want the Panviva client to maximize on the user's desktop, when the document is delivered.", + "type": "boolean" + }, + "showFirstResult": { + "description": "True to immediately open the first document found, or false to show the list of results.", + "type": "boolean" + } + } + }, + "PostLiveSearchResponse": { + "type": "object" + }, + "GetContainerResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "Tag": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "Training": { + "type": "object", + "properties": { + "failureFeedback": { + "type": "string" + }, + "forcePageSequence": { + "type": "boolean" + }, + "forceQuestionSequence": { + "type": "boolean" + }, + "passingScore": { + "type": "integer" + }, + "successFeedback": { + "type": "string" + } + } + }, + "GetDocumentResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "layout": { + "type": "string" + }, + "training": { + "$ref": "#/definitions/Training" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "reusableContent": { + "type": "boolean" + }, + "changeNote": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "Channel": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "ResponseVariation": { + "type": "object", + "properties": { + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/definitions/Channel" + } + }, + "id": { + "type": "integer" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "GetResponseResponse": { + "type": "object", + "properties": { + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + }, + "title": { + "type": "string" + }, + "content": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseSection" + } + }, + "variations": { + "type": "array", + "items": { + "$ref": "#/definitions/ResponseVariation" + } + }, + "category": { + "$ref": "#/definitions/Category" + }, + "primaryQuery": { + "type": "string" + }, + "queryVariations": { + "type": "array", + "items": { + "$ref": "#/definitions/QueryVariation" + } + }, + "panvivaDocumentId": { + "type": "integer" + }, + "panvivaDocumentVersion": { + "type": "integer" + }, + "metaData": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/MetaDataValueDetails" + } + }, + "id": { + "format": "uuid", + "type": "string" + }, + "dateCreated": { + "format": "date-time", + "type": "string" + }, + "dateModified": { + "format": "date-time", + "type": "string" + } + } + }, + "Container": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "GetDocumentContainersResponse": { + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "$ref": "#/definitions/Container" + } + } + } + }, + "ContainerRelationship": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "parent": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "type": "string" + } + }, + "taskFlow": { + "type": "string" + } + } + }, + "GetDocumentContainerRelationshipsResponse": { + "type": "object", + "properties": { + "relationships": { + "type": "array", + "items": { + "$ref": "#/definitions/ContainerRelationship" + } + } + } + }, + "Document": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "layout": { + "type": "string" + }, + "training": { + "$ref": "#/definitions/Training" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "reusableContent": { + "type": "boolean" + }, + "changeNote": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetDocumentTranslationsResponse": { + "type": "object", + "properties": { + "translations": { + "type": "array", + "items": { + "$ref": "#/definitions/Document" + } + }, + "origin": { + "type": "string" + } + } + }, + "GetFileResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "content": { + "type": "string" + }, + "fileName": { + "type": "string" + }, + "release": { + "type": "integer" + }, + "released": { + "type": "boolean" + }, + "copyright": { + "type": "string" + }, + "classification": { + "type": "string" + }, + "status": { + "type": "string" + }, + "percentage": { + "type": "integer" + }, + "releaseDate": { + "format": "date-time", + "type": "string" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "cshKeywords": { + "type": "array", + "items": { + "type": "string" + } + }, + "changeNote": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + } + } + }, + "GetFolderResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "Resource": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "GetFolderChildrenResponse": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/Resource" + } + } + } + }, + "Folder": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetFolderTranslationsResponse": { + "type": "object", + "properties": { + "translations": { + "type": "array", + "items": { + "$ref": "#/definitions/Folder" + } + } + } + }, + "GetFolderRootResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "version": { + "type": "integer" + }, + "language": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + } + }, + "hidden": { + "type": "boolean" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "GetImageResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + }, + "size": { + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "content": { + "type": "string" + } + } + }, + "ArtefactCategory": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "categoryName": { + "type": "string" + } + } + }, + "GetArtefactCategoriesResponse": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/definitions/ArtefactCategory" + } + } + } + }, + "PostArtefactCategoryRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "PostArtefactCategoryResponse": { + "type": "object", + "properties": { + "categoryId": { + "type": "integer" + }, + "categoryName": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "apiKeyHeader": { + "type": "apiKey", + "name": "Ocp-Apim-Subscription-Key", + "in": "header" + } + }, + "security": [ + { + "apiKeyHeader": [] + } + ], + "tags": [] +} diff --git a/certified-connectors/Panviva/apiProperties.json b/certified-connectors/Panviva/apiProperties.json index ea80802d0..49bb93bdd 100644 --- a/certified-connectors/Panviva/apiProperties.json +++ b/certified-connectors/Panviva/apiProperties.json @@ -1,23 +1,23 @@ -{ - "properties": { - "connectionParameters": { - "api_key": { - "type": "securestring", - "uiDefinition": { - "displayName": "Panviva API Subscription Key", - "description": "The Panviva API Subscription Key for your instance.", - "tooltip": "The Panviva API Subscription Key for your instance. Get yours at https://dev.panviva.com.", - "constraints": { - "tabIndex": 2, - "clearText": false, - "required": "true" - } - } - } - }, - "iconBrandColor": "#265174", - "capabilities": [], - "publisher": "Panviva", - "stackOwner": "Panviva" - } -} +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "Panviva API Subscription Key", + "description": "The Panviva API Subscription Key for your instance.", + "tooltip": "The Panviva API Subscription Key for your instance. Get yours at https://dev.panviva.com.", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#245174", + "capabilities": [], + "publisher": "Panviva", + "stackOwner": "Panviva" + } +} From 7d01035109a1f5e7b80e8dc71afb592142949944 Mon Sep 17 00:00:00 2001 From: River <22485304+actual-size@users.noreply.github.com> Date: Thu, 15 Oct 2020 11:32:48 +1100 Subject: [PATCH 140/347] Add files via upload --- certified-connectors/Panviva/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Panviva/README.md b/certified-connectors/Panviva/README.md index 7e79bd99b..4eaea678f 100644 --- a/certified-connectors/Panviva/README.md +++ b/certified-connectors/Panviva/README.md @@ -1,6 +1,6 @@ ## Panviva Connector -Panviva provides a powerful and very extensive REST API. Using this API, you can access and manage knowledge stores in your Panviva instances. This connector allows you to leverage the same knowledge within your application, or in your process automation. +Panviva is an omnichannel knowledge management solution. Our priority is to aid our clients in keeping their employees happy, so that they can focus on ensuring their customers are happy. Digitally transforming organisations for the last 20 years, we're now helping our customers to deliver knowledge nuggets to their employees and customers, whether they are in the home or the office - anytime and anywhere. ## Prerequisites From d5b93ceefa5ec7875832f997ee4b0840f83b887d Mon Sep 17 00:00:00 2001 From: Sean Matthews Date: Wed, 14 Oct 2020 20:43:54 -0400 Subject: [PATCH 141/347] Huddle US (New fork version :-) ) (#473) * Huddle US FIles * Tweaks to address requests and to add New Approval Trigger --- .../Huddle US/apiDefinition.swagger.json | 1058 +++++++++++++++++ .../Huddle US/apiProperties.json | 66 + certified-connectors/Huddle US/readme.md | 30 + 3 files changed, 1154 insertions(+) create mode 100644 certified-connectors/Huddle US/apiDefinition.swagger.json create mode 100644 certified-connectors/Huddle US/apiProperties.json create mode 100644 certified-connectors/Huddle US/readme.md diff --git a/certified-connectors/Huddle US/apiDefinition.swagger.json b/certified-connectors/Huddle US/apiDefinition.swagger.json new file mode 100644 index 000000000..31aaa1437 --- /dev/null +++ b/certified-connectors/Huddle US/apiDefinition.swagger.json @@ -0,0 +1,1058 @@ +{ + "basePath": "/", + "consumes": [ + "application/json" + ], + "definitions": { + "File": { + "properties": { + "contentType": { + "description": "The file's document MIME type", + "type": "string", + "x-ms-summary": "Type" + }, + "created": { + "description": "The date and time the file was created", + "format": "date", + "type": "string", + "x-ms-summary": "File Created" + }, + "description": { + "description": "A description of the file", + "type": "string", + "x-ms-summary": "Description" + }, + "extension": { + "description": "The file's extension", + "type": "string", + "x-ms-summary": "Extension" + }, + "folderId": { + "description": "ID of the folder in which the file resides", + "type": "string", + "x-ms-summary": "Folder ID" + }, + "id": { + "description": "The file's ID", + "type": "string", + "x-ms-summary": "File ID" + }, + "title": { + "description": "The file's title", + "type": "string", + "x-ms-summary": "Title" + }, + "updated": { + "description": "The date and time the file was last updated", + "format": "date", + "type": "string", + "x-ms-summary": "Last Updated" + }, + "workspaceId": { + "description": "The ID of the workspace in which the file resides", + "type": "string", + "x-ms-summary": "Workspace ID" + } + }, + "type": "object" + }, + "FileUpload": { + "properties": { + "content": { + "description": "The binary content of the file", + "format": "binary", + "type": "string", + "x-ms-summary": "File content" + }, + "description": { + "description": "A description of the file", + "type": "string", + "x-ms-summary": "Description" + }, + "title": { + "description": "The file's title", + "type": "string", + "x-ms-summary": "Title" + } + }, + "type": "object" + }, + "Folder": { + "properties": { + "children": { + "description": "The child folders contained within the current one", + "items": { + "type": "object" + }, + "type": "array", + "x-ms-summary": "Child folders ( Subfolders )" + }, + "description": { + "description": "Description", + "type": "string", + "x-ms-summary": "Description" + }, + "files": { + "description": "The documents and files contained within the current one", + "items": { + "$ref": "#/definitions/File" + }, + "type": "array", + "x-ms-summary": "Files" + }, + "id": { + "description": "The ID of the folder", + "type": "string", + "x-ms-summary": "Folder ID" + }, + "title": { + "description": "The title of the folder", + "type": "string", + "x-ms-summary": "Title" + } + }, + "type": "object" + }, + "FolderInput": { + "required": ["title"], + "properties": { + "title": { + "description": "The title of the folder", + "type": "string", + "x-ms-summary": "Title" + }, + "description": { + "description": "Description", + "type": "string", + "x-ms-summary": "Description" + } + }, + "type": "object" + }, + "NewApprovalTriggerOutput": { + "properties": { + "assignees": { + "description": "An array of assigned users", + "items": { + "$ref": "#/definitions/Assignee" + }, + "type": "array", + "x-ms-summary": "Approval Assignees" + }, + "assignerName": { + "description": "Name of the approval requester", + "type": "string", + "x-ms-summary": "Approval Requester Name" + }, + "assignerEmail": { + "description": "Email of the approval requester", + "type": "string", + "x-ms-summary": "Approval Requester Email" + }, + "ownerName": { + "description": "Name of the approval task owner", + "type": "string", + "x-ms-summary": "Approval Task Owner Name" + }, + "ownerEmail": { + "description": "Email of the approval task owner", + "type": "string", + "x-ms-summary": "Approval Task Owner Email" + }, + "description": { + "description": "A description of the task", + "type": "string", + "x-ms-summary": "Description" + }, + "dueDate": { + "description": "The date by which the task should be completed", + "type": "string", + "x-ms-summary": "Due Date" + }, + "created": { + "description": "The created date for the approval task", + "type": "string", + "x-ms-summary": "Created Date" + }, + "fileId": { + "description": "The ID of the file the task is associated with, if any", + "type": "string", + "x-ms-summary": "File ID" + }, + "fileTitle": { + "description": "The file's title", + "type": "string", + "x-ms-summary": "File Title" + }, + "id": { + "description": "The ID of the Approval task", + "type": "string", + "x-ms-summary": "Approval Task ID" + }, + "status": { + "description": "The task's status", + "type": "string", + "x-ms-summary": "Status" + }, + "type": { + "description": "The type of task", + "type": "string", + "x-ms-summary": "Task Type" + }, + "workspaceId": { + "description": "The ID of the workspace for the given Approval task", + "type": "string", + "x-ms-summary": "Workspace ID" + }, + "workspaceName": { + "description": "The name of the workspace for the given Approval task", + "type":"string", + "x-ms-summary": "Workspace Name" + } + }, + "type": "object" + }, + "Assignee": { + "properties": { + "name": { + "description": "Assignee name", + "type": "string", + "x-ms-summary": "Assignee Name" + }, + "email": { + "description": "Assignee email", + "type": "string", + "x-ms-summary": "Assignee Email" + } + }, + "type": "object" + }, + "Task": { + "properties": { + "assignee": { + "description": "The ID of user to whom the task is assigned, if any", + "type": "string", + "x-ms-summary": "Assignee" + }, + "description": { + "description": "A description of the task", + "type": "string", + "x-ms-summary": "Description" + }, + "dueDate": { + "description": "The date by which the task should be completed", + "type": "string", + "x-ms-summary": "Due Date" + }, + "fileId": { + "description": "The ID of the file the task is associated with, if any", + "type": "string", + "x-ms-summary": "File ID" + }, + "id": { + "description": "The ID of the task", + "type": "string", + "x-ms-summary": "Task ID" + }, + "status": { + "description": "The task's status", + "type": "string", + "x-ms-summary": "Status" + }, + "title": { + "description": "The task's title", + "type": "string", + "x-ms-summary": "Title" + }, + "type": { + "description": "The type of task", + "type": "string", + "x-ms-summary": "Type" + }, + "workspaceId": { + "description": "The ID of the workspace the task resides in", + "type": "string", + "x-ms-summary": "Workspace ID" + } + }, + "type": "object" + }, + "TaskInputs": { + "required": ["title"], + "properties": { + "assignee": { + "description": "The ID of user to whom the task is assigned, if any", + "type": "string", + "x-ms-summary": "Assignee" + }, + "description": { + "description": "A description of the task", + "type": "string", + "x-ms-summary": "Description" + }, + "dueDate": { + "description": "The date by which the task should be completed", + "type": "string", + "x-ms-summary": "Due Date" + }, + "fileId": { + "description": "The ID of the file the task is associated with, if any", + "type": "string", + "x-ms-summary": "File ID" + }, + "id": { + "description": "The ID of the task", + "type": "string", + "x-ms-summary": "Task ID" + }, + "status": { + "description": "The task's status", + "type": "string", + "x-ms-summary": "Status" + }, + "title": { + "description": "The task's title", + "type": "string", + "x-ms-summary": "Title" + } + }, + "type": "object" + }, + "TextFileUpload": { + "properties": { + "content": { + "description": "Text content (with multi-line) for upload", + "type": "string", + "x-ms-summary": "Text Content" + }, + "description": { + "description": "A description of the file", + "type": "string", + "x-ms-summary": "Description" + }, + "title": { + "description": "The file's title", + "type": "string", + "x-ms-summary": "Title" + } + }, + "type": "object" + }, + "UploadFileTriggerOutput": { + "properties": { + "created": { + "description": "The date and time the file was created", + "format": "date", + "type": "string", + "x-ms-summary": "File Created" + }, + "description": { + "description": "A description of the file", + "type": "string", + "x-ms-summary": "Description" + }, + "folderId": { + "description": "ID of the folder in which the file resides", + "type": "string", + "x-ms-summary": "Folder ID" + }, + "id": { + "description": "The file's ID", + "type": "string", + "x-ms-summary": "File ID" + }, + "title": { + "description": "The file's title", + "type": "string", + "x-ms-summary": "Title" + }, + "updated": { + "description": "The date and time the file was last updated", + "format": "date", + "type": "string", + "x-ms-summary": "Last Updated" + }, + "workspaceId": { + "description": "The ID of the workspace in which the file resides", + "type": "string", + "x-ms-summary": "Workspace ID" + } + }, + "type": "object" + }, + "Workspace": { + "properties": { + "files": { + "description": "Files in the workspace's root directory", + "items": { + "type": "object" + }, + "type": "array", + "x-ms-summary": "Files" + }, + "folders": { + "description": "Folders in the workspace's root directory", + "items": { + "type": "object" + }, + "type": "array", + "x-ms-summary": "Folders" + }, + "id": { + "description": "The ID of the workspace", + "type": "string", + "x-ms-summary": "Workspace ID" + }, + "title": { + "description": "The title of the workspace", + "type": "string", + "x-ms-summary": "Title" + } + }, + "type": "object" + } + }, + "host": "msflow.huddle.com", + "info": { + "description": "US GOVERNMENT & HEALTHCARE VERSION (Standard version is also available.) Huddle is a secure document collaboration and client portal trusted by Enterprise and Government alike.", + "title": "Huddle for US Gov & Healthcare", + "version": "2.0", + "contact": { + "name": "Huddle Support", + "url": "https://huddle.zendesk.com/hc/en-us", + "email": "help@huddle.com" + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://huddle.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://huddle.com/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Content and Files;Collaboration" + } + ], + "parameters": {}, + "paths": { + "/trigger/v2/poll/folder/{folderId}/upload": { + "get": { + "description": "Poll a target folder for it's most recent upload", + "operationId": "PollFolderForFileUpload", + "parameters": [ + { + "description": "The workspace to watch a folder in", + "in": "query", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-collection": "workspaces", + "value-path": "id", + "value-title": "title" + }, + "x-ms-summary": "Workspace" + }, + { + "description": "The folder to watch", + "in": "path", + "name": "folderId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspacePaths", + "parameters": { + "workspaceId": { + "parameter": "workspaceId" + } + }, + "value-collection": "paths", + "value-path": "id", + "value-title": "path" + }, + "x-ms-summary": "Target Folder" + }, + { + "in": "query", + "name": "after", + "required": false, + "type": "string", + "x-ms-visibility": "internal" + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "files": { + "description": "files", + "items": { + "$ref": "#/definitions/UploadFileTriggerOutput" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "summary": "Poll a target folder for it's most recent upload", + "x-ms-trigger": "batch", + "x-ms-trigger-hint": "When a new file is uploaded", + "x-ms-trigger-metadata": { + "kind": "query", + "mode": "polling" + }, + "x-ms-visibility": "important" + } + }, + "/trigger/v2/poll/workspace/{workspaceId}/approvals": { + "get": { + "description": "Poll a target workspace for it's most recent approval request", + "operationId": "PollWorkspaceForNewApproval", + "parameters": [ + { + "description": "The workspace to watch a folder in", + "in": "path", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-collection": "workspaces", + "value-path": "id", + "value-title": "title" + }, + "x-ms-summary": "Workspace" + }, + { + "in": "query", + "name": "after", + "required": false, + "type": "string", + "x-ms-visibility": "internal" + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "approvals": { + "description": "approvals", + "items": { + "$ref": "#/definitions/NewApprovalTriggerOutput" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "summary": "Poll a target workspace for it's most recent approval request", + "x-ms-trigger": "batch", + "x-ms-trigger-hint": "When a new approval is requested", + "x-ms-trigger-metadata": { + "kind": "query", + "mode": "polling" + }, + "x-ms-visibility": "important" + } + }, + "/v2/file/upload/folder/{folderId}": { + "post": { + "description": "Upload a form submission as a text file", + "operationId": "UploadFormSubmissionAsNewFile", + "parameters": [ + { + "description": "The workspace where the file will be uploaded", + "in": "query", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-collection": "workspaces", + "value-path": "id", + "value-title": "title" + }, + "x-ms-summary": "Workspace" + }, + { + "description": "The folder where the file will be uploaded", + "in": "path", + "name": "folderId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspacePaths", + "parameters": { + "workspaceId": { + "parameter": "workspaceId" + } + }, + "value-collection": "paths", + "value-path": "id", + "value-title": "path" + }, + "x-ms-summary": "Target Folder" + }, + { + "description": "File options", + "in": "body", + "name": "requestBody", + "schema": { + "$ref": "#/definitions/TextFileUpload" + }, + "x-ms-summary": "File" + } + ], + "responses": { + "201": { + "description": "OK", + "schema": { + "properties": { + "file": { + "$ref": "#/definitions/File" + } + }, + "type": "object" + } + } + }, + "summary": "Upload a form submission as a text file" + } + }, + "/v2/file/{fileId}": { + "get": { + "description": "Get the content of a file by ID", + "operationId": "GetFile", + "parameters": [ + { + "description": "The ID of the file to get", + "in": "path", + "name": "fileId", + "required": true, + "type": "string", + "x-ms-summary": "File ID" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "The content of the file.", + "format": "binary", + "type": "string", + "x-ms-summary": "File Content" + } + } + }, + "summary": "Retrieve the content and metadata of a file using its ID", + "x-ms-visibility": "important" + } + }, + "/v2/folder/{folderId}": { + "delete": { + "description": "Delete a folder by ID", + "operationId": "DeleteFolder", + "parameters": [ + { + "description": "The ID of the folder to delete", + "in": "path", + "name": "folderId", + "required": true, + "type": "string", + "x-ms-summary": "Folder" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "deleted": { + "type": "boolean" + } + }, + "type": "object" + } + } + }, + "summary": "Delete a target folder using its ID", + "x-ms-visibility": "important" + }, + "get": { + "description": "Gets a folder by ID from the Huddle API", + "operationId": "GetFolder", + "parameters": [ + { + "description": "The ID of the folder to get", + "in": "path", + "name": "folderId", + "required": true, + "type": "string", + "x-ms-summary": "Folder" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Folder" + } + } + }, + "summary": "Retrieve a folder by it's ID", + "x-ms-visibility": "internal" + }, + "post": { + "description": "Creates a new folder within the target folder", + "operationId": "CreateFolder", + "parameters": [ + { + "description": "The ID of the folder in which the new one will be created", + "in": "path", + "name": "folderId", + "required": true, + "type": "string", + "x-ms-summary": "Folder" + }, + { + "in": "body", + "name": "requestBody", + "schema": { + "$ref": "#/definitions/FolderInput" + } + } + ], + "responses": { + "201": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Folder" + } + } + }, + "summary": "Create a new subfolder" + } + }, + "/v2/folder/{folderId}/children": { + "get": { + "description": "Lists the child folders contained within the target folder", + "operationId": "GetChildFolders", + "parameters": [ + { + "description": "The ID of the parent folder", + "in": "path", + "name": "folderId", + "required": true, + "type": "string", + "x-ms-summary": "Folder" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "items": { + "$ref": "#/definitions/Folder" + }, + "type": "array" + } + } + }, + "summary": "Retrieve a list of all of the subfolders within a target folder", + "x-ms-visibility": "internal" + } + }, + "/v2/folder/{folderId}/upload": { + "post": { + "description": "Uploads a file to the target folder", + "operationId": "UploadFile", + "parameters": [ + { + "description": "The workspace where the file will be uploaded", + "in": "query", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-collection": "workspaces", + "value-path": "id", + "value-title": "title" + }, + "x-ms-summary": "Workspace" + }, + { + "description": "The folder to target for file upload", + "in": "path", + "name": "folderId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspacePaths", + "parameters": { + "workspaceId": { + "parameter": "workspaceId" + } + }, + "value-collection": "paths", + "value-path": "id", + "value-title": "path" + }, + "x-ms-summary": "Target Folder" + }, + { + "in": "body", + "name": "requestBody", + "schema": { + "$ref": "#/definitions/FileUpload" + } + } + ], + "responses": { + "201": { + "description": "OK", + "schema": { + "properties": { + "file": { + "$ref": "#/definitions/File" + } + }, + "type": "object" + } + } + }, + "summary": "Create and upload a new file to a target folder", + "x-ms-visibility": "important" + } + }, + "/v2/task/{taskId}/markComplete": { + "post": { + "description": "Update a task's status to completed", + "operationId": "MarkTaskComplete", + "parameters": [ + { + "description": "The ID of the task to mark as complete", + "in": "path", + "name": "taskId", + "required": true, + "type": "string", + "x-ms-summary": "Task ID" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Task" + } + } + }, + "summary": "Update a task's status to completed using it's ID", + "x-ms-visibility": "important" + } + }, + "/v2/workspace": { + "get": { + "description": "Get an array of available workspaces", + "operationId": "GetWorkspaces", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "workspaces": { + "items": { + "$ref": "#/definitions/Workspace" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "500": { + "$ref": "#/responses/500" + } + }, + "summary": "List available workspaces", + "x-ms-visibility": "internal" + } + }, + "/v2/workspace/{workspaceId}/paths": { + "get": { + "description": "Get two level depth path listing", + "operationId": "GetWorkspacePaths", + "parameters": [ + { + "in": "path", + "name": "workspaceId", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "paths": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "path": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "summary": "Get Workspace Paths", + "x-ms-visibility": "internal" + } + }, + "/v2/workspace/{workspaceId}/root": { + "get": { + "description": "Get the contents of the workspace root folder", + "operationId": "GetRootFolderContents", + "parameters": [ + { + "description": "The workspace to get the root folder of", + "in": "path", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-collection": "workspaces", + "value-path": "id", + "value-title": "title" + }, + "x-ms-summary": "Workspace" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "items": { + "$ref": "#/definitions/Folder" + }, + "type": "array" + } + } + }, + "summary": "Get the root folder contents of a workspace", + "x-ms-visibility": "internal" + } + }, + "/v2/workspace/{workspaceId}/task": { + "post": { + "description": "Creates a To-Do in a workspace", + "operationId": "CreateWorkspaceTask", + "parameters": [ + { + "description": "The workspace to create the task in", + "in": "path", + "name": "workspaceId", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetWorkspaces", + "value-collection": "workspaces", + "value-path": "id", + "value-title": "title" + }, + "x-ms-summary": "Workspace" + }, + { + "in": "body", + "name": "requestBody", + "schema": { + "$ref": "#/definitions/TaskInputs" + } + } + ], + "responses": { + "201": { + "description": "OK", + "schema": { + "properties": { + "id": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "summary": "Create a To-Do task in a target workspace", + "x-ms-visibility": "important" + } + } + }, + "produces": [ + "application/json" + ], + "responses": { + "500": { + "description": "Internal Error - Server process failed unexpectedly", + "schema": { + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "schemes": [ + "https" + ], + "security": [ + { + "oauth2_auth": [ + "Scope" + ] + } + ], + "securityDefinitions": { + "oauth2_auth": { + "authorizationUrl": "https://login.huddle.com/request", + "flow": "accessCode", + "scopes": { + "Scope": "Scope" + }, + "tokenUrl": "https://login.huddle.com/token", + "type": "oauth2" + } + }, + "swagger": "2.0", + "tags": [] +} diff --git a/certified-connectors/Huddle US/apiProperties.json b/certified-connectors/Huddle US/apiProperties.json new file mode 100644 index 000000000..9427c6286 --- /dev/null +++ b/certified-connectors/Huddle US/apiProperties.json @@ -0,0 +1,66 @@ +{ + "properties": { + "capabilities": [], + "connectionParameters": { + "token": { + "oAuthSettings": { + "clientId": "YOUR_CLIENT_ID", + "customParameters": { + "authorizationUrl": { + "value": "https://login.huddle.com/request" + }, + "refreshUrl": { + "value": "https://login.huddle.com/token" + }, + "tokenUrl": { + "value": "https://login.huddle.com/token" + } + }, + "identityProvider": "oauth2", + "properties": { + "IsFirstParty": "False" + }, + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "scopes": [ + "Scope" + ] + }, + "type": "oauthSetting" + } + }, + "iconBrandColor": "#55606d", + "publisher": "Huddle", + "stackOwner": "Huddle", + "policyTemplateInstances": [ + { + "parameters": { + "x-ms-apimTemplate-operationName": [ + "PollFolderForFileUpload" + ], + "x-ms-apimTemplateParameter.triggerConfig": { + "after": "@{triggerBody().files[0].created}" + }, + "x-ms-apimTemplateParameter.triggerDataPath": "@triggerBody().files" + }, + "templateId": "pollingtrigger", + "title": "PollingTriggerPolicy", + "type": "PollingTrigger" + }, + { + "parameters": { + "x-ms-apimTemplate-operationName": [ + "PollWorkspaceForNewApproval" + ], + "x-ms-apimTemplateParameter.triggerConfig": { + "after": "@{triggerBody().approvals[0].created}" + }, + "x-ms-apimTemplateParameter.triggerDataPath": "@triggerBody().approvals" + }, + "templateId": "pollingtrigger", + "title": "PollingTriggerPolicyForApprovals", + "type": "PollingTrigger" + } + ] + } +} diff --git a/certified-connectors/Huddle US/readme.md b/certified-connectors/Huddle US/readme.md new file mode 100644 index 000000000..085a36c64 --- /dev/null +++ b/certified-connectors/Huddle US/readme.md @@ -0,0 +1,30 @@ +# Huddle for US Gov and Healthcare +**US GOVERNMENT & HEALTHCARE VERSION** (Standard version is also available.) Huddle provides document collaboration & client engagement portals for Enterprise and Government clients and partners. This connector helps to automate your workflows for document storage, retrieval, task assignment, and customized notifications. + + +## Pre-requisites +You will need the following to proceed: +* A [Huddle for US Gov & Healthcare](https://huddle.com) account +* A Client ID for your OAuth App provided by Huddle Support +* A Microsoft Power Apps or Power Automate plan with custom connector feature +* The Power platform CLI tools + +## Supported Operations +The connector supports the following operations: +* ```Poll a folder for its most recent upload```: Triggers whenever a new file is added to a specified folder. +* ```Poll a workspace for new approval requests```: Triggers whenever a new approval request is added to a specified Workspace. +* ```Upload a file```: Uploads a file to the target folder. Includes automatic file type detection, with a broad set of types supported. +* ```Upload a text file```: Accepts raw input and adds to your account as a text file. +* ```Get file contents```: Retrieves a file by ID. +* ```Delete a folder```: Deletes a folder by ID. +* ```Create a new folder```: Creates a new folder or subfolder in the target folder. +* ```Create a task/To-Do```: Creates a task/to-do in the target workspace. +* ```Mark task as complete```: Marks a task as "Complete" by ID. + + +## Deployment instructions +Please use [these instructions](https://docs.microsoft.com/en-us/connectors/custom-connectors/paconn-cli) to deploy this connector as custom connector in Microsoft Power Automate and Power Apps + + +## Further Support +For further support, checkout our [support documentation](https://huddle.zendesk.com/hc/en-us) or [contact us](https://www.huddle.com/about/contact/) From 0e9ba0e4d10f179847ff6d5964e9154f3289a9a9 Mon Sep 17 00:00:00 2001 From: Roy Reinhorn Date: Thu, 15 Oct 2020 16:01:03 +0300 Subject: [PATCH 142/347] done --- custom-connectors/AzureAdIp/apiProperties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom-connectors/AzureAdIp/apiProperties.json b/custom-connectors/AzureAdIp/apiProperties.json index 4a682c206..020065dca 100644 --- a/custom-connectors/AzureAdIp/apiProperties.json +++ b/custom-connectors/AzureAdIp/apiProperties.json @@ -27,7 +27,7 @@ "value": "https://login.windows.net" }, "tenantId": { - "value": "5b5a146c-eba8-46af-96f8-e31b50d15a3f" + "value": "common" }, "resourceUri": { "value": "https://graph.microsoft.com/" From 8fa8a2ac94a42a512fc38bbb7e3b0b9aeee57676 Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Thu, 15 Oct 2020 16:52:00 -0400 Subject: [PATCH 143/347] mark body params as required --- .../apiDefinition.swagger.json | 183 ++++++++++++------ 1 file changed, 122 insertions(+), 61 deletions(-) diff --git a/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json b/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json index 0af85fde6..17cda5bf9 100644 --- a/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json +++ b/certified-connectors/Blackbaud Raiser's Edge NXT/apiDefinition.swagger.json @@ -86,7 +86,8 @@ "schema": { "$ref": "#/definitions/CommPrefApi.ConstituentConsentAdd" }, - "description": "An object that represents the consent record to create." + "description": "An object that represents the consent record to create.", + "required": true } ], "responses": { @@ -237,7 +238,8 @@ "schema": { "$ref": "#/definitions/CommPrefApi.ConstituentSolicitCodeAdd" }, - "description": "An object that represents the solicit code to create." + "description": "An object that represents the solicit code to create.", + "required": true } ], "responses": { @@ -286,7 +288,8 @@ "schema": { "$ref": "#/definitions/CommPrefApi.ConstituentSolicitCodeEdit" }, - "description": "An object that represents the properties of the solicit code to update." + "description": "An object that represents the properties of the solicit code to update.", + "required": true } ], "responses": { @@ -412,7 +415,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ActionAdd" }, - "description": "An object that represents the action to create." + "description": "An object that represents the action to create.", + "required": true } ], "responses": { @@ -497,7 +501,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ActionEdit" }, - "description": "An object that represents the properties of the action to update." + "description": "An object that represents the properties of the action to update.", + "required": true } ], "responses": { @@ -610,7 +615,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ActionAttachmentAdd" }, - "description": "An object that represents the attachment to create." + "description": "An object that represents the attachment to create.", + "required": true } ], "responses": { @@ -659,7 +665,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ActionAttachmentEdit" }, - "description": "An object that represents the properties of the attachment to update." + "description": "An object that represents the properties of the attachment to update.", + "required": true } ], "responses": { @@ -696,7 +703,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ActionCustomFieldAdd" }, - "description": "An object that represents the custom field to create." + "description": "An object that represents the custom field to create.", + "required": true } ], "responses": { @@ -745,7 +753,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ActionCustomFieldEdit" }, - "description": "An object that represents the properties of the custom field to update." + "description": "An object that represents the properties of the custom field to update.", + "required": true } ], "responses": { @@ -804,7 +813,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.AddressAdd" }, - "description": "An object that represents the address to create." + "description": "An object that represents the address to create.", + "required": true } ], "responses": { @@ -853,7 +863,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.AddressEdit" }, - "description": "An object that represents the properties of the address to update." + "description": "An object that represents the properties of the address to update.", + "required": true } ], "responses": { @@ -890,7 +901,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.AliasAdd" }, - "description": "An object that represents the alias to create." + "description": "An object that represents the alias to create.", + "required": true } ], "responses": { @@ -939,7 +951,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.AliasEdit" }, - "description": "An object that represents the properties of the alias to update." + "description": "An object that represents the properties of the alias to update.", + "required": true } ], "responses": { @@ -973,7 +986,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ConstituentCodeAdd" }, - "description": "An object that represents the constituent code to create." + "description": "An object that represents the constituent code to create.", + "required": true } ], "responses": { @@ -1022,7 +1036,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ConstituentCodeEdit" }, - "description": "An object that represents the properties of the constituent code to update." + "description": "An object that represents the properties of the constituent code to update.", + "required": true } ], "responses": { @@ -1253,7 +1268,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ConstituentEdit" }, - "description": "An object that represents the properties of the constituent to update." + "description": "An object that represents the properties of the constituent to update.", + "required": true } ], "responses": { @@ -1911,7 +1927,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ConstituentAttachmentAdd" }, - "description": "An object that represents the attachment to create." + "description": "An object that represents the attachment to create.", + "required": true } ], "responses": { @@ -1960,7 +1977,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ConstituentAttachmentEdit" }, - "description": "An object that represents the properties of the attachment to update." + "description": "An object that represents the properties of the attachment to update.", + "required": true } ], "responses": { @@ -1997,7 +2015,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ConstituentCustomFieldAdd" }, - "description": "An object that represents the custom field to create." + "description": "An object that represents the custom field to create.", + "required": true } ], "responses": { @@ -2046,7 +2065,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.ConstituentCustomFieldEdit" }, - "description": "An object that represents the properties of the custom field to update." + "description": "An object that represents the properties of the custom field to update.", + "required": true } ], "responses": { @@ -2206,7 +2226,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.NewDocumentInfo" }, - "description": "An object that represents the document to create." + "description": "An object that represents the document to create.", + "required": true } ], "responses": { @@ -2243,7 +2264,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.EducationAdd" }, - "description": "An object that represents the education to create." + "description": "An object that represents the education to create.", + "required": true } ], "responses": { @@ -2292,7 +2314,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.EducationEdit" }, - "description": "An object that represent properties of the education record to update." + "description": "An object that represent properties of the education record to update.", + "required": true } ], "responses": { @@ -2329,7 +2352,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.EmailAddressAdd" }, - "description": "An object that represents the email address to create." + "description": "An object that represents the email address to create.", + "required": true } ], "responses": { @@ -2378,7 +2402,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.EmailAddressEdit" }, - "description": "An object that represents the properties of the email address to update." + "description": "An object that represents the properties of the email address to update.", + "required": true } ], "responses": { @@ -2415,7 +2440,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.NoteAdd" }, - "description": "An object that represents the note to create." + "description": "An object that represents the note to create.", + "required": true } ], "responses": { @@ -2464,7 +2490,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.NoteEdit" }, - "description": "An object that represent properties of the note to update." + "description": "An object that represent properties of the note to update.", + "required": true } ], "responses": { @@ -2501,7 +2528,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.OnlinePresenceAdd" }, - "description": "An object that represents the online presence to create." + "description": "An object that represents the online presence to create.", + "required": true } ], "responses": { @@ -2550,7 +2578,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.OnlinePresenceEdit" }, - "description": "An object that represents the properties of the online presence to update." + "description": "An object that represents the properties of the online presence to update.", + "required": true } ], "responses": { @@ -2587,7 +2616,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.PhoneAdd" }, - "description": "An object that represents the phone to create." + "description": "An object that represents the phone to create.", + "required": true } ], "responses": { @@ -2636,7 +2666,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.PhoneEdit" }, - "description": "An object that represents the properties of the phone to update." + "description": "An object that represents the properties of the phone to update.", + "required": true } ], "responses": { @@ -2673,7 +2704,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.RatingAdd" }, - "description": "An object that represents the rating to create." + "description": "An object that represents the rating to create.", + "required": true } ], "responses": { @@ -2791,7 +2823,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.RelationshipEdit" }, - "description": "An object that represents the properties of the relationship to update." + "description": "An object that represents the properties of the relationship to update.", + "required": true } ], "responses": { @@ -2828,7 +2861,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.Virtual.IndividualAdd" }, - "description": "An object that represents the constituent to create." + "description": "An object that represents the constituent to create.", + "required": true } ], "responses": { @@ -2865,7 +2899,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.Virtual.IndividualRelationshipAdd" }, - "description": "An object that represents the relationship to create." + "description": "An object that represents the relationship to create.", + "required": true } ], "responses": { @@ -2905,7 +2940,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.Virtual.OrganizationAdd" }, - "description": "An object that represents the constituent to create." + "description": "An object that represents the constituent to create.", + "required": true } ], "responses": { @@ -2942,7 +2978,8 @@ "schema": { "$ref": "#/definitions/ConstituentApi.Virtual.OrganizationRelationshipAdd" }, - "description": "An object that represents the relationship to create." + "description": "An object that represents the relationship to create.", + "required": true } ], "responses": { @@ -3162,7 +3199,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.AppealAttachmentAdd" }, - "description": "An object that represents the attachment to create." + "description": "An object that represents the attachment to create.", + "required": true } ], "responses": { @@ -3211,7 +3249,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.AppealAttachmentEdit" }, - "description": "An object that represents the properties of the attachment to update." + "description": "An object that represents the properties of the attachment to update.", + "required": true } ], "responses": { @@ -3248,7 +3287,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.AppealCustomFieldAdd" }, - "description": "An object that represents the custom field to create." + "description": "An object that represents the custom field to create.", + "required": true } ], "responses": { @@ -3297,7 +3337,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.AppealCustomFieldEdit" }, - "description": "An object that represents the properties of the custom field to update." + "description": "An object that represents the properties of the custom field to update.", + "required": true } ], "responses": { @@ -3536,7 +3577,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.CampaignAttachmentAdd" }, - "description": "An object that represents the attachment to create." + "description": "An object that represents the attachment to create.", + "required": true } ], "responses": { @@ -3585,7 +3627,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.CampaignAttachmentEdit" }, - "description": "An object that represents the properties of the attachment to update." + "description": "An object that represents the properties of the attachment to update.", + "required": true } ], "responses": { @@ -3622,7 +3665,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.CampaignCustomFieldAdd" }, - "description": "An object that represents the custom field to create." + "description": "An object that represents the custom field to create.", + "required": true } ], "responses": { @@ -3671,7 +3715,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.CampaignCustomFieldEdit" }, - "description": "An object that represents the properties of the custom field to update." + "description": "An object that represents the properties of the custom field to update.", + "required": true } ], "responses": { @@ -3910,7 +3955,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.FundAttachmentAdd" }, - "description": "An object that represents the attachment to create." + "description": "An object that represents the attachment to create.", + "required": true } ], "responses": { @@ -3959,7 +4005,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.FundAttachmentEdit" }, - "description": "An object that represents the properties of the attachment to update." + "description": "An object that represents the properties of the attachment to update.", + "required": true } ], "responses": { @@ -3996,7 +4043,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.FundCustomFieldAdd" }, - "description": "An object that represents the custom field to create." + "description": "An object that represents the custom field to create.", + "required": true } ], "responses": { @@ -4045,7 +4093,8 @@ "schema": { "$ref": "#/definitions/FundraisingApi.FundCustomFieldEdit" }, - "description": "An object that represents the properties of the custom field to update." + "description": "An object that represents the properties of the custom field to update.", + "required": true } ], "responses": { @@ -4224,7 +4273,8 @@ "schema": { "$ref": "#/definitions/GiftApi.AcknowledgementEdit" }, - "description": "An object that represents the properties of the gift acknowledgement to update." + "description": "An object that represents the properties of the gift acknowledgement to update.", + "required": true } ], "responses": { @@ -4270,7 +4320,8 @@ "schema": { "$ref": "#/definitions/GiftApi.ReceiptEdit" }, - "description": "An object that represents the properties of the gift receipt to update." + "description": "An object that represents the properties of the gift receipt to update.", + "required": true } ], "responses": { @@ -4601,7 +4652,8 @@ "schema": { "$ref": "#/definitions/GiftApi.GiftAttachmentAdd" }, - "description": "An object that represents the attachment to create." + "description": "An object that represents the attachment to create.", + "required": true } ], "responses": { @@ -4650,7 +4702,8 @@ "schema": { "$ref": "#/definitions/GiftApi.GiftAttachmentEdit" }, - "description": "An object that represents the properties of the attachment to update." + "description": "An object that represents the properties of the attachment to update.", + "required": true } ], "responses": { @@ -4687,7 +4740,8 @@ "schema": { "$ref": "#/definitions/GiftApi.GiftCustomFieldAdd" }, - "description": "An object that represents the custom field to create." + "description": "An object that represents the custom field to create.", + "required": true } ], "responses": { @@ -4736,7 +4790,8 @@ "schema": { "$ref": "#/definitions/GiftApi.GiftCustomFieldEdit" }, - "description": "An object that represents the properties of the custom field to update." + "description": "An object that represents the properties of the custom field to update.", + "required": true } ], "responses": { @@ -4905,7 +4960,8 @@ "schema": { "$ref": "#/definitions/OpportunityApi.OpportunityAdd" }, - "description": "An object that represents the opportunity to create." + "description": "An object that represents the opportunity to create.", + "required": true } ], "responses": { @@ -4990,7 +5046,8 @@ "schema": { "$ref": "#/definitions/OpportunityApi.OpportunityEdit" }, - "description": "An object that represents the properties of the opportunity to update." + "description": "An object that represents the properties of the opportunity to update.", + "required": true } ], "responses": { @@ -5103,7 +5160,8 @@ "schema": { "$ref": "#/definitions/OpportunityApi.OpportunityAttachmentAdd" }, - "description": "An object that represents the attachment to create." + "description": "An object that represents the attachment to create.", + "required": true } ], "responses": { @@ -5152,7 +5210,8 @@ "schema": { "$ref": "#/definitions/OpportunityApi.OpportunityAttachmentEdit" }, - "description": "An object that represents the properties of the attachment to update." + "description": "An object that represents the properties of the attachment to update.", + "required": true } ], "responses": { @@ -5189,7 +5248,8 @@ "schema": { "$ref": "#/definitions/OpportunityApi.OpportunityCustomFieldAdd" }, - "description": "An object that represents the custom field to create." + "description": "An object that represents the custom field to create.", + "required": true } ], "responses": { @@ -5238,7 +5298,8 @@ "schema": { "$ref": "#/definitions/OpportunityApi.OpportunityCustomFieldEdit" }, - "description": "An object that represents the properties of the custom field to update." + "description": "An object that represents the properties of the custom field to update.", + "required": true } ], "responses": { From a56136dc1fa1687d690ac67c8bca9e77c638fd03 Mon Sep 17 00:00:00 2001 From: Nicholas Hance Date: Fri, 16 Oct 2020 19:33:05 -0400 Subject: [PATCH 144/347] Adds Power Form 7 connector (#513) * Gravty Forms by reenhanced initial release * Update readme.md for expectations * Adds Power Form 7 --- .../Power Form 7/apiDefinition.swagger.json | 326 ++++++++++++++++++ .../Power Form 7/apiProperties.json | 23 ++ certified-connectors/Power Form 7/intro.md | 19 + 3 files changed, 368 insertions(+) create mode 100644 certified-connectors/Power Form 7/apiDefinition.swagger.json create mode 100644 certified-connectors/Power Form 7/apiProperties.json create mode 100644 certified-connectors/Power Form 7/intro.md diff --git a/certified-connectors/Power Form 7/apiDefinition.swagger.json b/certified-connectors/Power Form 7/apiDefinition.swagger.json new file mode 100644 index 000000000..1aebdde9d --- /dev/null +++ b/certified-connectors/Power Form 7/apiDefinition.swagger.json @@ -0,0 +1,326 @@ +{ + "consumes": [], + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Power Form 7", + "description": "Power Form 7 connects Contact Form 7 to your flows. Once you install and configure the Power Form 7 WordPress plugin, all of your forms will be available as triggers or for submission.", + "contact": { + "name": "Reenhanced Team", + "url": "https://www.reenhanced.com/products/power-form-7", + "email": "support@reenhanced.com" + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.reenhanced.com/" + }, + { + "propertyName": "Privacy Policy", + "propertyValue": "https://reenhanced.com/privacy/" + }, + { + "propertyName": "Categories", + "propertyValue": "Website" + } + ], + "host": "we.buildbettersoftware.com", + "basePath": "/pf7", + "responses": { + "403": { + "schema": {}, + "description": "Unauthorized" + }, + "429": { + "schema": {}, + "description": "Throttled" + }, + "500": { + "schema": {}, + "description": "Server Error" + } + }, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "License-Authorization" + } + }, + "schemes": [ + "https" + ], + "produces": [], + "parameters": { + "wp_siteurl__in_header": { + "x-ms-summary": "Wordpress Site URL", + "x-ms-dynamic-values": { + "operationId": "GetDomains", + "value-path": "name", + "value-title": "name" + }, + "required": true, + "in": "header", + "name": "WP_SITEURL", + "description": "Wordpress Site Address (URL) found in Settings > General", + "x-ms-visibility": "important", + "type": "string" + }, + "form_id__in_path": { + "x-ms-summary": "Contact Form 7 Form", + "x-ms-dynamic-values": { + "parameters": { + "WP_SITEURL": { + "parameter": "WP_SITEURL" + } + }, + "operationId": "GetCF7Forms", + "value-path": "id", + "value-title": "title" + }, + "required": true, + "in": "path", + "name": "form_id", + "description": "Contact Form 7 form", + "x-ms-visibility": "important", + "x-ms-url-encoding": "single", + "type": "string" + } + }, + "security": [ + { + "API Key": [] + } + ], + "definitions": { + "formSchema": { + "x-ms-dynamic-properties": { + "itemValuePath": "schema", + "parameters": { + "form_id": { + "parameterReference": "form_id" + }, + "WP_SITEURL": { + "parameterReference": "WP_SITEURL" + } + }, + "operationId": "GetFormSchema" + }, + "x-ms-dynamic-schema": { + "parameters": { + "form_id": { + "parameter": "form_id" + }, + "WP_SITEURL": { + "parameter": "WP_SITEURL" + } + }, + "operationId": "GetFormSchema", + "value-path": "schema" + }, + "type": "object", + "properties": {} + } + }, + "paths": { + "/proxy/power-form-7/v1/webhooks/{form_id}": { + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/formSchema" + }, + "description": "Form data" + }, + "post": { + "summary": "When a Contact Form 7 form is submitted", + "consumes": [ + "application/json" + ], + "responses": { + "201": { + "description": "OK" + }, + "403": { + "schema": {}, + "description": "Unauthorized" + } + }, + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/wp_siteurl__in_header" + }, + { + "$ref": "#/parameters/form_id__in_path" + }, + { + "required": true, + "schema": { + "required": [ + "callback_url" + ], + "type": "object", + "properties": { + "callback_url": { + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "type": "string" + } + } + }, + "in": "body", + "name": "callback_url" + } + ], + "x-ms-visibility": "important", + "operationId": "CreateWebhook", + "description": "Fires when a Contact Form 7 form is submitted successfully" + } + }, + "/proxy/contact-form-7/v1/contact-forms/{form_id}/feedback": { + "post": { + "summary": "Submit a Contact Form 7 form", + "consumes": [ + "multipart/form-data" + ], + "responses": { + "200": { + "description": "OK" + }, + "400": { + "description": "Bad Request" + } + }, + "parameters": [ + { + "$ref": "#/parameters/wp_siteurl__in_header" + }, + { + "$ref": "#/parameters/form_id__in_path" + }, + { + "required": true, + "schema": { + "$ref": "#/definitions/formSchema" + }, + "in": "body", + "name": "query" + } + ], + "x-ms-visibility": "important", + "operationId": "SubmitForm", + "description": "Submit a Contact Form 7 form" + } + }, + "/domains": { + "get": { + "summary": "(private) Get list of domains", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "schema": { + "items": { + "type": "object", + "x-ms-dynamic-list": { + "itemTitlePath": "name", + "itemValuePath": "name", + "operationId": "GetDomains" + }, + "properties": { + "name": { + "type": "string" + }, + "id": { + "format": "int32", + "type": "integer" + } + } + }, + "type": "array" + }, + "description": "List of forms" + } + }, + "x-ms-visibility": "internal", + "operationId": "GetDomains", + "description": "Returns licensed domains" + } + }, + "/proxy/contact-form-7/v1/contact-forms": { + "get": { + "summary": "Get Contact Form 7 forms", + "responses": { + "200": { + "schema": { + "items": { + "type": "object", + "properties": { + "slug": { + "type": "string", + "description": "slug" + }, + "locale": { + "type": "string", + "description": "locale" + }, + "id": { + "format": "int32", + "type": "integer", + "description": "id" + }, + "title": { + "x-ms-summary": "Form Name", + "type": "string", + "description": "title" + } + } + }, + "type": "array" + }, + "description": "200" + }, + "403": { + "schema": {}, + "description": "Unauthorized" + } + }, + "parameters": [ + { + "$ref": "#/parameters/wp_siteurl__in_header" + } + ], + "x-ms-visibility": "important", + "operationId": "GetCF7Forms", + "description": "Gets a list of all Contact Form 7 forms" + } + }, + "/proxy/power-form-7/v1/forms/{form_id}": { + "get": { + "summary": "(private) Retrieve form schema", + "responses": { + "200": { + "description": "OK" + }, + "403": { + "schema": {}, + "description": "Unauthorized" + } + }, + "parameters": [ + { + "$ref": "#/parameters/wp_siteurl__in_header" + }, + { + "$ref": "#/parameters/form_id__in_path" + } + ], + "x-ms-visibility": "internal", + "operationId": "GetFormSchema", + "description": "Returns the schema for the specified form" + } + } + }, + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/Power Form 7/apiProperties.json b/certified-connectors/Power Form 7/apiProperties.json new file mode 100644 index 000000000..463d77e4f --- /dev/null +++ b/certified-connectors/Power Form 7/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "License Key", + "description": "The License Key for this api", + "tooltip": "Provide your License Key", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#000000", + "capabilities": [], + "publisher": "Reenhanced LLC", + "stackOwner": "Rock Lobster LLC" + } +} \ No newline at end of file diff --git a/certified-connectors/Power Form 7/intro.md b/certified-connectors/Power Form 7/intro.md new file mode 100644 index 000000000..a21aaa1a6 --- /dev/null +++ b/certified-connectors/Power Form 7/intro.md @@ -0,0 +1,19 @@ +Easily connect your Contact Form 7 submissions to Power Automate using this connector in combination with the Power Form 7 Wordpress plugin by Reenhanced. + +## Prerequisites + +To use this connector, you'll need to install the Power Form 7 plugin into your Wordpress site which already has Contact Form 7. + +Once installed, you will need to configure a user that will be used by Power Automate, enter your license key, and enable the plugin. + +## How to get credentials + +You can download the wordpress plugin and purchase a license to use from here: https://reenhanced.com/products/power-form-7/ + +You will need a valid license to use this connector. + +## Known issues and limitations + +Files are not yet supported. + +Free Text values for dropdowns and other option sets are not supported. From 470641b60a9af12a2d62d15e2ddf9a2175f4f416 Mon Sep 17 00:00:00 2001 From: Encodian <45834050+Encodian@users.noreply.github.com> Date: Sat, 17 Oct 2020 00:33:37 +0100 Subject: [PATCH 145/347] Encodian October 20 Release (#515) * Encodian May 20 Release * Minor Updates * Minor Updates * Encodian July 20 Relase - Amends * July 20 Update * Two new actions * Updated * Updated category property value as requested * Updated ReadMe * Encodian Sept 20 Release * Encodian Sept 20 Release * Encodian Sept 2 Release * Oct 20 Release * MS Pull Request Mods - Oct 20 * Encodian Oct 20 Release --- certified-connectors/Encodian/Readme.md | 6 +- .../Encodian/apiDefinition.swagger.json | 441 +++++++++++++++++- 2 files changed, 444 insertions(+), 3 deletions(-) diff --git a/certified-connectors/Encodian/Readme.md b/certified-connectors/Encodian/Readme.md index 4a695f350..70126eb8a 100644 --- a/certified-connectors/Encodian/Readme.md +++ b/certified-connectors/Encodian/Readme.md @@ -54,6 +54,9 @@ Split a PDF Document into multiple PDF Documents - https://support.encodian.com/ ### Split PDF by Text Split a PDF Document into multiple PDF Documents using Text Search or Regular Expressions - https://support.encodian.com/hc/en-gb/articles/360012726397-Split-PDF-by-Text +### Split PDF by Barcode +Split a PDF Document into multiple PDF Documents using barcodes - https://support.encodian.com/hc/en-gb/articles/360013629457-Split-PDF-by-Barcode + ### Convert Word to PDF Form Convert the Word document provided (Legacy Form Controls Only) to a PDF form document. - https://support.encodian.com/hc/en-gb/articles/360012307133-Convert-Word-to-PDF-Form @@ -162,5 +165,6 @@ Convert Microsoft Excel documents to another document format - https://support.e ### Create HMAC Create a Hash-based message authentication code (HMAC) using a secret key - https://support.encodian.com/hc/en-gb/articles/360012782058-Create-HMAC - +### Create Hash Code +Create a Hashcode / message digest - https://support.encodian.com/hc/en-gb/articles/360013996077-Create-Hash-Code diff --git a/certified-connectors/Encodian/apiDefinition.swagger.json b/certified-connectors/Encodian/apiDefinition.swagger.json index 59be7a84f..e14964d1b 100644 --- a/certified-connectors/Encodian/apiDefinition.swagger.json +++ b/certified-connectors/Encodian/apiDefinition.swagger.json @@ -3,7 +3,7 @@ "info": { "version": "v1.0", "title": "Encodian", - "description": "Enhanced document format conversion, OCR, watermarking, data extraction, redaction + much more.", + "description": "Enhanced document format conversion, OCR, watermarking, data extraction, redaction + much more. ", "termsOfService": "https://support.encodian.com/hc/en-gb/articles/360010642813-Terms-of-Service", "contact": { "name": "Encodian Support", @@ -664,6 +664,51 @@ "description": "Split a PDF Document by text into multiple PDF Documents - https://support.encodian.com/hc/en-gb/articles/360012726397-Split-PDF-by-Text" } }, + "/api/v1/Core/SplitPdfByBarcode": { + "post": { + "tags": [ + "Core" + ], + "operationId": "SplitPdfByBarcode", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "operation", + "in": "body", + "description": "Request object, refer to schema definition: DtoSplitPdfByBarcode", + "required": false, + "schema": { + "$ref": "#/definitions/DtoSplitPdfByBarcode" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseSplitPdfByBarcode" + } + }, + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/DtoResponseSplitPdfByBarcode" + } + }, + "400": { + "description": "Bad request" + } + }, + "x-ms-visibility": "important", + "summary": "Split PDF by Barcode", + "description": "Split a PDF Document by Barcode, returning multiple PDF Documents - https://support.encodian.com/hc/en-gb/articles/360013629457-Split-PDF-by-Barcode" + } + }, "/api/v1/Core/WordToPdfForm": { "post": { "tags": [ @@ -2328,6 +2373,50 @@ "description": "Create a Hash-based message authentication code (HMAC) using a secret key - https://support.encodian.com/hc/en-gb/articles/360012782058-Create-HMAC" } }, + "/api/v1/Core/CreateHashCode": { + "post": { + "tags": [ + "Core" + ], + "operationId": "CreateHashCode", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "operation", + "in": "body", + "required": false, + "schema": { + "$ref": "#/definitions/DtoCreateHashCode" + } + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseCreateHashCode" + } + }, + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/DtoResponseCreateHashCode" + } + }, + "400": { + "description": "Bad request" + } + }, + "x-ms-visibility": "important", + "summary": "Create Hash Code", + "description": "Create a hashcode for the string provided - https://support.encodian.com/hc/en-gb/articles/360013996077-Create-Hash-Code" + } + }, "/api/v1/DynamicSchema/GetDynamicSchemaCreateBarcode": { "get": { "tags": [ @@ -3045,6 +3134,49 @@ "summary": "Get an Operation Status for CreateHMAC", "description": "Retrieve the operation status of a CreateHMAC operation for the Operation ID provided." } + }, + "/api/v1/Mgmt/GetOperationStatusCreateHashCode": { + "get": { + "tags": [ + "Mgmt" + ], + "operationId": "GetOperationStatusCreateHashCode", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "operationId", + "in": "query", + "description": "Retrieve the operation status of a GetOperationStatusCreateHashCode operation for the Operation ID provided.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseCreateHashCode" + } + }, + "202": { + "description": "Success", + "schema": { + "$ref": "#/definitions/DtoResponseCreateHashCode" + } + }, + "400": { + "description": "Bad Request" + } + }, + "x-ms-visibility": "internal", + "summary": "Get an Operation Status for CreateHashCode", + "description": "Retrieve the operation status of a CreateHashCode operation for the Operation ID provided." + } } }, "definitions": { @@ -5308,6 +5440,120 @@ } } }, + "DtoSplitPdfByBarcode": { + "required": [ + "fileName", + "splitPdfByBarcodeType", + "splitPdfByBarcodeAction" + ], + "type": "object", + "properties": { + "fileName": { + "type": "string", + "x-ms-summary": "Filename", + "description": "The filename of the source PDF file, the file extension is mandatory: 'file.pdf' and not 'file'" + }, + "fileContent": { + "format": "byte", + "type": "string", + "x-ms-summary": "File Content", + "description": "The file content of the PDF file" + }, + "splitPdfByBarcodeValue": { + "type": "string", + "x-ms-summary": "Barcode Value", + "description": "Optional - Specify a value for detecting a specific barcode(s)" + }, + "splitPdfByBarcodeType": { + "default": "AllInstances", + "enum": [ + "AllInstances", + "FirstInstant", + "LastInstant" + ], + "type": "string", + "x-ms-summary": "Split Configuration", + "description": "Select a split configuration" + }, + "splitPdfByBarcodeAction": { + "default": "SplitOn", + "enum": [ + "SplitOn", + "SplitAfter", + "SplitBefore", + "Remove" + ], + "type": "string", + "x-ms-summary": "Split Action", + "description": "Select a split action, whether to split before, after or remove the page containing the split value." + }, + "barcodeReadConfidence": { + "default": "Medium", + "enum": [ + "Low", + "Medium", + "High" + ], + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Confidence", + "description": "Set the confidence level for barcode detection" + } + } + }, + "DtoResponseSplitPdfByBarcode": { + "required": [ + "documents" + ], + "type": "object", + "properties": { + "documents": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/definitions/DocumentArray" + }, + "x-ms-visibility": "important", + "x-ms-summary": "Documents", + "description": "The array of documents split from the source PDF" + }, + "HttpStatusCode": { + "format": "int32", + "type": "integer", + "x-ms-visibility": "advanced", + "x-ms-summary": "HTTP Status Code", + "description": "The HTTP Status code for the response." + }, + "HttpStatusMessage": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "HTTP Status Message", + "description": "The HTTP Status message for the response." + }, + "OperationId": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Operation ID", + "description": "The unique ID assigned to this operation." + }, + "Errors": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "x-ms-visibility": "advanced", + "x-ms-summary": "Errors", + "description": "An array of error messages should an error occur." + }, + "Operation Status": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Operation Status", + "description": "Indicates whether the operation has completed, has been queued or has failed." + } + } + }, "DtoWordToPdfForm": { "required": [ "FileName", @@ -10455,6 +10701,20 @@ "x-ms-summary": "Worksheet Name", "description": "Specify the name of a specific worksheet" }, + "onePagePerSheet": { + "default": false, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "One Page Per Sheet", + "description": "Place all sheets into one page" + }, + "allColumnsInOnePagePerSheet": { + "default": true, + "type": "boolean", + "x-ms-visibility": "advanced", + "x-ms-summary": "All Columns in One Page Per Sheet Name", + "description": "Place each column of a sheet into its own page" + }, "removeDocumentMarkup": { "default": true, "type": "boolean", @@ -10538,7 +10798,19 @@ "type": "string", "x-ms-visibility": "important", "x-ms-summary": "Data", - "description": "Provide the input string to be computed" + "description": "Provide the input data to be computed" + }, + "cryptoInputDataType": { + "default": "TEXT", + "enum": [ + "TEXT", + "HEX", + "BASE64" + ], + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Data Type", + "description": "Set the data format for the input data provided." }, "key": { "type": "string", @@ -10546,6 +10818,18 @@ "x-ms-summary": "Key", "description": "Provide the key (secret) used to compute the hash-based message authentication code (HMAC)" }, + "cryptoKeyDataType": { + "default": "TEXT", + "enum": [ + "TEXT", + "HEX", + "BASE64" + ], + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Key Type", + "description": "Set the data format for the key provided." + }, "digestAlgorithm": { "default": "SHA256", "enum": [ @@ -10561,6 +10845,29 @@ "x-ms-summary": "Digest Algorithm ", "description": "Select the message digest algorithm" }, + "cryptoOutputDataType": { + "default": "HASH", + "enum": [ + "HASH", + "BASE64", + "HEX" + ], + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Output Type", + "description": "Set the data format for the HMAC generated." + }, + "case": { + "default": "Lower", + "enum": [ + "Lower", + "Upper" + ], + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Case", + "description": "Set the case applied to the computed value." + }, "encoding": { "default": "ASCII", "enum": [ @@ -10628,6 +10935,136 @@ } } }, + "DtoCreateHashCode": { + "required": [ + "data", + "digestAlgorithm" + ], + "type": "object", + "properties": { + "data": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Data", + "description": "Provide the input data to be computed" + }, + "cryptoInputDataType": { + "default": "TEXT", + "enum": [ + "TEXT", + "HEX", + "BASE64" + ], + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Data Type", + "description": "Set the data format for the input data provided." + }, + "digestAlgorithm": { + "default": "SHA256", + "enum": [ + "SHA1", + "SHA256", + "SHA384", + "SHA512", + "MD5", + "RIPEMD160" + ], + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Digest Algorithm ", + "description": "Select the message digest algorithm" + }, + "cryptoOutputDataType": { + "default": "HASH", + "enum": [ + "HASH", + "BASE64", + "HEX" + ], + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Output Type", + "description": "Set the data format for the hash code generated." + }, + "case": { + "default": "Lower", + "enum": [ + "Lower", + "Upper" + ], + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Case", + "description": "Set the case applied to the computed value." + }, + "encoding": { + "default": "ASCII", + "enum": [ + "UTF8", + "UTF7", + "UTF32", + "ASCII", + "Unicode", + "BigEndianUnicode", + "Default" + ], + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Encoding Type", + "description": "Select the encoding type." + } + } + }, + "DtoResponseCreateHashCode": { + "required": [ + "HashCode" + ], + "type": "object", + "properties": { + "HashCode": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Hash Code", + "description": "The computed Hash Code" + }, + "HttpStatusCode": { + "format": "int32", + "type": "integer", + "x-ms-visibility": "advanced", + "x-ms-summary": "HTTP Status Code", + "description": "The HTTP Status code for the response." + }, + "HttpStatusMessage": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "HTTP Status Message", + "description": "The HTTP Status message for the response." + }, + "OperationId": { + "type": "string", + "x-ms-visibility": "advanced", + "x-ms-summary": "Operation ID", + "description": "The unique ID assigned to this operation." + }, + "Errors": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "x-ms-visibility": "advanced", + "x-ms-summary": "Errors", + "description": "An array of error messages should an error occur." + }, + "Operation Status": { + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Operation Status", + "description": "Indicates whether the operation has completed, has been queued or has failed." + } + } + }, "DtoResponseMgmtGetSubscriptionStatus": { "type": "object", "properties": { From 3d7f5c5af6b9aabfe59c2a650b04c675b285a738 Mon Sep 17 00:00:00 2001 From: Paul van Gool Date: Fri, 16 Oct 2020 16:34:17 -0700 Subject: [PATCH 146/347] API updates to reflect latest HYAS Insight release. (#517) --- .../HYAS Insight/apiDefinition.swagger.json | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/certified-connectors/HYAS Insight/apiDefinition.swagger.json b/certified-connectors/HYAS Insight/apiDefinition.swagger.json index b14b6799a..84f227ece 100644 --- a/certified-connectors/HYAS Insight/apiDefinition.swagger.json +++ b/certified-connectors/HYAS Insight/apiDefinition.swagger.json @@ -462,7 +462,7 @@ "md5_count": { "type": "integer", "format": "int32", - "description": "The passive dns count." + "description": "The malware hash count related to the domain." } } } @@ -996,10 +996,6 @@ "wifi_bssid": { "type": "string", "description": "The BSSID (MAC address) of the wifi router that the device communicated through." - }, - "wifi_ssid": { - "type": "string", - "description": "The SSID (name) of the wifi network that the device communicated through." } } } @@ -1400,10 +1396,6 @@ }, "description": "Array of object, The phone number registrant contact in e164 format along with geo info." }, - "privacy_punch": { - "type": "boolean", - "description": "True if this record has additional information bypassing privacy protect." - }, "registrar": { "type": "string", "description": "The domain registrar." @@ -1840,4 +1832,4 @@ } ], "tags": [] -} \ No newline at end of file +} From cd393472f019ebd225b05184ae9bfdac51d93149 Mon Sep 17 00:00:00 2001 From: Sean Matthews Date: Mon, 19 Oct 2020 22:58:20 -0400 Subject: [PATCH 147/347] Update apiProperties.json (#519) --- certified-connectors/Huddle US/apiProperties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Huddle US/apiProperties.json b/certified-connectors/Huddle US/apiProperties.json index 9427c6286..b43bf436a 100644 --- a/certified-connectors/Huddle US/apiProperties.json +++ b/certified-connectors/Huddle US/apiProperties.json @@ -29,7 +29,7 @@ "type": "oauthSetting" } }, - "iconBrandColor": "#55606d", + "iconBrandColor": "#55606E", "publisher": "Huddle", "stackOwner": "Huddle", "policyTemplateInstances": [ From 467bda4e6ce3d2539b29fa2ee503063a420f4996 Mon Sep 17 00:00:00 2001 From: Paul van Gool Date: Mon, 19 Oct 2020 19:58:58 -0700 Subject: [PATCH 148/347] Update to reflect latest HYAS Insight APIs (#518) * API updates to reflect latest HYAS Insight release. * Forgot to update a few locations. --- .../HYAS Insight/apiDefinition.swagger.json | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/certified-connectors/HYAS Insight/apiDefinition.swagger.json b/certified-connectors/HYAS Insight/apiDefinition.swagger.json index 84f227ece..9cfd17df3 100644 --- a/certified-connectors/HYAS Insight/apiDefinition.swagger.json +++ b/certified-connectors/HYAS Insight/apiDefinition.swagger.json @@ -160,10 +160,6 @@ "wifi_bssid": { "type": "string", "description": "The BSSID (MAC address) of the wifi router that the device communicated through." - }, - "wifi_ssid": { - "type": "string", - "description": "The SSID (name) of the wifi network that the device communicated through." } } } @@ -1569,10 +1565,6 @@ }, "description": "Array of object, The phone number registrant contact in e164 format along with geo info." }, - "privacy_punch": { - "type": "boolean", - "description": "True if this record has additional information bypassing privacy protect." - }, "registrar": { "type": "string", "description": "The domain registrar." @@ -1746,10 +1738,6 @@ }, "description": "Array of object, The phone number registrant contact in e164 format along with geo info." }, - "privacy_punch": { - "type": "boolean", - "description": "True if this record has additional information bypassing privacy protect." - }, "registrar": { "type": "string", "description": "The domain registrar." From 60aa9e98023e5fbb4c54f9b1c2486ba09f891ee7 Mon Sep 17 00:00:00 2001 From: Paulius Podolskis Date: Tue, 20 Oct 2020 20:09:28 +0300 Subject: [PATCH 149/347] Dokobit Portal - webhooks & small notation fixes --- .../Dokobit Portal/apiDefinition.swagger.json | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/certified-connectors/Dokobit Portal/apiDefinition.swagger.json b/certified-connectors/Dokobit Portal/apiDefinition.swagger.json index fea730281..5d862e8e8 100644 --- a/certified-connectors/Dokobit Portal/apiDefinition.swagger.json +++ b/certified-connectors/Dokobit Portal/apiDefinition.swagger.json @@ -52,6 +52,12 @@ "asic" ] }, + "postback_url": { + "type": "string", + "description": "postback_url", + "x-ms-summary title": "postback_url", + "x-ms-visibility": "important" + }, "deadline": { "type": "string", "description": "Example: 2019-11-25T13:15:30Z", @@ -200,8 +206,8 @@ }, "token": { "type": "string", - "description": "signingtoken", - "title": "signingtoken" + "description": "token", + "title": "token" }, "signers": { "type": "array", @@ -210,7 +216,8 @@ "properties": { "token": { "type": "string", - "description": "token" + "description": "token", + "title": "signer.token" }, "first_name": { "type": "string", @@ -458,8 +465,8 @@ "properties": { "token": { "type": "string", - "description": "token", - "x-ms-summary title": "token" + "description": "signer.token", + "x-ms-summary title": "signer.token" }, "first_name": { "type": "string", @@ -654,7 +661,8 @@ "properties": { "token": { "type": "string", - "description": "token" + "description": "token", + "title": "signer.token" }, "name": { "type": "string", From 78fafce785661238f5421d776693cf693a111260 Mon Sep 17 00:00:00 2001 From: za3zilla Date: Tue, 20 Oct 2020 20:05:13 +0100 Subject: [PATCH 150/347] Expensya Connector PR (#516) * Add Expensya Connector Artifacts * update readme file * add x-ms-summary to swagger file * Update apiDefinition.swagger.json * Update color * update swagger description * fix apiProperties file * fix swagger description * fix alphanumeric comment * update description Co-authored-by: Yusuf Abid --- .../Expensya/apiDefinition.swagger.json | 10032 ++++++++++++++++ .../Expensya/apiProperties.json | 9 + certified-connectors/Expensya/readme.md | 20 + 3 files changed, 10061 insertions(+) create mode 100644 certified-connectors/Expensya/apiDefinition.swagger.json create mode 100644 certified-connectors/Expensya/apiProperties.json create mode 100644 certified-connectors/Expensya/readme.md diff --git a/certified-connectors/Expensya/apiDefinition.swagger.json b/certified-connectors/Expensya/apiDefinition.swagger.json new file mode 100644 index 000000000..53fbd9034 --- /dev/null +++ b/certified-connectors/Expensya/apiDefinition.swagger.json @@ -0,0 +1,10032 @@ +{ + "swagger": "2.0", + "info": { + "title": "Expensya Management", + "version": "1.0", + "description": "Expensya is a leading Spend Management solution in Europe, and this connector allows to build on top of our technology, automate integration to third party systems, and extend existing features.", + "contact": { + "name": "Expensya", + "url": "https://www.expensya.com", + "email": "support@expensya.com" + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.expensya.com" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.expensya.com/en/tou" + }, + { + "propertyName": "Categories", + "propertyValue": "AI;Website" + } + ], + "host": "pubapi.expensya.com", + "basePath": "/Api.svc", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/api/expense/{expenseId}/image": { + "get": { + "description": "This API returns the image of the expense as Stream. The image can be jpg, jpeg, png or pdf. The type of the image is mentioned in the expense object property \"FileType\".", + "operationId": "GetExpenseImage", + "summary": "Get Expense Image", + "tags": [ + "Image" + ], + "parameters": [ + { + "name": "expenseId", + "in": "path", + "description": "Format - guid. Unique identifier of the expense.", + "x-ms-summary": "Format - guid. Unique identifier of the expense.", + "required": true, + "type": "string" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/ApiExpenseExpenseIdImageGet200ApplicationJsonResponse" + } + }, + "400": { + "description": "Invalid input." + }, + "401": { + "description": "The expensya token is invalid or has expired." + }, + "403": { + "description": "The expensya token has no right to get the image." + }, + "404": { + "description": "No image was found." + } + } + } + }, + "/api/export/expenses/{exportId}/": { + "get": { + "description": "Export expenses on specified export format based on given filters.", + "operationId": "ExportExpenses", + "summary": "Export Expense", + "tags": [ + "Export" + ], + "parameters": [ + { + "name": "exportId", + "in": "path", + "description": "Format - guid. Unique identifier of the export.", + "x-ms-summary": "Format - guid. Unique identifier of the export.", + "required": true, + "type": "string" + }, + { + "name": "reportId", + "in": "query", + "description": "Filter with the unique identifier of the report related to the expenses.", + "x-ms-summary": "Filter with the unique identifier of the report related to the expenses.", + "type": "string" + }, + { + "name": "categoryId", + "in": "query", + "description": "Filter with the unique identifier of the category related to the expenses.", + "x-ms-summary": "Filter with the unique identifier of the category related to the expenses.", + "type": "string" + }, + { + "name": "expenseName", + "in": "query", + "description": "Filter with the name of the expense.", + "x-ms-summary": "Filter with the name of the expense.", + "type": "string" + }, + { + "name": "startDate", + "in": "query", + "description": "Filter with the start date based on dateFilterType (as date-time in RFC3339).", + "x-ms-summary": "Filter with the start date based on dateFilterType (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "endDate", + "in": "query", + "description": "Filter with the end date based on dateFilterType (as date-time in RFC3339).", + "x-ms-summary": "Filter with the end date based on dateFilterType (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "expenseStates", + "in": "query", + "description": "List of expenses state seperated by ',' : Validated = 3 ValidatedByAccountant = 4 Rejected = 99.", + "x-ms-summary": "List of expenses state seperated by ','", + "type": "string" + }, + { + "name": "reportStates", + "in": "query", + "description": "List of reports state related to the expenses seperated by ',' : Active = 0 Submitted = 2 Rejected = 3 Validated = 4 Closed = 5 ValidatedAndExported = 6", + "x-ms-summary": "List of reports state related to the expenses seperated by ','", + "type": "string" + }, + { + "name": "userIds", + "in": "query", + "description": "List of unique identifiers of the expenses' owners seperated by ','.", + "x-ms-summary": "List of unique identifiers of the expenses' owners seperated by ','.", + "type": "string" + }, + { + "name": "userMail", + "in": "query", + "description": "List of e-mails of the expenses' owners seperated by ','.", + "x-ms-summary": "List of e-mails of the expenses' owners seperated by ','.", + "type": "string" + }, + { + "name": "reportIds", + "in": "query", + "description": "List of unique identifiers of the reports related tp expenses by ','.", + "x-ms-summary": "List of unique identifiers of the reports related tp expenses by ','.", + "type": "string" + }, + { + "name": "expenseIds", + "in": "query", + "description": "List of unique identifiers of the expense seperated by ','.", + "x-ms-summary": "List of unique identifiers of the expense seperated by ','.", + "type": "string" + }, + { + "name": "reportName", + "in": "query", + "description": "Filter with the report name related to the expenses.", + "x-ms-summary": "Filter with the report name related to the expenses.", + "type": "string" + }, + { + "name": "reportIdShort", + "in": "query", + "description": "Filter with the internal identifier of the expenses' report. ", + "x-ms-summary": "Filter with the internal identifier of the expenses' report. ", + "type": "string" + }, + { + "name": "dateFilterType", + "in": "query", + "description": "Format - enum. Indicates the target of date filters: InvoiceDate = 1 ValidationDate = 2 AccountingValidationDate = 3 SubmissionDate = 4 CreationDate = 6.", + "x-ms-summary": "Format - enum. Indicates the target of date filters.", + "type": "integer" + }, + { + "name": "payId", + "in": "query", + "description": "Filter with the serial of the expense's owner.", + "x-ms-summary": "Filter with the serial of the expense's owner.", + "type": "string" + }, + { + "name": "payId2", + "in": "query", + "description": "Filter with the first analytical axis of the owner of the expense.", + "x-ms-summary": "Filter with the first analytical axis of the owner of the expense.", + "type": "string" + }, + { + "name": "payId3", + "in": "query", + "description": "Filter with the second analytical axis of the owner of the expense.", + "x-ms-summary": "Filter with the second analytical axis of the owner of the expense.", + "type": "string" + }, + { + "name": "accountingPeriod", + "in": "query", + "description": "Filter with the accounting period of the expenses.", + "x-ms-summary": "Filter with the accounting period of the expenses.", + "type": "string" + }, + { + "name": "includeReceipts", + "in": "query", + "description": "Indicates if the expenses receipts should be added to the export.", + "x-ms-summary": "Indicates if the expenses receipts should be added to the export.", + "type": "boolean" + }, + { + "name": "expenseUseTypes", + "in": "query", + "description": "List of expense use type seperated by ',' : Invoice = 1 Advance = 2 Purchase = 4 Subscription = 8 MissionOrder = 16.", + "x-ms-summary": "List of expense use type seperated by ','", + "type": "integer" + }, + { + "name": "archiveExpenses", + "in": "query", + "description": "Indicates if the reports related to the expenses will be archived, applied only for expenses related to validated or validatedAndExported reports.", + "x-ms-summary": "Indicates if the reports related to the expenses will be archived.", + "type": "string" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultExportResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/export/report/{reportId}/pdf/": { + "get": { + "description": "Export report as pdf.", + "operationId": "PrintMission", + "summary": "Export Report", + "tags": [ + "Export" + ], + "parameters": [ + { + "name": "reportId", + "in": "path", + "description": "Format - guid. Unique identifier of the report.", + "x-ms-summary": "Format - guid. Unique identifier of the report.", + "required": true, + "type": "string" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultExportResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/exports/": { + "get": { + "description": "List of export formats.", + "operationId": "ExportFormats", + "summary": "Get Export Formats", + "tags": [ + "Export" + ], + "parameters": [ + { + "name": "isForExpenses", + "in": "query", + "description": "Bring only expenses export formats, if false brings report export formats.", + "x-ms-summary": "Bring only expenses export formats.", + "type": "boolean" + }, + { + "name": "exportType", + "in": "query", + "description": "Format - enum. Indicates the type of export: InvoiceAndPurchase = 1 Advance = 2 Balance = 4.", + "x-ms-summary": "Format - enum. Indicates the type of export.", + "type": "integer" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultListExportFormatResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/projects/": { + "post": { + "description": "Add new projects to Expensya.", + "operationId": "AddProjects", + "summary": "Add Projects", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + }, + { + "name": "addOrUpdateProjectInputArray", + "in": "body", + "schema": { + "$ref": "#/definitions/AddOrUpdateProjectInputArray" + }, + "description": "List of project inputs to add." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultListAddOrUpdateEntityResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + }, + "put": { + "description": "Update projects already added to Expensya", + "operationId": "UpdateProjects", + "summary": "Update Projects", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + }, + { + "name": "addOrUpdateProjectInputArray", + "in": "body", + "schema": { + "$ref": "#/definitions/AddOrUpdateProjectInputArray" + }, + "description": "List of project inputs to update." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultListAddOrUpdateEntityResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/receipt/": { + "post": { + "description": "Add a new expense to your expensya account with a receipt.", + "operationId": "AddReciept", + "summary": "Add Reciept", + "tags": [ + "Expenses" + ], + "parameters": [ + { + "name": "addReceiptInput", + "in": "body", + "schema": { + "$ref": "#/definitions/AddReceiptInput" + }, + "description": "Input of the receipt to add." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/revokeUserToken/": { + "get": { + "description": "Revoke your user token.", + "operationId": "RevokeUserToken", + "summary": "Revoke Token", + "tags": [ + "Token" + ], + "parameters": [ + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/{validatorMail}/reports/": { + "get": { + "description": "Get the list of validator's reports with paging.", + "operationId": "ValidatorReports", + "summary": "Get Validator Reports", + "tags": [ + "Reports" + ], + "parameters": [ + { + "name": "validatorMail", + "in": "path", + "description": "The e-mail of the report's validator.", + "x-ms-summary": "The e-mail of the report's validator.", + "required": true, + "type": "string" + }, + { + "name": "reportName", + "in": "query", + "description": "Filter with the name of the report.", + "x-ms-summary": "Filter with the name of the report.", + "type": "string" + }, + { + "name": "reportStartDate", + "in": "query", + "description": "Filter with the start date based on dateFilterType. Format - date-time (as date-time in RFC3339).", + "x-ms-summary": "Filter with the start date based on dateFilterType (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "reportEndDate", + "in": "query", + "description": "Filter with the end date based on dateFilterType. Format - date-time (as date-time in RFC3339).", + "x-ms-summary": "Filter with the end date based on dateFilterType (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "reportStates", + "in": "query", + "description": "List of report states seperated by ',' : Active = 0 Submitted = 2 Rejected = 3 Closed = 5 ValidatedAndExported = 6 Reimbursed = 7 PreSubmitted = 8 InValidation = 50.", + "x-ms-summary": "List of report states seperated by ','.", + "type": "string" + }, + { + "name": "reportIdShort", + "in": "query", + "description": "Filter with the report inetrnal identifier.", + "x-ms-summary": "Filter with the report inetrnal identifier.", + "type": "string" + }, + { + "name": "ownerId", + "in": "query", + "description": "Filter with the unique identifier of the report's owner.", + "x-ms-summary": "Filter with the unique identifier of the report's owner.", + "type": "string" + }, + { + "name": "ownerPayId2", + "in": "query", + "description": "Filter with the serial of the report's owner.", + "x-ms-summary": "Filter with the serial of the report's owner.", + "type": "string" + }, + { + "name": "projectId", + "in": "query", + "description": "Filter with the unique identifier of the project that the report is linked to.", + "x-ms-summary": "Filter with the unique identifier of the project that the report is linked to.", + "type": "string" + }, + { + "name": "dateFilterType", + "in": "query", + "description": "Format - enum. Indicates the target of date filters: InvoiceDate = 1 ValidationDate = 2 AccountingValidationDate = 3 SubmissionDate = 4 PurchaseAccountingValidationDate = 5 CreationDate = 6", + "x-ms-summary": "Format - enum. Indicates the target of date filters.", + "type": "integer" + }, + { + "name": "sortBy", + "in": "query", + "description": "Format - enum. List can be sorted by : DateCreation = 11 StartDate = 13 Name = 20 State = 30 Value = 31 InvoicesCount = 32 InvoicesCount = 32 UserFirstName = 40 UserLastName = 41 Budget = 50 ValueToReimburse = 51 ClientCode = 53 IdShort = 54", + "x-ms-summary": "Format - enum. List can be sorted by.", + "type": "integer" + }, + { + "name": "page", + "in": "query", + "description": "The page number.", + "x-ms-summary": "The page number.", + "type": "integer" + }, + { + "name": "pageSize", + "in": "query", + "description": "The number of elements per page.", + "x-ms-summary": "The number of elements per page.", + "type": "integer" + }, + { + "name": "isDesc", + "in": "query", + "description": "Order the list by desc or asc.", + "x-ms-summary": "Order the list by desc or asc.", + "type": "boolean" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/ListAndPagesCountResultReportResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/categories/": { + "get": { + "description": "Get the list of categories with paging.", + "operationId": "GetCategoriesV2", + "summary": "Get Categories", + "tags": [ + "Categories" + ], + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Filter with the unique identifier of the category.", + "x-ms-summary": "Filter with the unique identifier of the category.", + "type": "string" + }, + { + "name": "categoryName", + "in": "query", + "description": "Filter with the category name.", + "x-ms-summary": "Filter with the category name.", + "type": "string" + }, + { + "name": "costAccount", + "in": "query", + "description": "Filter with the unique identifier of the category.", + "x-ms-summary": "Filter with the unique identifier of the category.", + "type": "string" + }, + { + "name": "vatAccount", + "in": "query", + "description": "Filter with the unique identifier of the category.", + "x-ms-summary": "Filter with the unique identifier of the category.", + "type": "string" + }, + { + "name": "isActive", + "in": "query", + "description": "Bring only active categories.", + "x-ms-summary": "Bring only active categories.", + "type": "boolean" + }, + { + "name": "tagsNames", + "in": "query", + "description": "List of tags' names seperated by ','.", + "x-ms-summary": "List of tags' names seperated by ','.", + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "The page number.", + "x-ms-summary": "The page number.", + "type": "integer" + }, + { + "name": "pageSize", + "in": "query", + "description": "The number of elements per page.", + "x-ms-summary": "The number of elements per page.", + "type": "integer" + }, + { + "name": "sortBy", + "in": "query", + "description": "Format - enum. List can be sorted by : Name_FR = 5, Name_EN = 10, CostAccount = 15, IsActive = 20, VatAccount = 25", + "x-ms-summary": "Format - enum. List can be sorted by.", + "type": "integer" + }, + { + "name": "isDesc", + "in": "query", + "description": "Order the list by desc or asc.", + "x-ms-summary": "Order the list by desc or asc.", + "type": "boolean" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/ListAndPagesCountResultCategoryResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/expenses/": { + "get": { + "description": "Get the list of expenses with paging.", + "operationId": "GetExpensesWithPagingV2", + "summary": "Get Expenses", + "tags": [ + "Expenses" + ], + "parameters": [ + { + "name": "reportId", + "in": "query", + "description": "Filter with the unique report identifier related to the expense.", + "x-ms-summary": "Filter with the unique report identifier related to the expense.", + "type": "string" + }, + { + "name": "categoryId", + "in": "query", + "description": "Filter with the unique category identifier related to the expense.", + "x-ms-summary": "Filter with the unique category identifier related to the expense.", + "type": "string" + }, + { + "name": "expenseName", + "in": "query", + "description": "Filter with the name of the expense.", + "x-ms-summary": "Filter with the name of the expense.", + "type": "string" + }, + { + "name": "startDate", + "in": "query", + "description": "Filter with the start date based on dateFilterType. Format - date-time (as date-time in RFC3339).", + "x-ms-summary": "Filter with the start date based on dateFilterType (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "endDate", + "in": "query", + "description": "Filter with the end date based on dateFilterType. Format - date-time (as date-time in RFC3339).", + "x-ms-summary": "Filter with the end date based on dateFilterType (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "reportState", + "in": "query", + "description": "Format - enum. State of the expense's report.", + "x-ms-summary": "Format - enum. State of the expense's report.", + "type": "integer" + }, + { + "name": "expenseStates", + "in": "query", + "description": "List Of expenseStates seperated by ',' : Uploading = 0 Uploaded = 1 Ready = 2 Validated = 3 ValidatedByAccountant = 4 Rejected = 99.", + "x-ms-summary": "List Of expenseStates seperated by ','", + "type": "string" + }, + { + "name": "isReimbusable", + "in": "query", + "description": "Shows if the expense is to reimburse.", + "x-ms-summary": "Shows if the expense is to reimburse.", + "type": "boolean" + }, + { + "name": "valueInCurrency", + "in": "query", + "description": "Filter with the value in currency of the owner of the expense.", + "x-ms-summary": "Filter with the value in currency of the owner of the expense.", + "type": "number" + }, + { + "name": "ownerId", + "in": "query", + "description": "Filter with the unique owner identifier of the expense.", + "x-ms-summary": "Filter with the unique owner identifier of the expense.", + "type": "string" + }, + { + "name": "ownerMail", + "in": "query", + "description": "Filter with the mail of the expense.", + "x-ms-summary": "Filter with the mail of the expense.", + "type": "string" + }, + { + "name": "ownerPayId", + "in": "query", + "description": "Filter with the serial of the expense's owner.", + "x-ms-summary": "Filter with the serial of the expense's owner.", + "type": "string" + }, + { + "name": "ownerPayId2", + "in": "query", + "description": "Filter with the first analytical axis of the owner of the expense.", + "x-ms-summary": "Filter with the first analytical axis of the owner of the expense.", + "type": "string" + }, + { + "name": "ownerPayId3", + "in": "query", + "description": "Filter with the second analytical axis of the owner of the expense.", + "x-ms-summary": "Filter with the second analytical axis of the owner of the expense.", + "type": "string" + }, + { + "name": "ownerPayId4", + "in": "query", + "description": "Filter with the third analytical axis of the owner of the expense.", + "x-ms-summary": "Filter with the third analytical axis of the owner of the expense.", + "type": "string" + }, + { + "name": "ownerPayId5", + "in": "query", + "description": "Filter with the fourth analytical axis of the owner of the expense.", + "x-ms-summary": "Filter with the fourth analytical axis of the owner of the expense.", + "type": "string" + }, + { + "name": "ownerPayId6", + "in": "query", + "description": "Filter with the fifth analytical axis of the owner of the expense.", + "x-ms-summary": "Filter with fifth analytical axis of the owner of the expense.", + "type": "string" + }, + { + "name": "projectId", + "in": "query", + "description": "Filter with the unique project identifier related to the expense.", + "x-ms-summary": "Filter with the unique project identifier related to the expense.", + "type": "string" + }, + { + "name": "isBillable", + "in": "query", + "description": "Shows if the expense is billable to client.", + "x-ms-summary": "Shows if the expense is billable to client.", + "type": "boolean" + }, + { + "name": "dateFilterType", + "in": "query", + "description": "Format - enum. Indicates the target of date filters: InvoiceDate = 1 ValidationDate = 2 AccountingValidationDate = 3 SubmissionDate = 4 CreationDate = 6.", + "x-ms-summary": "Format - enum. Indicates the target of date filters.", + "type": "integer" + }, + { + "name": "merchantCountries", + "in": "query", + "description": "List of merchant countries related to the expense seperated by ',' ex: 'FR,ES'", + "x-ms-summary": "List of merchant countries related to the expense seperated by ',' ex: 'FR,ES'", + "type": "string" + }, + { + "name": "currencies", + "in": "query", + "description": "List of currencies related to the expense seperated by ',' ex: 'EUR,USD'", + "x-ms-summary": "List of currencies related to the expense seperated by ',' ex: 'EUR,USD'", + "type": "string" + }, + { + "name": "fileType", + "in": "query", + "description": "Filter with the file type of the expense : pdf, jpg ...", + "x-ms-summary": "Filter with the file type of the expense : pdf, jpg ...", + "type": "string" + }, + { + "name": "reportIdShort", + "in": "query", + "description": "Filter with the internal identifier of the expenses' report.", + "x-ms-summary": "Filter with the internal identifier of the expenses' report.", + "type": "string" + }, + { + "name": "expenseUseTypes", + "in": "query", + "description": "List of expense use types seperated by ',' : Invoice = 1 Advance = 2 Purchase = 4 Subscription = 8 MissionOrder = 16.", + "x-ms-summary": "List of expense use types seperated by ','.", + "type": "string" + }, + { + "name": "supplierId", + "in": "query", + "description": "Filter with the unique supplier identifier of the expense.", + "x-ms-summary": "Filter with the unique supplier identifier of the expense.", + "type": "string" + }, + { + "name": "expenseIds", + "in": "query", + "description": "List of unique identifiers of the expense seperated by ','.", + "x-ms-summary": "List of unique identifiers of the expense seperated by ','.", + "type": "string" + }, + { + "name": "merchantName", + "in": "query", + "description": "Filter with the merchant name of the expense.", + "x-ms-summary": "Filter with the merchant name of the expense.", + "type": "string" + }, + { + "name": "vatCode", + "in": "query", + "description": "Filter with the merchant VAT number of the expense.", + "x-ms-summary": "Filter with the merchant VAT number of the expense.", + "type": "string" + }, + { + "name": "valueHTInExpenseCurrency", + "in": "query", + "description": "Filter with excluding tax amount of the expense.", + "x-ms-summary": "Filter with excluding tax amount of the expense.", + "type": "number" + }, + { + "name": "vatRate", + "in": "query", + "description": "Filter with VAT rate of the expense.", + "x-ms-summary": "Filter with VAT rate of the expense.", + "type": "number" + }, + { + "name": "vatValue", + "in": "query", + "description": "Filter with VAT value of the expense.", + "x-ms-summary": "Filter with VAT value of the expense.", + "type": "number" + }, + { + "name": "reportsIds", + "in": "query", + "description": "List of unique reports' identifiers related to the expense seperated by ','.", + "x-ms-summary": "List of unique reports' identifiers related to the expense seperated by ','.", + "type": "string" + }, + { + "name": "dateTimeOffset", + "in": "query", + "description": "Filter with the UTC offset of the expense.", + "x-ms-summary": "Filter with the UTC offset of the expense.", + "type": "integer" + }, + { + "name": "tagsNames", + "in": "query", + "description": "List of tags' names seperated by ','.", + "x-ms-summary": "List of tags' names seperated by ','.", + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "The page number.", + "x-ms-summary": "The page number.", + "type": "integer" + }, + { + "name": "pageSize", + "in": "query", + "description": "The number of elements per page.", + "x-ms-summary": "The number of elements per page.", + "type": "integer" + }, + { + "name": "sortBy", + "in": "query", + "description": "Format - enum. List can be sorted by : DateCreation = 11 DateInvoice = 12 Name = 20 Value = 30 ValueInCurrency = 31 HasPhoto = 40 State = 60 Category = 70.", + "x-ms-summary": "Format - enum. List can be sorted by.", + "type": "integer" + }, + { + "name": "isDesc", + "in": "query", + "description": "Order the list by desc or asc.", + "x-ms-summary": "Order the list by desc or asc.", + "type": "boolean" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/ListAndPagesCountResultExpenseResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/project/{projectId}/": { + "get": { + "description": "Get the details of the project.", + "operationId": "GetProjectDetailsV2", + "summary": "Get Project Details", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectId", + "in": "path", + "description": "Format - guid. Unique identifier of the project.", + "x-ms-summary": "Format - guid. Unique identifier of the project.", + "required": true, + "type": "string" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultProjectResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/projects/": { + "get": { + "description": "Get the list of projects.", + "operationId": "GetProjectsV2", + "summary": "Get Projects", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "projectName", + "in": "query", + "description": "Filter with the name of the project.", + "x-ms-summary": "Filter with the name of the project.", + "type": "string" + }, + { + "name": "projectIds", + "in": "query", + "description": "List of unique projects' identifiers seperated by ','.", + "x-ms-summary": "List of unique projects' identifiers seperated by ','.", + "type": "string" + }, + { + "name": "validatorName", + "in": "query", + "description": "Filter with the name of the project validator.", + "x-ms-summary": "Filter with the name of the project validator.", + "type": "string" + }, + { + "name": "projectReferenceOrExternalId", + "in": "query", + "description": "Filter with the reference or the external id of the project.", + "x-ms-summary": "Filter with the reference or the external id of the project.", + "type": "string" + }, + { + "name": "bringAllProjects", + "in": "query", + "description": "Bring the projects that are not shared with all employees.", + "x-ms-summary": "Bring the projects that are not shared with all employees.", + "type": "boolean" + }, + { + "name": "projectUseType", + "in": "query", + "description": "Format - enum. Project use type flag: Invoice = 0x1 Purchase = 0x2 Subscription = 0x4 Advance = 0x8 MissionOrder = 0x10 MileageOnly = 0x20 InvoiceOnly = 0x40 VirtualCard = 0x80.", + "x-ms-summary": "Format - enum. Project use type flag.", + "type": "integer" + }, + { + "name": "isActive", + "in": "query", + "description": "Bring only active projects.", + "x-ms-summary": "Bring only active projects.", + "type": "boolean" + }, + { + "name": "tagsNames", + "in": "query", + "description": "List of tags' names seperated by ','.", + "x-ms-summary": "List of tags' names seperated by ','.", + "type": "string" + }, + { + "name": "customFieldsIds", + "in": "query", + "description": "List of unique custom fields' identifiers seperated by ','.", + "x-ms-summary": "List of unique custom fields' identifiers seperated by ','.", + "type": "string" + }, + { + "name": "expenseDate", + "in": "query", + "description": "The date of the expense. Format - date-time (as date-time in RFC3339).", + "x-ms-summary": "The date of the expense. Format - date-time (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "userId", + "in": "query", + "description": "Filter with the unique identifier of expense's owner.", + "x-ms-summary": "Filter with the unique identifier of expense's owner.", + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "The page number.", + "x-ms-summary": "The page number.", + "type": "integer" + }, + { + "name": "pageSize", + "in": "query", + "description": "The number of elements per page.", + "x-ms-summary": "The number of elements per page.", + "type": "integer" + }, + { + "name": "sortBy", + "in": "query", + "description": "Format - enum. Sort the list by : StartDate = 11 EndDate = 12 Name = 20 ProjectRef = 21 FullName = 22 Validator = 23 ClientName = 24 Value = 25.", + "x-ms-summary": "Format - enum. Sort the list by.", + "type": "integer" + }, + { + "name": "isDesc", + "in": "query", + "description": "Order the list by desc or asc.", + "x-ms-summary": "Order the list by desc or asc.", + "type": "boolean" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/ListAndPagesCountResultProjectResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/projects/states/": { + "put": { + "description": "Batch update list of projects state.", + "operationId": "UpdateProjectStateV2", + "summary": "Update Projects State", + "tags": [ + "Projects" + ], + "parameters": [ + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + }, + { + "name": "updateProjectStateInput", + "in": "body", + "schema": { + "$ref": "#/definitions/UpdateProjectStateInput" + }, + "description": "List of project state inputs to update." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultListAddOrUpdateEntityResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/quickexpense/{userId}/": { + "post": { + "description": "Add a new expense to your expensya account.", + "operationId": "AddQuickExpenseV2", + "summary": "Add QuickExpense", + "tags": [ + "Expenses" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "Format - guid. Unique identifier of the user that expense will be linked to.", + "x-ms-summary": "Format - guid. Unique identifier of the user that expense will be linked to.", + "required": true, + "type": "string" + }, + { + "name": "quickExpenseInput", + "in": "body", + "schema": { + "$ref": "#/definitions/QuickExpenseInput" + }, + "description": "Input of the quick expense." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/refreshUserToken/": { + "get": { + "description": "Refresh your userToken.", + "operationId": "RefreshUserTokenV2", + "summary": "Refresh Token", + "tags": [ + "Token" + ], + "parameters": [ + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/LoginResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/report/{reportId}/updateStatus/": { + "put": { + "description": "Update the statuts of the report.", + "operationId": "UpdateReportStatus", + "summary": "Update Report Status", + "tags": [ + "Reports" + ], + "parameters": [ + { + "name": "reportId", + "in": "path", + "description": "Format - guid. Unique identifier of the report.", + "x-ms-summary": "Format - guid. Unique identifier of the report.", + "required": true, + "type": "string" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + }, + { + "name": "reportUpdateStatusInput", + "in": "body", + "schema": { + "$ref": "#/definitions/ReportUpdateStatusInput" + }, + "description": "Input of the report status to update." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/report/history/": { + "get": { + "description": "Get the history of the report.", + "operationId": "GetReportHistoryV2", + "summary": "Get Report History", + "tags": [ + "Reports" + ], + "parameters": [ + { + "name": "reportId", + "in": "query", + "description": "Filter with the unique Identifier of the report.", + "x-ms-summary": "Filter with the unique Identifier of the report.", + "required": true, + "type": "string" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultListEventResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/reports/": { + "get": { + "description": "Get the list of reports with paging.", + "operationId": "CompanyReports", + "summary": "Get Reports", + "tags": [ + "Reports" + ], + "parameters": [ + { + "name": "reportName", + "in": "query", + "description": "Filter with the name of the report.", + "x-ms-summary": "Filter with the name of the report.", + "type": "string" + }, + { + "name": "reportStartDate", + "in": "query", + "description": "Filter with the start date based on dateFilterType. Format - date-time (as date-time in RFC3339).", + "x-ms-summary": "Filter with the start date based on dateFilterType (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "reportEndDate", + "in": "query", + "description": "Filter with the end date based on dateFilterType. Format - date-time (as date-time in RFC3339).", + "x-ms-summary": "Filter with the end date based on dateFilterType (as date-time in RFC3339).", + "type": "string" + }, + { + "name": "reportStates", + "in": "query", + "description": "List of report states seperated by ',' : Active = 0 Submitted = 2 Rejected = 3 Closed = 5 ValidatedAndExported = 6 Reimbursed = 7 PreSubmitted = 8 InValidation = 50.", + "x-ms-summary": "List of report states seperated by ','.", + "type": "string" + }, + { + "name": "reportIdShort", + "in": "query", + "description": "Filter with the report inetrnal identifier.", + "x-ms-summary": "Filter with the report inetrnal identifier.", + "type": "string" + }, + { + "name": "ownerId", + "in": "query", + "description": "Filter with the unique identifier of the report's owner.", + "x-ms-summary": "Filter with the unique identifier of the report's owner.", + "type": "string" + }, + { + "name": "ownerPayId2", + "in": "query", + "description": "Filter with the serial of the report's owner.", + "x-ms-summary": "Filter with the serial of the report's owner.", + "type": "string" + }, + { + "name": "projectId", + "in": "query", + "description": "Filter with the unique identifier of the project that the report is linked to.", + "x-ms-summary": "Filter with the unique identifier of the project that the report is linked to.", + "type": "string" + }, + { + "name": "tagsNames", + "in": "query", + "description": "List of tags' names seperated by ','.", + "x-ms-summary": "List of tags' names seperated by ','.", + "type": "string" + }, + { + "name": "dateFilterType", + "in": "query", + "description": "Format - enum. Indicates the target of date filters: InvoiceDate = 1 ValidationDate = 2 AccountingValidationDate = 3 SubmissionDate = 4 PurchaseAccountingValidationDate = 5 CreationDate = 6", + "x-ms-summary": "Format - enum. Indicates the target of date filters.", + "type": "integer" + }, + { + "name": "sortBy", + "in": "query", + "description": "Format - enum. List can be sorted by : DateCreation = 11 StartDate = 13 Name = 20 State = 30 Value = 31 InvoicesCount = 32 InvoicesCount = 32 UserFirstName = 40 UserLastName = 41 Budget = 50 ValueToReimburse = 51 ClientCode = 53 IdShort = 54", + "x-ms-summary": "Format - enum. List can be sorted by.", + "type": "integer" + }, + { + "name": "page", + "in": "query", + "description": "The page number.", + "x-ms-summary": "The page number.", + "type": "integer" + }, + { + "name": "pageSize", + "in": "query", + "description": "The number of elements per page.", + "x-ms-summary": "The number of elements per page.", + "type": "integer" + }, + { + "name": "isDesc", + "in": "query", + "description": "Order the list by desc or asc.", + "x-ms-summary": "Order the list by desc or asc.", + "type": "boolean" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/ListAndPagesCountResultReportResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/user/": { + "post": { + "description": "Add user to Expensya.", + "operationId": "InviteUserV2", + "summary": "Invite User", + "tags": [ + "Users" + ], + "parameters": [ + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + }, + { + "name": "userInviteInput", + "in": "body", + "schema": { + "$ref": "#/definitions/UserInviteInput" + }, + "description": "Input of the user to invite." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/user/{userId}/": { + "put": { + "description": "Update user already added in Expensya.", + "operationId": "UpateUserV2", + "summary": "Update User", + "tags": [ + "Users" + ], + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "Format - guid. Unique identifier of the user to update.", + "x-ms-summary": "Format - guid. Unique identifier of the user to update.", + "required": true, + "type": "string" + }, + { + "name": "shouldUpdateValidators", + "in": "query", + "description": "Shows if the validators of the user should be updated or not.", + "x-ms-summary": "Shows if the validators of the user should be updated or not.", + "required": true, + "type": "boolean" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + }, + { + "name": "userUpdateInput", + "in": "body", + "schema": { + "$ref": "#/definitions/UserUpdateInput" + }, + "description": "Input of the user to update." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/users/": { + "get": { + "description": "Get the list of users with paging.", + "operationId": "CompanyUsers", + "summary": "Get Users", + "tags": [ + "Users" + ], + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Filter with the unique identifier of the user.", + "x-ms-summary": "Filter with the unique identifier of the user.", + "type": "string" + }, + { + "name": "firstName", + "in": "query", + "description": "Filter with the first name of the user.", + "x-ms-summary": "Filter with the first name of the user.", + "type": "string" + }, + { + "name": "lastName", + "in": "query", + "description": "Filter with the last name of the user.", + "x-ms-summary": "Filter with the last name of the user.", + "type": "string" + }, + { + "name": "mail", + "in": "query", + "description": "Filter with the mail of the user.", + "x-ms-summary": "Filter with the mail of the user.", + "type": "string" + }, + { + "name": "payId", + "in": "query", + "description": "Filter with the serial the user.", + "x-ms-summary": "Filter with the serial the user.", + "type": "string" + }, + { + "name": "mailOrNameOrPayId", + "in": "query", + "description": "Filter with the mail or name or serial of the user.", + "x-ms-summary": "Filter with the mail or name or serial of the user.", + "type": "string" + }, + { + "name": "type", + "in": "query", + "description": "Format - enum. Enum flag attribute which is the type of the user : Employee = 1 Administrator = 2 Accountant = 4", + "x-ms-summary": "Format - enum. Enum flag attribute which is the type of the user.", + "type": "integer" + }, + { + "name": "state", + "in": "query", + "description": "Format - enum. Enum flag attribute which is the user state : Validated = 1 Active = 2.", + "x-ms-summary": "Format - enum. Enum flag attribute which is the user state.", + "type": "integer" + }, + { + "name": "reviewerId", + "in": "query", + "description": "Filter with the unique identifier of the user's first validator.", + "x-ms-summary": "Filter with the unique identifier of the user's first validator.", + "type": "string" + }, + { + "name": "reviewerName", + "in": "query", + "description": "Filter with the name of the user's reviwer.", + "x-ms-summary": "Filter with the name of the user's reviwer.", + "type": "string" + }, + { + "name": "managerId", + "in": "query", + "description": "Filter with the unique identifier of the user's second validator.", + "x-ms-summary": "Filter with the unique identifier of the user's second validator.", + "type": "string" + }, + { + "name": "managerName", + "in": "query", + "description": "Filter with the name of the user's manager.", + "x-ms-summary": "Filter with the name of the user's manager.", + "type": "string" + }, + { + "name": "userIds", + "in": "query", + "description": "List of unique identifiers of the users seperated by ','.", + "x-ms-summary": "List of unique identifiers of the users seperated by ','.", + "type": "string" + }, + { + "name": "userMails", + "in": "query", + "description": "List of e-mails of the users seperated by ','.", + "x-ms-summary": "List of e-mails of the users seperated by ','.", + "type": "string" + }, + { + "name": "tagsNames", + "in": "query", + "description": "List of tags' names seperated by ','.", + "x-ms-summary": "List of tags' names seperated by ','.", + "type": "string" + }, + { + "name": "simpleTagsNames", + "in": "query", + "description": "List of simple tags' names seperated by ','.", + "x-ms-summary": "List of simple tags' names seperated by ','.", + "type": "string" + }, + { + "name": "sortBy", + "in": "query", + "description": "Format - enum. List can be sorted by : CreationDate = 11 LastLoginDate = 12 LastName = 20 FirstName = 21 ManagerLastName = 30 ManagerFirstName = 31 UserState = 40 UserType = 41 Mail = 50 Address = 60 PhoneNumber = 61 PayId = 62 LocalCurrency = 63", + "x-ms-summary": "Format - enum. List can be sorted by.", + "type": "integer" + }, + { + "name": "page", + "in": "query", + "description": "The page number.", + "x-ms-summary": "The page number.", + "type": "integer" + }, + { + "name": "pageSize", + "in": "query", + "description": "The number of elements per page.", + "x-ms-summary": "The number of elements per page.", + "type": "integer" + }, + { + "name": "isDesc", + "in": "query", + "description": "Order the list by desc or asc.", + "x-ms-summary": "Order the list by desc or asc.", + "type": "boolean" + }, + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/ListAndPagesCountResultUserResponse" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + }, + "/api/v2/users/state/": { + "put": { + "description": "Update expensya users status.", + "operationId": "UpdateUsersStateV2", + "summary": "Update Users Status", + "tags": [ + "Users" + ], + "parameters": [ + { + "name": "Expensya-Token", + "in": "header", + "description": "Valid user token.", + "x-ms-summary": "Valid user token.", + "required": true, + "type": "string" + }, + { + "name": "updateUserStateInputArray", + "in": "body", + "schema": { + "$ref": "#/definitions/UpdateUserStateInputArray" + }, + "description": "List of user state inputs to update." + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "The call was successful.", + "schema": { + "$ref": "#/definitions/BaseResultListUpdateUserResult" + } + }, + "400": { + "description": "Bad request." + }, + "403": { + "description": "Forbidden." + }, + "404": { + "description": "Not Found." + }, + "500": { + "description": "Internal error." + } + } + } + } + }, + "definitions": { + "BrokenRule": { + "properties": { + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "type": "string", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "DescriptionForCredit": { + "type": "string", + "uniqueItems": false + }, + "Budget": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "RuleType": { + "description": "\r\n\r\n Mandatory = 0 \r\n Warning = 1 \r\n ReimbursableByCeiling = 2 \r\n ReimbursableByFlatRate = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "Currency": { + "type": "string", + "uniqueItems": false + }, + "AllowExceptions": { + "type": "boolean", + "uniqueItems": false + }, + "RuleElementType": { + "description": "\r\n\r\n Invoices = 0 \r\n VirtualCards = 1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "IntervalType": { + "description": "\r\n\r\n Day = 0 \r\n WeekDays = 1 \r\n Month = 2 \r\n Year = 3 \r\n Invoice = 4 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "Language": { + "type": "string", + "uniqueItems": false + }, + "RuleCurrenciesWithBudget": { + "$ref": "#/definitions/TupleStringDecimal" + }, + "ForAllCompany": { + "type": "boolean", + "uniqueItems": false + } + }, + "type": "object", + "format": "BrokenRule" + }, + "Category": { + "properties": { + "Name": { + "type": "string", + "uniqueItems": false + }, + "Name_EN": { + "type": "string", + "uniqueItems": false + }, + "Name_FR": { + "type": "string", + "uniqueItems": false + }, + "EntityName": { + "type": "string", + "uniqueItems": false + }, + "Parent": { + "type": "string", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "PrimitiveCategories": { + "type": "string", + "uniqueItems": false + }, + "ParentCategory_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Icon": { + "type": "string", + "uniqueItems": false + }, + "IsActive": { + "type": "boolean", + "uniqueItems": false + }, + "IsActiveAsDefault": { + "type": "boolean", + "uniqueItems": false + }, + "FieldsStatesStr": { + "type": "string", + "uniqueItems": false + }, + "ReimbursementRatesStr": { + "type": "string", + "uniqueItems": false + }, + "CostAccount": { + "type": "string", + "uniqueItems": false + }, + "VatAccount": { + "type": "string", + "uniqueItems": false + }, + "ExtraData": { + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "VatClaimRate": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "VatAccountsByRateStr": { + "type": "string", + "uniqueItems": false + }, + "AccountingModelCategory_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ExtraLanguagesStr": { + "type": "string", + "uniqueItems": false + }, + "SpecialFieldsStr": { + "type": "string", + "uniqueItems": false + }, + "CategoryUseType": { + "description": "\r\n\r\n Invoices = 1 \r\n Purchases = 2 \r\n Subscriptions = 4 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "VatClaimRatesStr": { + "type": "string", + "uniqueItems": false + }, + "ExternalId": { + "type": "string", + "uniqueItems": false + }, + "IsSpecial": { + "type": "boolean", + "uniqueItems": false + }, + "IconName": { + "type": "string", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "CreationVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SyncState": { + "description": "\r\n\r\n AddLocal = 0 \r\n DeleteLocal = 1 \r\n Sync = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "MileagePrimitiveCategory": { + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "Category" + }, + "DuplicatedInvoiceDetails": { + "properties": { + "InvoiceId": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserId": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "InvoiceName": { + "type": "string", + "uniqueItems": false + }, + "UserFirstName": { + "type": "string", + "uniqueItems": false + }, + "UserLastName": { + "type": "string", + "uniqueItems": false + }, + "MissionId": { + "type": "string", + "format": "guid", + "uniqueItems": false + } + }, + "type": "object", + "format": "DuplicatedInvoiceDetails" + }, + "ExtendedInvoice": { + "properties": { + "Project": { + "$ref": "#/definitions/Project" + }, + "Mission": { + "$ref": "#/definitions/ExtendedMission" + }, + "PaymentInstrument": { + "$ref": "#/definitions/PaymentInstrument" + }, + "IsOwner": { + "type": "boolean", + "uniqueItems": false + }, + "LogInvoiceAttributes": { + "$ref": "#/definitions/HistoryAttributes" + }, + "User_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "CanEdit": { + "type": "boolean", + "uniqueItems": false + }, + "LocalCurrency": { + "type": "string", + "uniqueItems": false + }, + "IsAllowedToUse": { + "type": "boolean", + "uniqueItems": false + }, + "BrokenRules": { + "type": "array", + "items": { + "$ref": "#/definitions/BrokenRule" + }, + "uniqueItems": false + }, + "Duplicates": { + "type": "array", + "items": { + "$ref": "#/definitions/DuplicatedInvoiceDetails" + }, + "uniqueItems": false + }, + "Supplier": { + "$ref": "#/definitions/SupplierInDb" + }, + "Vehicle": { + "$ref": "#/definitions/Vehicle" + }, + "TransactionsSumValue": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "TransactionsSumInCurrency": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "TransactionsSumInLocalCurrency": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "uniqueItems": false + }, + "PerdiemCountry": { + "type": "string", + "uniqueItems": false + }, + "PerdiemCalculationPeriodType": { + "description": "\r\n\r\n CalendarDay = 0 \r\n TwentyFourHours = 1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "PerDiemType": { + "description": "\r\n\r\n Time = 0 \r\n Distance = 1 \r\n IEG = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "RawOcrResult": { + "type": "string", + "uniqueItems": false + }, + "GuestsCount": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "FullUnits": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueStr": { + "type": "string", + "uniqueItems": false + }, + "ValueStrWithCurrency": { + "type": "string", + "uniqueItems": false + }, + "ValueInLocalCurrencyStr": { + "type": "string", + "uniqueItems": false + }, + "ValueInLocalCurrencyStrWithLocalCurrency": { + "type": "string", + "uniqueItems": false + }, + "ValueInCurrencyStr": { + "type": "string", + "uniqueItems": false + }, + "ValueInCurrencyStrWithCurrency": { + "type": "string", + "uniqueItems": false + }, + "OwnerFirstName": { + "type": "string", + "uniqueItems": false + }, + "OwnerPayId": { + "type": "string", + "uniqueItems": false + }, + "OwnerPayId2": { + "type": "string", + "uniqueItems": false + }, + "OwnerPayId3": { + "type": "string", + "uniqueItems": false + }, + "OwnerPayId4": { + "type": "string", + "uniqueItems": false + }, + "OwnerPayId5": { + "type": "string", + "uniqueItems": false + }, + "OwnerPayId6": { + "type": "string", + "uniqueItems": false + }, + "UserState": { + "description": "\r\n\r\n None = 0 \r\n Validated = 1 \r\n Active = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "OwnerLocalCountry": { + "type": "string", + "uniqueItems": false + }, + "OwnerConfigurationSettings": { + "type": "array", + "items": { + "$ref": "#/definitions/KeyValuePairStringString" + }, + "uniqueItems": false + }, + "OwnerValidationSettings": { + "type": "array", + "items": { + "$ref": "#/definitions/KeyValuePairStringString" + }, + "uniqueItems": false + }, + "OwnerLastName": { + "type": "string", + "uniqueItems": false + }, + "OwnerLocalCurrency": { + "type": "string", + "uniqueItems": false + }, + "OwnerFullName": { + "type": "string", + "uniqueItems": false + }, + "OwnerExternalUserType": { + "description": "\r\n\r\n None = 0 \r\n FromBackend = 1 \r\n FromPartner = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "CountryAndCity": { + "type": "string", + "uniqueItems": false + }, + "DateInvoiceStr": { + "type": "string", + "uniqueItems": false + }, + "DateCreationStr": { + "type": "string", + "uniqueItems": false + }, + "IsReadOnly": { + "type": "boolean", + "uniqueItems": false + }, + "IsMissionReadOnly": { + "type": "boolean", + "uniqueItems": false + }, + "StateStr": { + "type": "string", + "uniqueItems": false + }, + "ReadOnlyReason": { + "type": "string", + "uniqueItems": false + }, + "TooltipStateStr": { + "type": "string", + "uniqueItems": false + }, + "StateColor": { + "$ref": "#/definitions/Object" + }, + "IsPerDiem": { + "type": "boolean", + "uniqueItems": false + }, + "TruncatedName": { + "type": "string", + "uniqueItems": false + }, + "IsValueInCurrencyUpdated": { + "type": "boolean", + "uniqueItems": false + }, + "IsValueToReimburseUpdated": { + "type": "boolean", + "uniqueItems": false + }, + "Category": { + "$ref": "#/definitions/Category" + }, + "IsMileage": { + "type": "boolean", + "uniqueItems": false + }, + "UseType": { + "description": "\r\n\r\n Invoice = 1 \r\n Advance = 2 \r\n Purchase = 4 \r\n Subscription = 8 \r\n MissionOrder = 16 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "Name": { + "type": "string", + "uniqueItems": false + }, + "Value": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueToReimburse": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueToReimburseComputed": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ReimbursementRate": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "InvoiceQuality": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "PaymentInstrument_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Mission_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Category_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "DateCreation": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "DateInvoice": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "DateUtcOffset": { + "type": "number", + "format": "double", + "uniqueItems": false + }, + "DateInvoiceSortableStr": { + "type": "string", + "uniqueItems": false + }, + "PhotoVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "HasPhoto": { + "type": "boolean", + "uniqueItems": false + }, + "Currency": { + "type": "string", + "uniqueItems": false + }, + "ValueInCurrency": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueInLocalCurrency": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "MerchantInvoiceId": { + "type": "string", + "uniqueItems": false + }, + "MerchantCountry": { + "type": "string", + "uniqueItems": false + }, + "MerchantCity": { + "type": "string", + "uniqueItems": false + }, + "MerchantZipCode": { + "type": "string", + "uniqueItems": false + }, + "MerchantAddress": { + "type": "string", + "uniqueItems": false + }, + "MerchantName": { + "type": "string", + "uniqueItems": false + }, + "MerchantVatNumber": { + "type": "string", + "uniqueItems": false + }, + "SignatureInfoStr": { + "type": "string", + "uniqueItems": false + }, + "FileHash": { + "type": "string", + "uniqueItems": false + }, + "Units": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "State": { + "description": "\r\n\r\n Uploading = 0 \r\n Uploaded = 1 \r\n Ready = 2 \r\n Validated = 3 \r\n ValidatedByAccountant = 4 \r\n Rejected = 99 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "IsFromEmail": { + "type": "boolean", + "uniqueItems": false + }, + "Source": { + "description": "\r\n\r\n Email = 0 \r\n Digidom = 1 \r\n API = 2 \r\n Travel = 3 \r\n Card = 4 \r\n Collector = 5 \r\n Mobile = 10 \r\n Web = 11 \r\n Android = 12 \r\n iOS = 13 \r\n WindowsPhone = 14 \r\n Transaction = 15 \r\n Egencia = 16 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "PhotoSource": { + "description": "\r\n\r\n NoPhoto = 0 \r\n ExpensyaWeb = 1 \r\n ExpensyaMobile = 2 \r\n Gallery = 3 \r\n ExternalApp = 4 \r\n Email = 5 \r\n API = 6 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "HasEmailAttachement": { + "type": "boolean", + "uniqueItems": false + }, + "VATStr": { + "type": "string", + "uniqueItems": false + }, + "VATAvgRate": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "AttachedFilesCount": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "CategoryExtraDataStr": { + "type": "string", + "uniqueItems": false + }, + "Vehicle_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ToReimburse": { + "type": "boolean", + "uniqueItems": false + }, + "IsBillable": { + "type": "boolean", + "uniqueItems": false + }, + "CustomFieldsStr": { + "type": "string", + "uniqueItems": false + }, + "OcrValue": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "UniqueExternalKey": { + "type": "string", + "uniqueItems": false + }, + "ValueHT": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "Project_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SubscriptionStartDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "SubscriptionEndDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "SubscriptionType": { + "description": "\r\n\r\n Weekly = 0 \r\n Monthly = 1 \r\n Yearly = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "FileType": { + "type": "string", + "uniqueItems": false + }, + "CoworkersStr": { + "type": "string", + "uniqueItems": false + }, + "InvoiceSource_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "CreditSource_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "DefaultRate": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "Supplier_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SubStatus": { + "description": "\r\n\r\n All = 0 \r\n Exported = 2 \r\n Payed = 4 \r\n ExportedToIbiza = 8 \r\n RecordedByInexweb = 16 \r\n ExportedToQBO = 32 \r\n ExportedToInexweb = 64 \r\n RejectedByInexweb = 128 \r\n ExportedToVSA = 256 \r\n ExportedBalance = 512 \r\n ExportedToSiebel = 1024 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "IsDuplicable": { + "type": "boolean", + "uniqueItems": false + }, + "ExtendedInvoice": { + "$ref": "#/definitions/ExtendedInvoice" + }, + "IsFromEmailIconVisible": { + "type": "boolean", + "uniqueItems": false + }, + "IsFileAttachedIconVisible": { + "type": "boolean", + "uniqueItems": false + }, + "ImageUrl": { + "type": "string", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "CreationVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SyncState": { + "description": "\r\n\r\n AddLocal = 0 \r\n DeleteLocal = 1 \r\n Sync = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "ExtendedInvoice" + }, + "ExtendedMission": { + "properties": { + "CurrencySymbol": { + "type": "string", + "uniqueItems": false + }, + "InvoicesCountStr": { + "type": "string", + "uniqueItems": false + }, + "InvoicesCount": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Value": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueInLocalCurrency": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueToReimburse": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "IsValueToReimburseModified": { + "type": "boolean", + "uniqueItems": false + }, + "ValueToReimburseInLocalCurrency": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "StartDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "StartDateForMileageExpenses": { + "type": "string", + "uniqueItems": false + }, + "EndDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "AccountingDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "HasExternalProjectValidator": { + "type": "boolean", + "uniqueItems": false + }, + "InvoiceList": { + "type": "array", + "items": { + "$ref": "#/definitions/ExtendedInvoice" + }, + "uniqueItems": false + }, + "IsAllowedToUse": { + "type": "boolean", + "uniqueItems": false + }, + "Validators": { + "type": "array", + "items": { + "$ref": "#/definitions/MissionValidator" + }, + "uniqueItems": false + }, + "CallerCanUpdateMissionState": { + "type": "boolean", + "uniqueItems": false + }, + "InvoicesTransactionsSumInCurrency": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "IssuesDicStr": { + "type": "string", + "uniqueItems": false + }, + "MissionOrderDetails": { + "type": "string", + "uniqueItems": false + }, + "MissionOrderStartDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "MissionOrderEndDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "MissionOrderDestination": { + "type": "string", + "uniqueItems": false + }, + "InvoiceAttachedFilesCount": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "uniqueItems": false + }, + "InvoicesWithProblems": { + "type": "array", + "items": { + "$ref": "#/definitions/InvoiceWithProblemsDetails" + }, + "uniqueItems": false + }, + "CustomFieldsStr": { + "type": "string", + "uniqueItems": false + }, + "CanSubmit": { + "type": "boolean", + "uniqueItems": false + }, + "SubmitDisabledReason": { + "type": "string", + "uniqueItems": false + }, + "CanClose": { + "type": "boolean", + "uniqueItems": false + }, + "CloseDisabledReason": { + "type": "string", + "uniqueItems": false + }, + "AreAllInvoicesValidated": { + "type": "boolean", + "uniqueItems": false + }, + "ValueStr": { + "type": "string", + "uniqueItems": false + }, + "ValueStrWithCurrency": { + "type": "string", + "uniqueItems": false + }, + "ValueToReimburseStr": { + "type": "string", + "uniqueItems": false + }, + "ValueToReimburseStrWithCurrency": { + "type": "string", + "uniqueItems": false + }, + "StartDateStr": { + "type": "string", + "uniqueItems": false + }, + "EndDateStr": { + "type": "string", + "uniqueItems": false + }, + "StateStr": { + "type": "string", + "uniqueItems": false + }, + "IsReadOnly": { + "type": "boolean", + "uniqueItems": false + }, + "ReadOnlyReason": { + "type": "string", + "uniqueItems": false + }, + "ValidationOrRejectionMessage": { + "type": "string", + "uniqueItems": false + }, + "TooltipStateStr": { + "type": "string", + "uniqueItems": false + }, + "IsVisibleInMissionList": { + "type": "boolean", + "uniqueItems": false + }, + "TruncatedName": { + "type": "string", + "uniqueItems": false + }, + "Location": { + "type": "string", + "uniqueItems": false + }, + "StartAndEndDateStr": { + "type": "string", + "uniqueItems": false + }, + "StateColor": { + "$ref": "#/definitions/Object" + }, + "Name": { + "type": "string", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "DateCreation": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Budget": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "MissionType": { + "description": "\r\n\r\n UserCreated = 0 \r\n Default = 1 \r\n TravelAgencyImport = 2 \r\n Advance = 3 \r\n MissionOrder = 4 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "State": { + "description": "\r\n\r\n Active = 0 \r\n Submitted = 2 \r\n Rejected = 3 \r\n Validated = 4 \r\n Closed = 5 \r\n ValidatedAndExported = 6 \r\n Reimbursed = 7 \r\n PreSubmitted = 8 \r\n InValidation = 50 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "Comments": { + "type": "string", + "uniqueItems": false + }, + "IdShort": { + "type": "string", + "uniqueItems": false + }, + "AccountingPeriod": { + "type": "string", + "uniqueItems": false + }, + "SubStatus": { + "description": "\r\n\r\n All = 0 \r\n Exported = 2 \r\n Payed = 4 \r\n ExportedToIbiza = 8 \r\n RecordedByInexweb = 16 \r\n ExportedToQBO = 32 \r\n ExportedToInexweb = 64 \r\n RejectedByInexweb = 128 \r\n ExportedToVSA = 256 \r\n ExportedBalance = 512 \r\n ExportedToSiebel = 1024 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "CurrentValidator_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "LastValidatorReminderDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Company_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "HasIssues": { + "type": "boolean", + "uniqueItems": false + }, + "ExtendedMission": { + "$ref": "#/definitions/ExtendedMission" + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "CreationVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SyncState": { + "description": "\r\n\r\n AddLocal = 0 \r\n DeleteLocal = 1 \r\n Sync = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "IsOwner": { + "type": "boolean", + "uniqueItems": false + } + }, + "type": "object", + "format": "ExtendedMission" + }, + "HistoryAttributes": { + "properties": { + "LastModificationDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "InvoiceEventType": { + "description": "\r\n\r\n SubmitMission = 1 \r\n ValidateMission = 2 \r\n RejectMission = 3 \r\n ReimburseMission = 4 \r\n CloseMission = 5 \r\n CommentMission = 6 \r\n ValidateAndExportMission = 7 \r\n UpdateInvoiceByValidator = 8 \r\n CreateMission = 9 \r\n ExportMission = 10 \r\n ExportMissionToQuickBooks = 11 \r\n PreSubmitMission = 12 \r\n ReviewAndSubmitMission = 13 \r\n UpdateAccountingPeriodByAdminOrAccountant = 14 \r\n AddUserCollectorConnection = 15 \r\n UpdateUserCollectorConnection = 16 \r\n GetUserCollectedBills = 17 \r\n StopAutoRenew = 18 \r\n ValidateUserCollectorConnection = 19 \r\n SwitchAsDelegatedUser = 20 \r\n DeleteUserCollectorConnection = 21 \r\n ExportMissionToIbiza = 22 \r\n ValidateVirtualCard = 23 \r\n RejectVirtualCard = 24 \r\n RequestVirtualCard = 25 \r\n RequestVirtualCardAndAutoApproved = 26 \r\n ValidatedPurchaseByAccountant = 27 \r\n AutoValidateMission = 28 \r\n AddProPaymentInstrument = 29 \r\n UpdateProPaymentInstrument = 30 \r\n DisableVirtualCard = 31 \r\n ExportMissionToInexweb = 32 \r\n ExportPurchaseToSapByDesign = 33 \r\n CreateRule = 34 \r\n DeleteRule = 35 \r\n UpdateRule = 36 \r\n DeleteMission = 37 \r\n RestoreMission = 38 \r\n AutoValidateAndExportMission = 39 \r\n DisconnectIntegration = 41 \r\n ExportMissionToVSA = 42 \r\n ExportInvoiceToSiebel = 43 \r\n CreateInvoice = 97 \r\n DeleteInvoice = 98 \r\n UpdateInvoice = 99 \r\n AddTag = 100 \r\n UpdateTag = 101 \r\n DeleteTag = 102 \r\n AddCompanyIntegrationSettings = 103 \r\n UpdateCompanyIntegrationSettings = 104 \r\n IntegrationStart = 105 \r\n IntegrationComplete = 106 \r\n IgnoreMissionInExport = 107 \r\n AttachCompanyToPartner = 108 \r\n PreSubmitVirtualCard = 109 \r\n ApproveVirtualCard = 110 \r\n CommentVirtualCard = 111 \r\n ReviewAndSubmitVirtualCard = 112 \r\n AutoImport = 113 \r\n AutoExport = 114 \r\n Export = 115 \r\n Import = 116 \r\n SubmitVehicle = 117 \r\n ValidateVehicle = 118 \r\n ApproveVehicle = 119 \r\n RejectVehicle = 120 \r\n CommentVehicle = 121 \r\n DisableVehicle = 122 \r\n PreSubmitVehicle = 123 \r\n AutoApproveVehicle = 124 \r\n AddBalanceExport = 125 \r\n Payment = 126 \r\n ReSubmitVehicleAfterApproval = 127 \r\n ExportMissionByAPI = 128 \r\n SplitMissionInvoicesByProblems = 129 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "UserWhoModifiedId": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "MissionEventType": { + "description": "\r\n\r\n SubmitMission = 1 \r\n ValidateMission = 2 \r\n RejectMission = 3 \r\n ReimburseMission = 4 \r\n CloseMission = 5 \r\n CommentMission = 6 \r\n ValidateAndExportMission = 7 \r\n UpdateInvoiceByValidator = 8 \r\n CreateMission = 9 \r\n ExportMission = 10 \r\n ExportMissionToQuickBooks = 11 \r\n PreSubmitMission = 12 \r\n ReviewAndSubmitMission = 13 \r\n UpdateAccountingPeriodByAdminOrAccountant = 14 \r\n AddUserCollectorConnection = 15 \r\n UpdateUserCollectorConnection = 16 \r\n GetUserCollectedBills = 17 \r\n StopAutoRenew = 18 \r\n ValidateUserCollectorConnection = 19 \r\n SwitchAsDelegatedUser = 20 \r\n DeleteUserCollectorConnection = 21 \r\n ExportMissionToIbiza = 22 \r\n ValidateVirtualCard = 23 \r\n RejectVirtualCard = 24 \r\n RequestVirtualCard = 25 \r\n RequestVirtualCardAndAutoApproved = 26 \r\n ValidatedPurchaseByAccountant = 27 \r\n AutoValidateMission = 28 \r\n AddProPaymentInstrument = 29 \r\n UpdateProPaymentInstrument = 30 \r\n DisableVirtualCard = 31 \r\n ExportMissionToInexweb = 32 \r\n ExportPurchaseToSapByDesign = 33 \r\n CreateRule = 34 \r\n DeleteRule = 35 \r\n UpdateRule = 36 \r\n DeleteMission = 37 \r\n RestoreMission = 38 \r\n AutoValidateAndExportMission = 39 \r\n DisconnectIntegration = 41 \r\n ExportMissionToVSA = 42 \r\n ExportInvoiceToSiebel = 43 \r\n CreateInvoice = 97 \r\n DeleteInvoice = 98 \r\n UpdateInvoice = 99 \r\n AddTag = 100 \r\n UpdateTag = 101 \r\n DeleteTag = 102 \r\n AddCompanyIntegrationSettings = 103 \r\n UpdateCompanyIntegrationSettings = 104 \r\n IntegrationStart = 105 \r\n IntegrationComplete = 106 \r\n IgnoreMissionInExport = 107 \r\n AttachCompanyToPartner = 108 \r\n PreSubmitVirtualCard = 109 \r\n ApproveVirtualCard = 110 \r\n CommentVirtualCard = 111 \r\n ReviewAndSubmitVirtualCard = 112 \r\n AutoImport = 113 \r\n AutoExport = 114 \r\n Export = 115 \r\n Import = 116 \r\n SubmitVehicle = 117 \r\n ValidateVehicle = 118 \r\n ApproveVehicle = 119 \r\n RejectVehicle = 120 \r\n CommentVehicle = 121 \r\n DisableVehicle = 122 \r\n PreSubmitVehicle = 123 \r\n AutoApproveVehicle = 124 \r\n AddBalanceExport = 125 \r\n Payment = 126 \r\n ReSubmitVehicleAfterApproval = 127 \r\n ExportMissionByAPI = 128 \r\n SplitMissionInvoicesByProblems = 129 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "HistoryAttributes" + }, + "InvoiceWithProblemsDetails": { + "properties": { + "InvoiceId": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "InvoiceName": { + "type": "string", + "uniqueItems": false + }, + "InvoiceProblemList": { + "description": "\r\n\r\n None = 0 \r\n BrokenRule = 1 \r\n Exception = 2 \r\n Fraud = 3 \r\n ExchangeRateModified = 4 \r\n MileageDistanceModified = 5 \r\n DuplicatedInvoices = 6 \r\n MandatoryCustomFields = 7 \r\n OutOfProjectDateRange = 8 \r\n AssignedGroupConflict = 9 \r\n DeactivatedProject = 10 \r\n OutOfRangeVehicleAssignment = 11 \r\n InvoiceStateNotReady = 12 \r\n DeactivatedVehicle = 13 \r\n NotEligibaleProject = 14 \r\n NotApprovedVehicle = 15 \r\n RejectedVehicle = 16 \r\n", + "type": "array", + "items": { + "type": "integer", + "format": "enum" + }, + "uniqueItems": false + }, + "IsMileage": { + "type": "boolean", + "uniqueItems": false + }, + "MissionState": { + "description": "\r\n\r\n Active = 0 \r\n Submitted = 2 \r\n Rejected = 3 \r\n Validated = 4 \r\n Closed = 5 \r\n ValidatedAndExported = 6 \r\n Reimbursed = 7 \r\n PreSubmitted = 8 \r\n InValidation = 50 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "InvoiceWithProblemsDetails" + }, + "MissionValidator": { + "properties": { + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "FullName": { + "type": "string", + "uniqueItems": false + }, + "Mail": { + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "MissionValidator" + }, + "PaymentInstrument": { + "properties": { + "Name": { + "type": "string", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "IsActive": { + "type": "boolean", + "uniqueItems": false + }, + "InstrumentType": { + "description": "\r\n\r\n Cash = 0 \r\n Card = 1 \r\n Check = 2 \r\n EWallet = 3 \r\n Coupon = 4 \r\n Wire = 5 \r\n Bank = 6 \r\n Other = 99 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "AccountType": { + "description": "\r\n\r\n None = 0 \r\n Professional = 1 \r\n Personal = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "LastDigits": { + "type": "string", + "uniqueItems": false + }, + "CardKey": { + "type": "string", + "uniqueItems": false + }, + "JournalCode": { + "type": "string", + "uniqueItems": false + }, + "Auxiliary": { + "type": "string", + "uniqueItems": false + }, + "AccountNumber": { + "type": "string", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "CreationVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SyncState": { + "description": "\r\n\r\n AddLocal = 0 \r\n DeleteLocal = 1 \r\n Sync = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "PaymentInstrument" + }, + "Project": { + "properties": { + "ExternalId": { + "type": "string", + "uniqueItems": false + }, + "Name": { + "type": "string", + "uniqueItems": false + }, + "ProjectRef": { + "type": "string", + "uniqueItems": false + }, + "Validator_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Reviewer_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ClientName": { + "type": "string", + "uniqueItems": false + }, + "ForAllCompany": { + "type": "boolean", + "uniqueItems": false + }, + "IsBillableDefaultValue": { + "type": "boolean", + "uniqueItems": false + }, + "PayId2": { + "type": "string", + "uniqueItems": false + }, + "Currency": { + "type": "string", + "uniqueItems": false + }, + "ExtraData": { + "type": "string", + "uniqueItems": false + }, + "DescriptionsStr": { + "type": "string", + "uniqueItems": false + }, + "ProjectUseType": { + "description": "\r\n\r\n Invoice = 1 \r\n Purchase = 2 \r\n Subscription = 4 \r\n Advance = 8 \r\n MissionOrder = 16 \r\n MileageOnly = 32 \r\n InvoiceOnly = 64 \r\n VirtualCard = 128 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "CustomField_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "CustomFieldParent_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "CategoriesIdsStr": { + "type": "string", + "uniqueItems": false + }, + "FullName": { + "type": "string", + "uniqueItems": false + }, + "FullNameWithClientName": { + "type": "string", + "uniqueItems": false + }, + "IsClientNameVisible": { + "type": "boolean", + "uniqueItems": false + }, + "StartDateStr": { + "type": "string", + "uniqueItems": false + }, + "EndDateStr": { + "type": "string", + "uniqueItems": false + }, + "HasBillable": { + "type": "boolean", + "uniqueItems": false + }, + "StartDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "type": "boolean", + "uniqueItems": false + }, + "MileageConfigurationsStr": { + "type": "string", + "uniqueItems": false + }, + "Address": { + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "type": "string", + "uniqueItems": false + }, + "City": { + "type": "string", + "uniqueItems": false + }, + "IsReadOnly": { + "type": "boolean", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "CreationVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SyncState": { + "description": "\r\n\r\n AddLocal = 0 \r\n DeleteLocal = 1 \r\n Sync = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "Project" + }, + "SupplierInDb": { + "properties": { + "Company_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "type": "string", + "uniqueItems": false + }, + "SupplierAccountName": { + "type": "string", + "uniqueItems": false + }, + "SupplierAccount": { + "type": "string", + "uniqueItems": false + }, + "CostAccountName": { + "type": "string", + "uniqueItems": false + }, + "CostAccount": { + "type": "string", + "uniqueItems": false + }, + "VatAccountName": { + "type": "string", + "uniqueItems": false + }, + "VatAccount": { + "type": "string", + "uniqueItems": false + }, + "IsActive": { + "type": "boolean", + "uniqueItems": false + }, + "MerchantNameStr": { + "type": "string", + "uniqueItems": false + }, + "VatRegime": { + "description": "\r\n\r\n AtCollection = 0 \r\n Debit = 1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "PaymentDelays": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "CreationDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Category_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SupplierCollectiveAccount": { + "type": "string", + "uniqueItems": false + }, + "External_Id": { + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "SupplierInDb" + }, + "Tag": { + "properties": { + "DefinitionStr": { + "type": "string", + "uniqueItems": false + }, + "Name": { + "type": "string", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "type": "boolean", + "uniqueItems": false + }, + "TagType": { + "description": "\r\n\r\n Tag = 1 \r\n SimpleTag = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "UseType": { + "description": "\r\n\r\n Invoice = 2 \r\n Mileage = 4 \r\n Purchase = 8 \r\n Subscription = 16 \r\n Mission = 32 \r\n User = 64 \r\n Balance = 128 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "PartnerOrCompany_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "CreationVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SyncState": { + "description": "\r\n\r\n AddLocal = 0 \r\n DeleteLocal = 1 \r\n Sync = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "Tag" + }, + "Vehicle": { + "properties": { + "Name": { + "type": "string", + "uniqueItems": false + }, + "DateCreation": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "CreationYearKm": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "CreationYearMiles": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "LastYearDistanceKm": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "LastUpdatedYear": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "VehicleType": { + "description": "\r\n\r\n Car = 1 \r\n Moped = 2 \r\n Scooter = 3 \r\n Motocyle = 4 \r\n Bicycle = 5 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "InternalVehicleType": { + "description": "\r\n\r\n None = 0 \r\n Personal = 1 \r\n Professional = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "CurrentValidator_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "LastValidatorReminderDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Comments": { + "type": "string", + "uniqueItems": false + }, + "State": { + "description": "\r\n\r\n Disabled = 0 \r\n Active = 1 \r\n Submitted = 2 \r\n Approved = 3 \r\n Rejected = 4 \r\n All = -1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "ExternalId": { + "type": "string", + "uniqueItems": false + }, + "AdministrativePower": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "IsActive": { + "type": "boolean", + "uniqueItems": false + }, + "AttachedFilesCount": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "CreationType": { + "description": "\r\n\r\n UserCreated = 0 \r\n DefaultVehicle = 1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "Company_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "StartDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "AssignmentState": { + "description": "\r\n\r\n All = 0 \r\n Assigned = 1 \r\n Free = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "IsReadOnly": { + "type": "boolean", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "CreationVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SyncState": { + "description": "\r\n\r\n AddLocal = 0 \r\n DeleteLocal = 1 \r\n Sync = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "Vehicle" + }, + "AddOrUpdateProjectInput": { + "required": [ + "HasBillable", + "IsActive", + "ExternalId", + "Name", + "ProjectRef", + "ForAllCompany" + ], + "properties": { + "HasBillable": { + "description": "Specifies if expenses assigned to this project can be billable to client or not.", + "type": "boolean", + "uniqueItems": false + }, + "StartDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "description": "If the project is active or not.", + "type": "boolean", + "uniqueItems": false + }, + "MileageConfigurations": { + "description": "Mileage Configurations of the project.", + "type": "string", + "uniqueItems": false + }, + "Address": { + "description": "Address of the project.", + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "description": "Zip code of the project.", + "type": "string", + "uniqueItems": false + }, + "City": { + "description": "City of the project.", + "type": "string", + "uniqueItems": false + }, + "ExternalId": { + "description": "External identifier of the project.", + "type": "string", + "uniqueItems": false + }, + "Name": { + "description": "Name of the project.", + "type": "string", + "uniqueItems": false + }, + "ProjectRef": { + "description": "Reference of the project.", + "type": "string", + "uniqueItems": false + }, + "Validator_Id": { + "description": "Unique identifier of the project validator.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Reviewer_Id": { + "description": "Unique identifier of the project reviewer.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ClientName": { + "description": "Name of the client.", + "type": "string", + "uniqueItems": false + }, + "ForAllCompany": { + "description": "If the project is for all company or not.", + "type": "boolean", + "uniqueItems": false + }, + "IsBillableDefaultValue": { + "description": "Expenses assigned to the project are billable by default.", + "type": "boolean", + "uniqueItems": false + }, + "PayId2": { + "description": "First analytical axis.", + "type": "string", + "uniqueItems": false + }, + "Currency": { + "description": "Currency of the project.", + "type": "string", + "uniqueItems": false + }, + "ExtraData": { + "description": "Extrat data for the project.", + "type": "string", + "uniqueItems": false + }, + "ProjectUseType": { + "description": "Enum flag attribute which is the use type of the project: \r\n\r\n Invoice = 1 \r\n Purchase = 2 \r\n Subscription = 4 \r\n Advance = 8 \r\n MissionOrder = 16 \r\n MileageOnly = 32 \r\n InvoiceOnly = 64 \r\n VirtualCard = 128 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128 + ] + }, + "Description": { + "description": "Description about the project.", + "type": "string", + "uniqueItems": false + }, + "CategoriesIds": { + "description": "Unique identifiers of the categories.If it's empty, the project will be applicable to all categories.", + "type": "string", + "uniqueItems": false + }, + "TagsToAssign": { + "description": "List of tags' names that will be assigned to the project.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + }, + "TagsToUnassign": { + "description": "List of tags' names that will be unassigned from the project.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "AddOrUpdateProjectInput" + }, + "AddReceiptInput": { + "required": [ + "UserId", + "ReceiptContent", + "ReceiptName" + ], + "properties": { + "UserId": { + "description": "Unique identifier of the user.", + "type": "string", + "uniqueItems": false + }, + "ReceiptContent": { + "description": "Content of the receipt on base 64.", + "type": "string", + "uniqueItems": false + }, + "ReceiptName": { + "description": "Name of the receipt.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "AddReceiptInput" + }, + "AddUserProjectInput": { + "required": [ + "ExternalId", + "ProjectExternalId", + "HasBillable", + "IsActive", + "UserMail", + "UserPayId", + "ElementType" + ], + "properties": { + "ExternalId": { + "description": "External identifier of the user project.", + "type": "string", + "uniqueItems": false + }, + "ProjectExternalId": { + "description": "External identifier of the project.", + "type": "string", + "uniqueItems": false + }, + "HasBillable": { + "description": "If the project has billable expenses or not.", + "type": "boolean", + "uniqueItems": false + }, + "StartDate": { + "type": "string", + "description": "Start date of the project.", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "type": "string", + "description": "End date of the project.", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "description": "If the project is active or not.", + "type": "boolean", + "uniqueItems": false + }, + "MileageConfigurations": { + "description": "Mileage Configurations of the project.", + "type": "string", + "uniqueItems": false + }, + "Address": { + "description": "Address of the project.", + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "description": "Zip code of the project.", + "type": "string", + "uniqueItems": false + }, + "City": { + "description": "City of the project.", + "type": "string", + "uniqueItems": false + }, + "UserMail": { + "description": "Mail of the user assigned to the project.", + "type": "string", + "uniqueItems": false + }, + "UserPayId": { + "description": "Serail of the user assigned to the project.", + "type": "string", + "uniqueItems": false + }, + "ElementType": { + "description": "Type of the element : \r\n\r\n Invoice = 1 \r\n Mission = 2 \r\n User = 3 \r\n UserCollectorConnection = 4 \r\n Company = 5 \r\n Partner = 6 \r\n PartnerUser = 7 \r\n BackendUser = 8 \r\n DelegateAccess = 9 \r\n PartnerContract = 10 \r\n PartnerBill = 11 \r\n VirtualCard = 12 \r\n CompanyConfigurationSettings = 13 \r\n PartnerConfigurationSettings = 14 \r\n ExportFormat = 15 \r\n PartnerExportFormat = 16 \r\n ImportFormat = 17 \r\n CompanyOffer = 18 \r\n CompanyBill = 19 \r\n CompanyContract = 20 \r\n Project = 21 \r\n ProPaymentInstrument = 22 \r\n FavoritePlaces = 23 \r\n OrangeApiUser = 24 \r\n UserProject = 25 \r\n CustomField = 26 \r\n Contact = 27 \r\n Card = 28 \r\n Rule = 29 \r\n Tag = 30 \r\n CustomFieldValue = 31 \r\n UserCustomFieldValue = 32 \r\n CompanyIntegrationSettings = 33 \r\n CompanyIntegration = 34 \r\n UserBankAccount = 35 \r\n CompanyBankAccount = 36 \r\n PaymentInstrument = 37 \r\n Category = 38 \r\n Vehicle = 39 \r\n TagAssignment = 40 \r\n CompanyContact = 41 \r\n Validator = 42 \r\n UserWithValidators = 43 \r\n CompanySftp = 44 \r\n CompanyOrder = 45 \r\n Supplier = 46 \r\n CustomIkRate = 47 \r\n DefaultIkRate = 48 \r\n ExtraSettings = 49 \r\n SSo = 50 \r\n CustomIntegration = 51 \r\n AccountSettings = 52 \r\n Perdiem = 53 \r\n MileageConfiguration = 54 \r\n FieldPosition = 55 \r\n VirtualPayment = 56 \r\n LegalStorage = 57 \r\n MobileConfiguration = 58 \r\n BICube = 59 \r\n ExportCustom = 60 \r\n Domain = 61 \r\n BiConfiguration = 62 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62 + ] + }, + "ExtraData": { + "description": "Extrat data for the project.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "AddUserProjectInput" + }, + "ContactInput": { + "required": [ + "ContactFirstName", + "ContactLastName", + "ContactMail", + "ContactCountryCode", + "IsCoworker", + "IsShared" + ], + "properties": { + "ContactFirstName": { + "description": "First name of the contact.", + "type": "string", + "uniqueItems": false + }, + "ContactLastName": { + "description": "Last name of the contact.", + "type": "string", + "uniqueItems": false + }, + "ContactRole": { + "description": "Role of the contact.", + "type": "string", + "uniqueItems": false + }, + "ContactMail": { + "description": "Mail of the contact.", + "type": "string", + "uniqueItems": false + }, + "PhoneNumber": { + "description": "Phone number of the contact.", + "type": "string", + "uniqueItems": false + }, + "ContactAddress": { + "description": "Address of the contact.", + "type": "string", + "uniqueItems": false + }, + "ContactZipCode": { + "description": "Zip code of the contact.", + "type": "string", + "uniqueItems": false + }, + "ContactCity": { + "description": "City of the contact.", + "type": "string", + "uniqueItems": false + }, + "ContactCountryCode": { + "description": "Country code of the contact.", + "type": "string", + "uniqueItems": false + }, + "IsCoworker": { + "description": "Shows if the contact is a coworker or not.", + "type": "boolean", + "uniqueItems": false + }, + "IsShared": { + "description": "Shows if the contact is shared or not with all employees.", + "type": "boolean", + "uniqueItems": false + }, + "ContactCompanyName": { + "description": "Name of the contact company.", + "type": "string", + "uniqueItems": false + }, + "ContactCompanyMail": { + "description": "Mail of the contact company.", + "type": "string", + "uniqueItems": false + }, + "ContactCompanyWebSite": { + "description": "Website of the contact company.", + "type": "string", + "uniqueItems": false + }, + "ContactCompanyPhoneNumber": { + "description": "Phone number of the contact company.", + "type": "string", + "uniqueItems": false + }, + "ContactCompanyAddress": { + "description": "Address of the contact company.", + "type": "string", + "uniqueItems": false + }, + "ContactCompanyZipCode": { + "description": "Zip code of the contact company.", + "type": "string", + "uniqueItems": false + }, + "ContactCompanyCity": { + "description": "City of the contact company.", + "type": "string", + "uniqueItems": false + }, + "ContactCompanyCountryCode": { + "description": "Country code of the contact company.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ContactInput" + }, + "CustomFieldValueInput": { + "required": [ + "Name", + "Value", + "ExternalId", + "IsActive" + ], + "properties": { + "Name": { + "description": "Name of the custom field value.", + "type": "string", + "uniqueItems": false + }, + "Value": { + "description": "Value of the custom field value.", + "type": "string", + "uniqueItems": false + }, + "ExternalId": { + "description": "External identifier of the custom field value.", + "type": "string", + "uniqueItems": false + }, + "IsActive": { + "description": "This boolean represents the custom field state whether it's hidden or visible.", + "type": "boolean", + "uniqueItems": false + }, + "Validator_Id": { + "description": "The validator of the custom field value.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Reviewer_Id": { + "description": "The reviewer of the custom field value.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "StartDate": { + "description": "The starting date of the use of the custom field value.", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "description": "The ending date of the use of the custom field value.", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "UseType": { + "description": "Enum flag attribute which is the use type of the custom field value : \r\n\r\n Invoice = 1 \r\n Purchase = 2 \r\n Subscription = 4 \r\n Advance = 8 \r\n MissionOrder = 16 \r\n MileageOnly = 32 \r\n InvoiceOnly = 64 \r\n VirtualCard = 128 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128 + ] + }, + "TagsToAssign": { + "description": "List of tags' names that will be assigned to the user.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "CustomFieldValueInput" + }, + "QuickExpenseInput": { + "required": [ + "FileToSend", + "TransactionDate" + ], + "properties": { + "FileToSend": { + "description": "The file to Send on bease64.", + "type": "string", + "uniqueItems": false + }, + "Title": { + "description": "Tiltle of the expense.", + "type": "string", + "uniqueItems": false + }, + "TransactionAmount": { + "description": "Transaction amount of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "VatRates": { + "description": "Vate rates of the expense.", + "type": "string", + "uniqueItems": false + }, + "VatAmounts": { + "description": "Vate amounts of the expense.", + "type": "string", + "uniqueItems": false + }, + "CurrencyCode": { + "description": "Currency code of the expense.", + "type": "string", + "uniqueItems": false + }, + "TransactionDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "MerchantName": { + "description": "Merchant name of the expense.", + "type": "string", + "uniqueItems": false + }, + "LocationCountry": { + "description": "Location country of the expense.", + "type": "string", + "uniqueItems": false + }, + "LocationCity": { + "description": "Location city of the expense.", + "type": "string", + "uniqueItems": false + }, + "Comment": { + "description": "Comment of the expense.", + "type": "string", + "uniqueItems": false + }, + "MerchantExpenseId": { + "description": "Unique expense identifier of the merchant.", + "type": "string", + "uniqueItems": false + }, + "IsEncrypted": { + "description": "If the expense is encrypted ot not.", + "type": "boolean", + "uniqueItems": false + }, + "ExpenseUseType": { + "description": "Enum flag attribute which is the use type of the expense: \r\n\r\n Invoice = 1 \r\n Advance = 2 \r\n Purchase = 4 \r\n Subscription = 8 \r\n MissionOrder = 16 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 4, + 8, + 16 + ] + }, + "PaymentTypeCode": { + "description": "Payment type code of the expense.", + "type": "string", + "uniqueItems": false + }, + "ExpenseTypeCode": { + "description": "Type code of the expense.", + "type": "string", + "uniqueItems": false + }, + "FileType": { + "description": "File type of the expense.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "QuickExpenseInput" + }, + "ReportUpdateStatusInput": { + "required": [ + "Operation", + "Message" + ], + "properties": { + "Operation": { + "description": "The operation type that will be apply to the report.\r\n\r\n None = 0 \r\n Submit = 2 \r\n Reject = 3 \r\n Validate = 4 \r\n Close = 5 \r\n ValidateAndExport = 6 \r\n Reimburse = 7 \r\n ValidatedByAccountant = 8 \r\n Tag = 9 \r\n CloseAndTag = 10 \r\n Disable = 11 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11 + ] + }, + "Message": { + "description": "The update comment that will be show to the owner's report.", + "type": "string", + "uniqueItems": false + }, + "InvoiceIdsToReject": { + "description": "List of the invoice that will be reject.", + "type": "array", + "items": { + "type": "string", + "format": "guid" + }, + "uniqueItems": false + }, + "AccountingPeriod": { + "description": "The accounting period of the report.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ReportUpdateStatusInput" + }, + "TagsToAssignOrUnassignInput": { + "required": [ + "ElementsToTag", + "ElementsType" + ], + "properties": { + "ExistingTagsToAssign": { + "description": "List of names of existing tags to assign.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + }, + "ExistingTagsToUnassign": { + "description": "List of names of existing tags to unassign.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + }, + "ElementsToTag": { + "description": "List of unique identifiers of elements to tag.", + "type": "array", + "items": { + "type": "string", + "format": "guid" + }, + "uniqueItems": false + }, + "ElementsType": { + "description": "Enum attribute which is the type of the elements to tag : \r\n\r\n InvoiceAndFK = 0 \r\n Report = 1 \r\n Category = 2 \r\n Project = 3 \r\n Company = 4 \r\n PartnerUser = 5 \r\n BackendUser = 6 \r\n InvoiceOnly = 7 \r\n FkOnly = 8 \r\n Rule = 9 \r\n User = 10 \r\n CustomFieldValue = 11 \r\n SimpleTag = 12 \r\n PurchaseOnly = 13 \r\n Vehicule = 14 \r\n PaymentInstrument = 15 \r\n UserBankAccounts = 16 \r\n CompanyBankAccounts = 17 \r\n VehicleAssignment = 18 \r\n Export = 19 \r\n Trip = 20 \r\n Tag = 21 \r\n CustomField = 22 \r\n Contact = 23 \r\n Undefined = 255 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 255 + ] + } + }, + "type": "object", + "format": "TagsToAssignOrUnassignInput" + }, + "Address": { + "properties": { + "StreetName": { + "description": "StreetName", + "type": "string", + "uniqueItems": false + }, + "CountryName": { + "type": "string", + "uniqueItems": false + }, + "CountryCode": { + "type": "string", + "uniqueItems": false + }, + "CityName": { + "type": "string", + "uniqueItems": false + }, + "CityCode": { + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "Address" + }, + "Breakdown": { + "required": [ + "Type", + "Amount", + "Currency" + ], + "properties": { + "Type": { + "description": "Type of the breakDown. can be: BASE, TAXES, FEE", + "type": "string", + "uniqueItems": false + }, + "Amount": { + "description": "The amount of the price for a given currency.", + "type": "number", + "format": "double", + "uniqueItems": false + }, + "Currency": { + "description": "The currency code of the amount in iso-alpha-3 code. e.g: EUR, USD", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "Breakdown" + }, + "CustomDataField": { + "properties": { + "Id": { + "description": "External identifier of the custom data field", + "type": "string", + "uniqueItems": false + }, + "Label": { + "description": "Label of the custom data field", + "type": "string", + "uniqueItems": false + }, + "Value": { + "description": "External identifier of the custom data field", + "type": "string", + "uniqueItems": false + }, + "ENLabel": { + "description": "Label of the custom data field in english", + "type": "string", + "uniqueItems": false + }, + "FRLabel": { + "description": "Label of the custom data field in frensh", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "CustomDataField" + }, + "Location": { + "required": [ + "Type", + "Name" + ], + "properties": { + "Type": { + "description": "Defines what kind of location it is: Airport, TrainStation, Hotel", + "type": "string", + "uniqueItems": false + }, + "Name": { + "description": "The name of the airport, or the station, or the hotel.", + "type": "string", + "uniqueItems": false + }, + "Address": { + "$ref": "#/definitions/Address" + } + }, + "type": "object", + "format": "Location" + }, + "OriginDestination": { + "required": [ + "Segments" + ], + "properties": { + "Segments": { + "description": "Segments that composes the Trip Origin Destination. If a flight Paris \u2192 New York as a stop in London, it will have 2 segments: \n 1 - Paris \u2192 London \n 2 - London \u2192 New York", + "type": "array", + "items": { + "$ref": "#/definitions/Segment" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "OriginDestination" + }, + "Price": { + "required": [ + "Currency", + "Amount" + ], + "properties": { + "Currency": { + "description": "The currency code of the amount in iso-alpha-3 code. e.g: EUR, USD", + "type": "string", + "uniqueItems": false + }, + "Amount": { + "description": "The amount of the price for a given currency.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "Breakdowns": { + "description": "Contains the list of Breakdown objects describing how the price is composed such as: product amount, fee amount, taxes amount", + "type": "array", + "items": { + "$ref": "#/definitions/Breakdown" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "Price" + }, + "Segment": { + "required": [ + "Departure", + "Arrival" + ], + "properties": { + "Departure": { + "description": "The segment's departure.", + "$ref": "#/definitions/SegmentStep" + }, + "Arrival": { + "description": "The segment's arrival.", + "$ref": "#/definitions/SegmentStep" + }, + "Carrier": { + "description": "This is the carrier Object, this is the company operating the flight.", + "$ref": "#/definitions/ServiceProvider" + }, + "Provider": { + "description": "This is the provider Object, this is the company selling the ticket.", + "$ref": "#/definitions/ServiceProvider" + }, + "BookingClass": { + "description": "The booking class code. Used for train and flight.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "Segment" + }, + "SegmentStep": { + "required": [ + "Location", + "DateTime" + ], + "properties": { + "Location": { + "description": "Location", + "$ref": "#/definitions/Location" + }, + "DateTime": { + "type": "string", + "format": "date-time", + "uniqueItems": false + } + }, + "type": "object", + "format": "SegmentStep" + }, + "ServiceProvider": { + "properties": { + "Code": { + "description": "Code of the company", + "type": "string", + "uniqueItems": false + }, + "Name": { + "description": "Name of the company", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ServiceProvider" + }, + "TripBooking": { + "required": [ + "ExpenseId", + "ExpenseType", + "State", + "Price" + ], + "properties": { + "ExpenseId": { + "description": "A unique identifier of the booking.", + "type": "string", + "uniqueItems": false + }, + "Label": { + "description": "Label of the booking", + "type": "string", + "uniqueItems": false + }, + "BookingLink": { + "description": "Direct link to the booking.", + "type": "string", + "uniqueItems": false + }, + "ExpenseType": { + "description": "The type of the booking. Can be: \r\n\r\n HOTEL, \r\n TRAIN, \r\n FLIGHT, \r\n CAR, \r\n GROUND (for taxi or bus), \r\n FEE \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "State": { + "description": "the state of the booking. Can be: \r\n\r\n PENDING, \r\n BOOKED, \r\n CANCELLED \r\n", + "type": "string", + "uniqueItems": false + }, + "Price": { + "description": "The price of the booking", + "$ref": "#/definitions/Price" + }, + "OriginDestinations": { + "description": "List of orgin destinations that composes the trip. This is required for flight, taxi or bus bookings.", + "type": "array", + "items": { + "$ref": "#/definitions/OriginDestination" + }, + "uniqueItems": false + }, + "RouteNumber": { + "description": "List of route numbers of the trip.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + }, + "Vehicle": { + "description": "The vehicle of the trip for car booking.", + "$ref": "#/definitions/TripVehicle" + }, + "PickUp": { + "description": "Pickup segment of the booking. Specified for car bookings", + "$ref": "#/definitions/SegmentStep" + }, + "DropOff": { + "description": "Dropoff segment of the booking. Specified for car bookings", + "$ref": "#/definitions/SegmentStep" + }, + "CheckIn": { + "description": "Checkin date. This is required for hotel bookings.", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "CheckOut": { + "description": "Checkout date. This is required for hotel bookings.", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Location": { + "description": "Hotel booking location. This is required for hotel bookings.", + "$ref": "#/definitions/Location" + }, + "StarRating": { + "description": "Hotel booking star rating.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "TripBooking" + }, + "TripVehicle": { + "properties": { + "Type": { + "description": "Type of the vehicle.", + "type": "string", + "uniqueItems": false + }, + "Name": { + "description": "Name of the vehicle.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "TripVehicle" + }, + "UpdateCustomFieldValueInput": { + "required": [ + "Id", + "Name", + "Value", + "IsActive" + ], + "properties": { + "Id": { + "description": "Unique Identifier of the custom field value.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "description": "Name of the custom field value.", + "type": "string", + "uniqueItems": false + }, + "Value": { + "description": "Value of the custom field value.", + "type": "string", + "uniqueItems": false + }, + "IsActive": { + "description": "This boolean represents the custom field state whether it's hidden or visible.", + "type": "boolean", + "uniqueItems": false + }, + "Validator_Id": { + "description": "The validator of the custom field value.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Reviewer_Id": { + "description": "The reviewer of the custom field value.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "StartDate": { + "description": "The starting date of the use of the custom field value.", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "description": "The ending date of the use of the custom field value.", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "UseType": { + "description": "Enum flag attribute which is the use type of the custom field value : \r\n\r\n Invoice = 1 \r\n Purchase = 2 \r\n Subscription = 4 \r\n Advance = 8 \r\n MissionOrder = 16 \r\n MileageOnly = 32 \r\n InvoiceOnly = 64 \r\n VirtualCard = 128 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128 + ] + }, + "TagsToAssign": { + "description": "List of tags' names that will be assigned to the user.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + }, + "TagsToUnassign": { + "description": "List of tags' names that will be unassigned from the user.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "UpdateCustomFieldValueInput" + }, + "UpdateProjectStateInput": { + "required": [ + "ItemIds", + "ProjectState" + ], + "properties": { + "ItemIds": { + "description": "List of projects' unique identifiers to update.", + "type": "array", + "items": { + "type": "string", + "format": "guid" + }, + "uniqueItems": false + }, + "ProjectState": { + "description": "New state: true for active and false for disable.", + "type": "boolean", + "uniqueItems": false + } + }, + "type": "object", + "format": "UpdateProjectStateInput" + }, + "UpdateTagsStateInput": { + "required": [ + "TagsNames", + "TagsState" + ], + "properties": { + "TagsNames": { + "description": "List of tags' names to update.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + }, + "TagsState": { + "description": "New state: true for active and false for disable.", + "type": "boolean", + "uniqueItems": false + } + }, + "type": "object", + "format": "UpdateTagsStateInput" + }, + "UpdateUserProjectInput": { + "required": [ + "ExternalId", + "ProjectExternalId", + "HasBillable", + "UserMail", + "ElementType" + ], + "properties": { + "ExternalId": { + "description": "External identifier of the user project.", + "type": "string", + "uniqueItems": false + }, + "ProjectExternalId": { + "description": "External identifier of the project.", + "type": "string", + "uniqueItems": false + }, + "HasBillable": { + "description": "If the project has billable expenses or not.", + "type": "boolean", + "uniqueItems": false + }, + "StartDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "description": "If the project is active or not.", + "type": "boolean", + "uniqueItems": false + }, + "MileageConfigurations": { + "description": "Mileage Configurations of the project.", + "type": "string", + "uniqueItems": false + }, + "Address": { + "description": "Address of the project.", + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "description": "Zip code of the project.", + "type": "string", + "uniqueItems": false + }, + "City": { + "description": "City of the project.", + "type": "string", + "uniqueItems": false + }, + "UserMail": { + "description": "Mail of the user assigned to the project.", + "type": "string", + "uniqueItems": false + }, + "UserPayId": { + "description": "Serail of the user assigned to the project.", + "type": "string", + "uniqueItems": false + }, + "ElementType": { + "description": "Type of the element : \r\n\r\n Invoice = 1 \r\n Mission = 2 \r\n User = 3 \r\n UserCollectorConnection = 4 \r\n Company = 5 \r\n Partner = 6 \r\n PartnerUser = 7 \r\n BackendUser = 8 \r\n DelegateAccess = 9 \r\n PartnerContract = 10 \r\n PartnerBill = 11 \r\n VirtualCard = 12 \r\n CompanyConfigurationSettings = 13 \r\n PartnerConfigurationSettings = 14 \r\n ExportFormat = 15 \r\n PartnerExportFormat = 16 \r\n ImportFormat = 17 \r\n CompanyOffer = 18 \r\n CompanyBill = 19 \r\n CompanyContract = 20 \r\n Project = 21 \r\n ProPaymentInstrument = 22 \r\n FavoritePlaces = 23 \r\n OrangeApiUser = 24 \r\n UserProject = 25 \r\n CustomField = 26 \r\n Contact = 27 \r\n Card = 28 \r\n Rule = 29 \r\n Tag = 30 \r\n CustomFieldValue = 31 \r\n UserCustomFieldValue = 32 \r\n CompanyIntegrationSettings = 33 \r\n CompanyIntegration = 34 \r\n UserBankAccount = 35 \r\n CompanyBankAccount = 36 \r\n PaymentInstrument = 37 \r\n Category = 38 \r\n Vehicle = 39 \r\n TagAssignment = 40 \r\n CompanyContact = 41 \r\n Validator = 42 \r\n UserWithValidators = 43 \r\n CompanySftp = 44 \r\n CompanyOrder = 45 \r\n Supplier = 46 \r\n CustomIkRate = 47 \r\n DefaultIkRate = 48 \r\n ExtraSettings = 49 \r\n SSo = 50 \r\n CustomIntegration = 51 \r\n AccountSettings = 52 \r\n Perdiem = 53 \r\n MileageConfiguration = 54 \r\n FieldPosition = 55 \r\n VirtualPayment = 56 \r\n LegalStorage = 57 \r\n MobileConfiguration = 58 \r\n BICube = 59 \r\n ExportCustom = 60 \r\n Domain = 61 \r\n BiConfiguration = 62 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62 + ] + }, + "ExtraData": { + "description": "Extrat data for the project.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "UpdateUserProjectInput" + }, + "UserInviteInput": { + "required": [ + "LastName", + "FirstName", + "Mail", + "Language", + "UserType", + "UserRole" + ], + "properties": { + "LastName": { + "description": "Last name of the user.", + "type": "string", + "uniqueItems": false + }, + "FirstName": { + "description": "First name of the user.", + "type": "string", + "uniqueItems": false + }, + "Mail": { + "description": "Mail of the user.", + "type": "string", + "uniqueItems": false + }, + "MailAlias": { + "description": "Mail alias of the user and it should be different from user mail.", + "type": "string", + "uniqueItems": false + }, + "PayId": { + "description": "Serial of the user.", + "type": "string", + "uniqueItems": false + }, + "PayId2": { + "description": "First analytical axis.", + "type": "string", + "uniqueItems": false + }, + "PayId3": { + "description": "Second analytical axis.", + "type": "string", + "uniqueItems": false + }, + "PayId4": { + "description": "Third analytical axis.", + "type": "string", + "uniqueItems": false + }, + "PayId5": { + "description": "Forth analytical axis.", + "type": "string", + "uniqueItems": false + }, + "PayId6": { + "description": "Fifth analytical axis.", + "type": "string", + "uniqueItems": false + }, + "Language": { + "description": "Language of the user: FR, US, SE...", + "type": "string", + "uniqueItems": false + }, + "LocalCurrency": { + "description": "Local currency of the user: EUR, TND, USD...", + "type": "string", + "uniqueItems": false + }, + "LocalCountry": { + "description": "Local country of the user.", + "type": "string", + "uniqueItems": false + }, + "ManagerId": { + "description": "Unique identifier of the second validator.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ReviewerId": { + "description": "Unique identifier of the first validator.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserType": { + "description": "Enum flag attribute which is the type of the user and it is necessary to combine the user type 'Employee' with the other types for example: Employee + Administrator or Employee + Accountant. The user typs are : \r\n\r\n None = 0 \r\n Employee = 1 \r\n Administrator = 2 \r\n Accountant = 4 \r\n CanRefund = 8 \r\n NotDisabledInImport = 16 \r\n NotUpdatedInImport = 32 \r\n UserTypeToIgnore = 56 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 4, + 8, + 16, + 32, + 56 + ] + }, + "Vendor": { + "description": "Name of the vendor", + "type": "string", + "uniqueItems": false + }, + "UserRole": { + "description": "Enum flag attribute which is the role of the user : \r\n\r\n All = 0 \r\n Users = 2 \r\n Missions = 4 \r\n Invoices = 8 \r\n Projects = 16 \r\n Rules = 32 \r\n Settings = 64 \r\n Integrations = 128 \r\n SubscriptionAndBills = 256 \r\n BiReports = 512 \r\n Categories = 1024 \r\n Mileage = 2048 \r\n ReadOnly = 4096 \r\n Vehicles = 8192 \r\n SuppliersManagement = 16384 \r\n Advances = 32768 \r\n VirtualPayment = 65536 \r\n Purchases = 131072 \r\n CustomFields = 262144 \r\n ProPaymentInstruments = 524288 \r\n MissionOrders = 1048576 \r\n BankAccounts = 2097152 \r\n Bookings = 4194304 \r\n Contact = 8388608 \r\n IntegrationsHistory = 16777216 \r\n TechnicalIntegration = 33554432 \r\n Reimbursements = 67108864 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024, + 2048, + 4096, + 8192, + 16384, + 32768, + 65536, + 131072, + 262144, + 524288, + 1048576, + 2097152, + 4194304, + 8388608, + 16777216, + 33554432, + 67108864 + ] + }, + "DefaultProjectId": { + "description": "Unique identifier of the user default project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "IKRatesId": { + "description": "Unique identifier of the mileage compensation rates.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "AdditionalValidators": { + "description": "List of additional validators of the user.", + "type": "array", + "items": { + "$ref": "#/definitions/ValidatorInput" + }, + "uniqueItems": false + }, + "TagsToAssign": { + "description": "List of tags' names that will be assigned to the user.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "UserInviteInput" + }, + "UserUpdateInput": { + "properties": { + "LastName": { + "description": "Last name of the user.", + "type": "string", + "uniqueItems": false + }, + "FirstName": { + "description": "First name of the user.", + "type": "string", + "uniqueItems": false + }, + "Mail": { + "description": "Mail of the user.", + "type": "string", + "uniqueItems": false + }, + "MailAlias": { + "description": "Mail alias of the user.", + "type": "string", + "uniqueItems": false + }, + "PayId": { + "description": "Serial of the user.", + "type": "string", + "uniqueItems": false + }, + "PayId2": { + "description": "First analytical axis.", + "type": "string", + "uniqueItems": false + }, + "PayId3": { + "description": "Second analytical axis.", + "type": "string", + "uniqueItems": false + }, + "PayId4": { + "description": "Third analytical axis.", + "type": "string", + "uniqueItems": false + }, + "PayId5": { + "description": "Forth analytical axis.", + "type": "string", + "uniqueItems": false + }, + "PayId6": { + "description": "Fifth analytical axis.", + "type": "string", + "uniqueItems": false + }, + "Language": { + "description": "Language of the user: FR, US, SE...", + "type": "string", + "uniqueItems": false + }, + "LocalCurrency": { + "description": "Local currency of the user: EUR, TND, USD...", + "type": "string", + "uniqueItems": false + }, + "LocalCountry": { + "description": "Local country of the user.", + "type": "string", + "uniqueItems": false + }, + "Manager_Id": { + "description": "Unique identifier of second validator.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Reviewer_Id": { + "description": "Unique identifier of the first validaor.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserType": { + "description": "Enum flag attribute which is the type of the user and it is necessary to combine the user type 'Employee' with the other types for exemple: Employee + Administrator or Employee + Accountant. The user typs are : \r\n\r\n None = 0 \r\n Employee = 1 \r\n Administrator = 2 \r\n Accountant = 4 \r\n CanRefund = 8 \r\n NotDisabledInImport = 16 \r\n NotUpdatedInImport = 32 \r\n UserTypeToIgnore = 56 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 4, + 8, + 16, + 32, + 56 + ] + }, + "Vendor": { + "description": "The name of the vendor.", + "type": "string", + "uniqueItems": false + }, + "UserRole": { + "description": "Enum flag attribute which is the role of the user : \r\n\r\n All = 0 \r\n Users = 2 \r\n Missions = 4 \r\n Invoices = 8 \r\n Projects = 16 \r\n Rules = 32 \r\n Settings = 64 \r\n Integrations = 128 \r\n SubscriptionAndBills = 256 \r\n BiReports = 512 \r\n Categories = 1024 \r\n Mileage = 2048 \r\n ReadOnly = 4096 \r\n Vehicles = 8192 \r\n SuppliersManagement = 16384 \r\n Advances = 32768 \r\n VirtualPayment = 65536 \r\n Purchases = 131072 \r\n CustomFields = 262144 \r\n ProPaymentInstruments = 524288 \r\n MissionOrders = 1048576 \r\n BankAccounts = 2097152 \r\n Bookings = 4194304 \r\n Contact = 8388608 \r\n IntegrationsHistory = 16777216 \r\n TechnicalIntegration = 33554432 \r\n Reimbursements = 67108864 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024, + 2048, + 4096, + 8192, + 16384, + 32768, + 65536, + 131072, + 262144, + 524288, + 1048576, + 2097152, + 4194304, + 8388608, + 16777216, + 33554432, + 67108864 + ] + }, + "JobTitle": { + "description": "Title of the user job.", + "type": "string", + "uniqueItems": false + }, + "CanAddPurchase": { + "description": "If the user can add purchase or not.", + "type": "boolean", + "uniqueItems": false + }, + "DefaultProjectId": { + "description": "Unique identifier of the user default project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "IKRates_Id": { + "description": "Unique identifier of the mileage compensation rates.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "AdditionalValidators": { + "description": "List of additional validators of the user.", + "type": "array", + "items": { + "$ref": "#/definitions/ValidatorInput" + }, + "uniqueItems": false + }, + "TagsToAssign": { + "description": "List of tags' names that will be assigned to the user.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + }, + "TagsToUnassign": { + "description": "List of tags' names that will be unassigned from the user.", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "UserUpdateInput" + }, + "ValidatorInput": { + "required": [ + "Mail" + ], + "properties": { + "Mail": { + "description": "Mail of the validator", + "type": "string", + "uniqueItems": false + }, + "MinimumAmount": { + "description": "If the ammount exceed the ammount the expense should be sent to the validator", + "type": "number", + "format": "decimal", + "uniqueItems": false + } + }, + "type": "object", + "format": "ValidatorInput" + }, + "AddOrUpdateEntityResult": { + "properties": { + "Id": { + "description": "Unique identifier of the updated project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ExternalId": { + "description": "The External identifier of the updated project.", + "type": "string", + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "AddOrUpdateEntityResult" + }, + "BaseResult": { + "properties": { + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "BaseResult" + }, + "BaseResultExportResponse": { + "properties": { + "ResultItem": { + "$ref": "#/definitions/ExportResponse" + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "BaseResultExportResponse" + }, + "BaseResultProjectResponse": { + "properties": { + "ResultItem": { + "$ref": "#/definitions/ProjectResponse" + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "BaseResultProjectResponse" + }, + "BaseResultListAddOrUpdateEntityResult": { + "properties": { + "ResultItem": { + "description": "Item sent by the server.", + "type": "array", + "items": { + "$ref": "#/definitions/AddOrUpdateEntityResult" + }, + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "BaseResultListAddOrUpdateEntityResult" + }, + "BaseResultListBaseResult": { + "properties": { + "ResultItem": { + "description": "Item sent by the server.", + "type": "array", + "items": { + "$ref": "#/definitions/BaseResult" + }, + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "BaseResultListBaseResult" + }, + "BaseResultListEventResponse": { + "properties": { + "ResultItem": { + "description": "Item sent by the server.", + "type": "array", + "items": { + "$ref": "#/definitions/EventResponse" + }, + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "BaseResultListEventResponse" + }, + "BaseResultListExportFormatResponse": { + "properties": { + "ResultItem": { + "description": "Item sent by the server.", + "type": "array", + "items": { + "$ref": "#/definitions/ExportFormatResponse" + }, + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "BaseResultListExportFormatResponse" + }, + "BaseResultListUpdateUserResult": { + "properties": { + "ResultItem": { + "description": "Item sent by the server.", + "type": "array", + "items": { + "$ref": "#/definitions/UpdateUserResult" + }, + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "BaseResultListUpdateUserResult" + }, + "BrokenRuleResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the broken rule.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "description": "Name of the broken rule.", + "type": "string", + "uniqueItems": false + }, + "Description": { + "description": "Description of the broken rule.", + "type": "string", + "uniqueItems": false + }, + "DescriptionForCredit": { + "description": "Description for credit of the broken rule.", + "type": "string", + "uniqueItems": false + }, + "Budget": { + "description": "Budget of the broken rule.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "RuleType": { + "description": "Type of the broken rule : \r\n\r\n Mandatory = 0 \r\n Warning = 1 \r\n ReimbursableByCeiling = 2 \r\n ReimbursableByFlatRate = 3 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3 + ] + }, + "Currency": { + "description": "Currency of the broken rule.", + "type": "string", + "uniqueItems": false + }, + "AllowExceptions": { + "description": "Shows if exceptions are allowed in broken rule.", + "type": "boolean", + "uniqueItems": false + }, + "RuleElementType": { + "description": "Type of the rule element : \r\n\r\n Invoices = 0 \r\n VirtualCards = 1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1 + ] + }, + "IntervalType": { + "description": "Type of the interval of the broken rule : \r\n\r\n Day = 0 \r\n WeekDays = 1 \r\n Month = 2 \r\n Year = 3 \r\n Invoice = 4 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + "Language": { + "description": "Language of the broken rule.", + "type": "string", + "uniqueItems": false + }, + "RuleCurrenciesWithBudget": { + "$ref": "#/definitions/TupleStringDecimal" + }, + "ForAllCompany": { + "description": "Shows if the broken rule is for all company or not.", + "type": "boolean", + "uniqueItems": false + } + }, + "type": "object", + "format": "BrokenRuleResponse" + }, + "CategoryResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the category.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "description": "Name of the category.", + "type": "string", + "uniqueItems": false + }, + "EntityName": { + "description": "Entity Name of the category.", + "type": "string", + "uniqueItems": false + }, + "Parent": { + "description": "Parent of the category (category can be linked to an other categroy).", + "type": "string", + "uniqueItems": false + }, + "Description": { + "description": "Description of the category.", + "type": "string", + "uniqueItems": false + }, + "PrimitiveCategories": { + "description": "Sub categories.", + "type": "string", + "uniqueItems": false + }, + "ParentCategory_Id": { + "description": "Unique parent identifier of the category (category can be linked to an other categroy).", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "IsActive": { + "description": "Shows if the category is active or not.", + "type": "boolean", + "uniqueItems": false + }, + "IsActiveAsDefault": { + "description": "Default category when user add new expense.", + "type": "boolean", + "uniqueItems": false + }, + "CostAccount": { + "description": "Cost account of the category.", + "type": "string", + "uniqueItems": false + }, + "VatAccount": { + "description": "VAT account of the category.", + "type": "string", + "uniqueItems": false + }, + "ExtraData": { + "description": "Additional informations about the category.", + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "description": "Creation date of the category. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "VatClaimRate": { + "description": "VAT claim rate of the category.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "VatClaimRates": { + "description": "VAT claim rate of the category by year.", + "type": "string", + "uniqueItems": false + }, + "CategoryUseType": { + "description": "Category use type : \r\n\r\n Invoices = 1 \r\n Purchases = 2 \r\n Subscriptions = 4 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 4 + ] + }, + "ExternalId": { + "description": "External identifier of the category.", + "type": "string", + "uniqueItems": false + }, + "IsReadOnly": { + "description": "Shows if the category is just read only.", + "type": "boolean", + "uniqueItems": false + }, + "CategoryTags": { + "description": "List of tags of the category.", + "type": "array", + "items": { + "$ref": "#/definitions/TagResponse" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "CategoryResponse" + }, + "ContactResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the contact.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "User_Id": { + "description": "Unique identifier of the user who added the contact.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ContactCompany_Id": { + "description": "Contact company identifier related to the contact.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "FirstName": { + "description": "First name of the contact.", + "type": "string", + "uniqueItems": false + }, + "LastName": { + "description": "Last name of the contact.", + "type": "string", + "uniqueItems": false + }, + "Role": { + "description": "Role of the contact.", + "type": "string", + "uniqueItems": false + }, + "Mail": { + "description": "Mail of the contact.", + "type": "string", + "uniqueItems": false + }, + "PhoneNumber": { + "description": "Phone number of the contact.", + "type": "string", + "uniqueItems": false + }, + "Address": { + "description": "Address of the contact.", + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "description": "Zip code of the contact.", + "type": "string", + "uniqueItems": false + }, + "City": { + "description": "City of the contact.", + "type": "string", + "uniqueItems": false + }, + "CountryCode": { + "description": "ISO Country code of the contact.", + "type": "string", + "uniqueItems": false + }, + "IsCoworker": { + "description": "Shows if the contact is a coworker.", + "type": "boolean", + "uniqueItems": false + }, + "IsShared": { + "description": "Shows if the contact is shared with all users.", + "type": "boolean", + "uniqueItems": false + }, + "CreationDate": { + "description": "Creation date of the contact. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "ExtraData": { + "description": "Additional Informations about the contact.", + "type": "string", + "uniqueItems": false + }, + "IsActive": { + "description": "Shows if the contact is active.", + "type": "boolean", + "uniqueItems": false + }, + "FullName": { + "description": "Full name of the contact.", + "type": "string", + "uniqueItems": false + }, + "ContactInfo": { + "description": "Extra Informations about the contact.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ContactResponse" + }, + "EventResponse": { + "properties": { + "EventDate": { + "description": "Date of the event. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EventType": { + "description": "Type of the event: submitMission, validateMission...\r\n\r\n SubmitMission = 1 \r\n ValidateMission = 2 \r\n RejectMission = 3 \r\n ReimburseMission = 4 \r\n CloseMission = 5 \r\n CommentMission = 6 \r\n ValidateAndExportMission = 7 \r\n UpdateInvoiceByValidator = 8 \r\n CreateMission = 9 \r\n ExportMission = 10 \r\n ExportMissionToQuickBooks = 11 \r\n PreSubmitMission = 12 \r\n ReviewAndSubmitMission = 13 \r\n UpdateAccountingPeriodByAdminOrAccountant = 14 \r\n AddUserCollectorConnection = 15 \r\n UpdateUserCollectorConnection = 16 \r\n GetUserCollectedBills = 17 \r\n StopAutoRenew = 18 \r\n ValidateUserCollectorConnection = 19 \r\n SwitchAsDelegatedUser = 20 \r\n DeleteUserCollectorConnection = 21 \r\n ExportMissionToIbiza = 22 \r\n ValidateVirtualCard = 23 \r\n RejectVirtualCard = 24 \r\n RequestVirtualCard = 25 \r\n RequestVirtualCardAndAutoApproved = 26 \r\n ValidatedPurchaseByAccountant = 27 \r\n AutoValidateMission = 28 \r\n AddProPaymentInstrument = 29 \r\n UpdateProPaymentInstrument = 30 \r\n DisableVirtualCard = 31 \r\n ExportMissionToInexweb = 32 \r\n ExportPurchaseToSapByDesign = 33 \r\n CreateRule = 34 \r\n DeleteRule = 35 \r\n UpdateRule = 36 \r\n DeleteMission = 37 \r\n RestoreMission = 38 \r\n AutoValidateAndExportMission = 39 \r\n DisconnectIntegration = 41 \r\n ExportMissionToVSA = 42 \r\n ExportInvoiceToSiebel = 43 \r\n CreateInvoice = 97 \r\n DeleteInvoice = 98 \r\n UpdateInvoice = 99 \r\n AddTag = 100 \r\n UpdateTag = 101 \r\n DeleteTag = 102 \r\n AddCompanyIntegrationSettings = 103 \r\n UpdateCompanyIntegrationSettings = 104 \r\n IntegrationStart = 105 \r\n IntegrationComplete = 106 \r\n IgnoreMissionInExport = 107 \r\n AttachCompanyToPartner = 108 \r\n PreSubmitVirtualCard = 109 \r\n ApproveVirtualCard = 110 \r\n CommentVirtualCard = 111 \r\n ReviewAndSubmitVirtualCard = 112 \r\n AutoImport = 113 \r\n AutoExport = 114 \r\n Export = 115 \r\n Import = 116 \r\n SubmitVehicle = 117 \r\n ValidateVehicle = 118 \r\n ApproveVehicle = 119 \r\n RejectVehicle = 120 \r\n CommentVehicle = 121 \r\n DisableVehicle = 122 \r\n PreSubmitVehicle = 123 \r\n AutoApproveVehicle = 124 \r\n AddBalanceExport = 125 \r\n Payment = 126 \r\n ReSubmitVehicleAfterApproval = 127 \r\n ExportMissionByAPI = 128 \r\n SplitMissionInvoicesByProblems = 129 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 41, + 42, + 43, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129 + ] + }, + "UserId": { + "description": "Unique identifier of the user.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserLastName": { + "description": "Last name of the user.", + "type": "string", + "uniqueItems": false + }, + "UserFirstName": { + "description": "First name of the user.", + "type": "string", + "uniqueItems": false + }, + "UserMail": { + "description": "Mail of the user.", + "type": "string", + "uniqueItems": false + }, + "Description": { + "description": "Description of the evnt", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "EventResponse" + }, + "ExpenseResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the expense.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "description": "Name of the expense.", + "type": "string", + "uniqueItems": false + }, + "Value": { + "description": "Value of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueToReimburse": { + "description": "Value to reimbures of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ReimbursementRate": { + "description": "Reimbursement rate of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "Description": { + "description": "Description of the expense.", + "type": "string", + "uniqueItems": false + }, + "UseType": { + "description": "Type of the expense : \r\n\r\n Invoice = 1 \r\n Advance = 2 \r\n Purchase = 4 \r\n Subscription = 8 \r\n MissionOrder = 16 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 4, + 8, + 16 + ] + }, + "DateCreation": { + "description": "Creation date of the expense. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "DateInvoice": { + "description": "Date of the expense. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "DateUtcOffset": { + "description": "Date offset of the expense.", + "type": "number", + "format": "double", + "uniqueItems": false + }, + "HasPhoto": { + "description": "Shows if the expense has photo.", + "type": "boolean", + "uniqueItems": false + }, + "Currency": { + "description": "Currency of the expense.", + "type": "string", + "uniqueItems": false + }, + "ValueInCurrency": { + "description": "Value in currency of the owner of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueInLocalCurrency": { + "description": "Value in local currency of the owner of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "MerchantInvoiceId": { + "description": "Merchant Invoice external identifier", + "type": "string", + "uniqueItems": false + }, + "MerchantCountry": { + "description": "Merchant country of the expense.", + "type": "string", + "uniqueItems": false + }, + "MerchantCity": { + "description": "Merchant city of the expense.", + "type": "string", + "uniqueItems": false + }, + "MerchantZipCode": { + "description": "Merchant zip code of the expense.", + "type": "string", + "uniqueItems": false + }, + "MerchantAddress": { + "description": "Merchant address of the expense.", + "type": "string", + "uniqueItems": false + }, + "MerchantName": { + "description": "Merchant name of the expense", + "type": "string", + "uniqueItems": false + }, + "MerchantVatNumber": { + "description": "Merchant VAT number of the expense.", + "type": "string", + "uniqueItems": false + }, + "Units": { + "description": "Number of units of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "State": { + "description": "State of the expense : \r\n\r\n Uploading = 0 \r\n Uploaded = 1 \r\n Ready = 2 \r\n Validated = 3 \r\n ValidatedByAccountant = 4 \r\n Rejected = 99 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 99 + ] + }, + "VAT": { + "$ref": "#/definitions/VATResponse" + }, + "VATAvgRate": { + "description": "VAT rate of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "AttachedFilesCount": { + "description": "Number of attached files to the expense.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "ToReimburse": { + "description": "Shows if the expense is to reimburse.", + "type": "boolean", + "uniqueItems": false + }, + "IsBillable": { + "description": "Shows if the expense is billable to client.", + "type": "boolean", + "uniqueItems": false + }, + "CustomFields": { + "description": "Custom fields of the expense.", + "type": "array", + "items": { + "$ref": "#/definitions/KeyValuePairGuidString" + }, + "uniqueItems": false + }, + "FileType": { + "description": "File type of the expense.", + "type": "string", + "uniqueItems": false + }, + "DefaultRate": { + "description": "Default rate of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "CreditSource_Id": { + "description": "Unique credit source identifier of the expense.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "User_Id": { + "description": "Unique user identifier of the expense.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Project": { + "$ref": "#/definitions/ProjectResponse" + }, + "Report": { + "$ref": "#/definitions/ReportResponse" + }, + "PaymentInstrument": { + "$ref": "#/definitions/PaymentInstrumentResponse" + }, + "Vehicle": { + "$ref": "#/definitions/VehicleResponse" + }, + "TransactionsSumValue": { + "description": "Transactions sum value of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "TransactionsSumInCurrency": { + "description": "Transactions sum value in currency of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "TransactionsSumInLocalCurrency": { + "description": "Transactions sum value in Local currency of the expense.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "PerdiemCountry": { + "description": "Country of the perdiem.", + "type": "string", + "uniqueItems": false + }, + "PerdiemCalculationPeriodType": { + "description": "Type of the perdiem calculation period : \r\n\r\n CalendarDay = 0 \r\n TwentyFourHours = 1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1 + ] + }, + "PerDiemType": { + "description": "Type of the perdiem : \r\n\r\n Time = 0 \r\n Distance = 1 \r\n IEG = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2 + ] + }, + "Category": { + "$ref": "#/definitions/CategoryResponse" + }, + "BrokenRules": { + "description": "List of broken rules of the expense.", + "type": "array", + "items": { + "$ref": "#/definitions/BrokenRuleResponse" + }, + "uniqueItems": false + }, + "IsMileage": { + "description": "Shows if the expense is Mileage.", + "type": "boolean", + "uniqueItems": false + }, + "CategoryExtraDataStr": { + "description": "Extra date for the category of the expense.", + "type": "string", + "uniqueItems": false + }, + "Guests": { + "description": "List of guests of the expense.", + "type": "array", + "items": { + "$ref": "#/definitions/GuestResponse" + }, + "uniqueItems": false + }, + "SubStatus": { + "description": "Enum flag attribute which is the substatus of the expense : \r\n\r\n All = 0 \r\n Exported = 2 \r\n Payed = 4 \r\n ExportedToIbiza = 8 \r\n RecordedByInexweb = 16 \r\n ExportedToQBO = 32 \r\n ExportedToInexweb = 64 \r\n RejectedByInexweb = 128 \r\n ExportedToVSA = 256 \r\n ExportedBalance = 512 \r\n ExportedToSiebel = 1024 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024 + ] + }, + "OwnerPayId": { + "description": "Serial of the owner of the expense.", + "type": "string", + "uniqueItems": false + }, + "OwnerPayId2": { + "description": "First analytical axis of the owner of the expense.", + "type": "string", + "uniqueItems": false + }, + "OwnerPayId3": { + "description": "Second analytical axis of the owner of the expense.", + "type": "string", + "uniqueItems": false + }, + "OwnerPayId4": { + "description": "Third analytical axis of the owner of the expense.", + "type": "string", + "uniqueItems": false + }, + "OwnerPayId5": { + "description": "Fourth analytical axis of the owner of the expense.", + "type": "string", + "uniqueItems": false + }, + "OwnerPayId6": { + "description": "Fifth analytical axis of the owner of the expense.", + "type": "string", + "uniqueItems": false + }, + "ExpenseTags": { + "description": "List of tag of the expense.", + "type": "array", + "items": { + "$ref": "#/definitions/TagResponse" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "ExpenseResponse" + }, + "ExportFormatResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the export format.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "description": "The name of export format.", + "type": "string", + "uniqueItems": false + }, + "Extension": { + "description": "The extension of the export format.", + "type": "string", + "uniqueItems": false + }, + "CodePath": { + "description": "Unique code path of the export format.", + "type": "string", + "uniqueItems": false + }, + "MissionExport": { + "description": "Shows if the export format is available for reports.", + "type": "boolean", + "uniqueItems": false + }, + "InvoicesExport": { + "description": "Shows if the export format is available for expenses.", + "type": "boolean", + "uniqueItems": false + }, + "AutoExport": { + "description": "Shows if it's an auto export format.", + "type": "boolean", + "uniqueItems": false + }, + "LastAutoExportDate": { + "description": "Date of the last auto export if it happened and if the export format is auto export format. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + } + }, + "type": "object", + "format": "ExportFormatResponse" + }, + "ExportResponse": { + "properties": { + "FileUrl": { + "description": "The url of the exported file.", + "type": "string", + "uniqueItems": false + }, + "FileExtension": { + "description": "The extension of the exported file.", + "type": "string", + "uniqueItems": false + }, + "FileName": { + "description": "The name of the exported file.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ExportResponse" + }, + "GuestResponse": { + "properties": { + "Mail": { + "description": "Mail of the guest.", + "type": "string", + "uniqueItems": false + }, + "FullName": { + "description": "Full name of the guest.", + "type": "string", + "uniqueItems": false + }, + "Id": { + "description": "Unique identifier of the guest.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "IsCoworker": { + "description": "Shows if the guest is coworker or not.", + "type": "boolean", + "uniqueItems": false + } + }, + "type": "object", + "format": "GuestResponse" + }, + "ListAndPagesCountResultCategoryResponse": { + "properties": { + "List": { + "description": "List of elements to return.", + "type": "array", + "items": { + "$ref": "#/definitions/CategoryResponse" + }, + "uniqueItems": false + }, + "PagesCount": { + "description": "Total number of pages.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "TotalListCount": { + "description": "Total number of elements per page.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ListAndPagesCountResultCategoryResponse" + }, + "ListAndPagesCountResultExpenseResponse": { + "properties": { + "List": { + "description": "List of elements to return.", + "type": "array", + "items": { + "$ref": "#/definitions/ExpenseResponse" + }, + "uniqueItems": false + }, + "PagesCount": { + "description": "Total number of pages.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "TotalListCount": { + "description": "Total number of elements per page.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ListAndPagesCountResultExpenseResponse" + }, + "ListAndPagesCountResultProjectResponse": { + "properties": { + "List": { + "description": "List of elements to return.", + "type": "array", + "items": { + "$ref": "#/definitions/ProjectResponse" + }, + "uniqueItems": false + }, + "PagesCount": { + "description": "Total number of pages.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "TotalListCount": { + "description": "Total number of elements per page.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ListAndPagesCountResultProjectResponse" + }, + "ListAndPagesCountResultReportResponse": { + "properties": { + "List": { + "description": "List of elements to return.", + "type": "array", + "items": { + "$ref": "#/definitions/ReportResponse" + }, + "uniqueItems": false + }, + "PagesCount": { + "description": "Total number of pages.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "TotalListCount": { + "description": "Total number of elements per page.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ListAndPagesCountResultReportResponse" + }, + "ListAndPagesCountResultUserResponse": { + "properties": { + "List": { + "description": "List of elements to return.", + "type": "array", + "items": { + "$ref": "#/definitions/UserResponse" + }, + "uniqueItems": false + }, + "PagesCount": { + "description": "Total number of pages.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "TotalListCount": { + "description": "Total number of elements per page.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "ListAndPagesCountResultUserResponse" + }, + "LoginResponse": { + "properties": { + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserToken": { + "type": "string", + "uniqueItems": false + }, + "LastName": { + "type": "string", + "uniqueItems": false + }, + "FirstName": { + "type": "string", + "uniqueItems": false + }, + "Address": { + "type": "string", + "uniqueItems": false + }, + "City": { + "type": "string", + "uniqueItems": false + }, + "PhoneNumber": { + "type": "string", + "uniqueItems": false + }, + "Mail": { + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "type": "string", + "uniqueItems": false + }, + "MailAlias": { + "type": "string", + "uniqueItems": false + }, + "Language": { + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "CountryCode": { + "type": "string", + "uniqueItems": false + }, + "FaxNumber": { + "type": "string", + "uniqueItems": false + }, + "Currency": { + "type": "string", + "uniqueItems": false + }, + "ShemaVersion": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Company_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Login_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Manager_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserType": { + "description": "\r\n\r\n None = 0 \r\n Employee = 1 \r\n Administrator = 2 \r\n Accountant = 4 \r\n CanRefund = 8 \r\n NotDisabledInImport = 16 \r\n NotUpdatedInImport = 32 \r\n UserTypeToIgnore = 56 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "UserRole": { + "description": "\r\n\r\n All = 0 \r\n Users = 2 \r\n Missions = 4 \r\n Invoices = 8 \r\n Projects = 16 \r\n Rules = 32 \r\n Settings = 64 \r\n Integrations = 128 \r\n SubscriptionAndBills = 256 \r\n BiReports = 512 \r\n Categories = 1024 \r\n Mileage = 2048 \r\n ReadOnly = 4096 \r\n Vehicles = 8192 \r\n SuppliersManagement = 16384 \r\n Advances = 32768 \r\n VirtualPayment = 65536 \r\n Purchases = 131072 \r\n CustomFields = 262144 \r\n ProPaymentInstruments = 524288 \r\n MissionOrders = 1048576 \r\n BankAccounts = 2097152 \r\n Bookings = 4194304 \r\n Contact = 8388608 \r\n IntegrationsHistory = 16777216 \r\n TechnicalIntegration = 33554432 \r\n Reimbursements = 67108864 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "UserTokenDurationSeconds": { + "type": "integer", + "format": "uint64", + "uniqueItems": false + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "LoginResponse" + }, + "OfferResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the offer.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "StartDate": { + "description": "Start date of the offer. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "description": "End date of the offer. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "OfferType": { + "description": "Type of the offer : \r\n\r\n SilverDefault = 0 \r\n Free = 1 \r\n AlwaysFree = 2 \r\n SilverYearly = 3 \r\n CustomExport = 4 \r\n TestPeriod = 5 \r\n OrangeStandard = 6 \r\n OrangePremium = 7 \r\n GoldDefault = 11 \r\n GoldYearly = 12 \r\n AppDirectSilverDefault = 13 \r\n AppDirectGoldDefault = 14 \r\n CegidSilverDefault = 15 \r\n OrangePlatiniumOffer = 16 \r\n OrangeGoldOffer = 17 \r\n OrangeSilverOffer = 18 \r\n ImplementationOffer = 19 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19 + ] + }, + "FutureOfferType": { + "description": "Type of the futur offer : \r\n\r\n SilverDefault = 0 \r\n Free = 1 \r\n AlwaysFree = 2 \r\n SilverYearly = 3 \r\n CustomExport = 4 \r\n TestPeriod = 5 \r\n OrangeStandard = 6 \r\n OrangePremium = 7 \r\n GoldDefault = 11 \r\n GoldYearly = 12 \r\n AppDirectSilverDefault = 13 \r\n AppDirectGoldDefault = 14 \r\n CegidSilverDefault = 15 \r\n OrangePlatiniumOffer = 16 \r\n OrangeGoldOffer = 17 \r\n OrangeSilverOffer = 18 \r\n ImplementationOffer = 19 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19 + ] + } + }, + "type": "object", + "format": "OfferResponse" + }, + "PaymentInstrumentResponse": { + "properties": { + "Name": { + "description": "Name of the payment instrument.", + "type": "string", + "uniqueItems": false + }, + "Description": { + "description": "Description of the payment instrument.", + "type": "string", + "uniqueItems": false + }, + "IsActive": { + "description": "Shows if the payment instrument is active or not.", + "type": "boolean", + "uniqueItems": false + }, + "InstrumentType": { + "description": "Type of the payment instrument : \r\n\r\n Cash = 0 \r\n Card = 1 \r\n Check = 2 \r\n EWallet = 3 \r\n Coupon = 4 \r\n Wire = 5 \r\n Bank = 6 \r\n Other = 99 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 99 + ] + }, + "AccountType": { + "description": "Type of the payment instrument account : \r\n\r\n None = 0 \r\n Professional = 1 \r\n Personal = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2 + ] + }, + "LastDigits": { + "description": "Last digits of the payment instrument.", + "type": "string", + "uniqueItems": false + }, + "CardKey": { + "description": "Card key of the payment instrument.", + "type": "string", + "uniqueItems": false + }, + "JournalCode": { + "description": "Journal code of the payment instrument.", + "type": "string", + "uniqueItems": false + }, + "Auxiliary": { + "description": "Auxiliary account of the payment instrument.", + "type": "string", + "uniqueItems": false + }, + "AccountNumber": { + "description": "Account number of the payment instrument.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "PaymentInstrumentResponse" + }, + "ProjectResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "HasBillable": { + "description": "Project is billable to client.", + "type": "boolean", + "uniqueItems": false + }, + "StartDate": { + "description": "Start date of the project. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "description": "End date of the project. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "description": "Show if the project is Active.", + "type": "boolean", + "uniqueItems": false + }, + "MileageConfigurationsStr": { + "description": "Mileage configuration of the project.", + "type": "string", + "uniqueItems": false + }, + "Address": { + "description": "Address of the project.", + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "description": "Zip code of the project.", + "type": "string", + "uniqueItems": false + }, + "City": { + "description": "City of the project.", + "type": "string", + "uniqueItems": false + }, + "ExternalId": { + "description": "External identifier of the project.", + "type": "string", + "uniqueItems": false + }, + "Name": { + "description": "Name of the Project.", + "type": "string", + "uniqueItems": false + }, + "ProjectRef": { + "description": "Reference of the project", + "type": "string", + "uniqueItems": false + }, + "Validator_Id": { + "description": "Unique validator identifier of the project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Reviewer_Id": { + "description": "Unique reviwer identifier of the project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ClientName": { + "description": "Client name of the project.", + "type": "string", + "uniqueItems": false + }, + "ForAllCompany": { + "description": "Project is shared with all users.", + "type": "boolean", + "uniqueItems": false + }, + "IsBillableDefaultValue": { + "description": "Project is by default billable to client.", + "type": "boolean", + "uniqueItems": false + }, + "PayId2": { + "description": "Second Analytical axis relevant to the project.", + "type": "string", + "uniqueItems": false + }, + "Currency": { + "description": "Currency of the project.", + "type": "string", + "uniqueItems": false + }, + "ExtraData": { + "description": "Additional informations about the project.", + "type": "string", + "uniqueItems": false + }, + "ProjectUseType": { + "description": "Enum flag attribute that shows to which entity the project will be applied to : \r\n\r\n Invoice = 1 \r\n Purchase = 2 \r\n Subscription = 4 \r\n Advance = 8 \r\n MissionOrder = 16 \r\n MileageOnly = 32 \r\n InvoiceOnly = 64 \r\n VirtualCard = 128 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128 + ] + }, + "CustomField_Id": { + "description": "Unique custom field identifier related to the project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "CustomFieldParent_Id": { + "description": "Unique parent custom Field identifier related to the project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "CategoriesIdsStr": { + "description": "Categories identifiers relevant to the project.", + "type": "string", + "uniqueItems": false + }, + "ValidatorFullName": { + "description": "Validator full name of the project.", + "type": "string", + "uniqueItems": false + }, + "ValidatorMail": { + "description": "Validator mail of the project.", + "type": "string", + "uniqueItems": false + }, + "ReviewerFullName": { + "description": "Reviwer full name of the project.", + "type": "string", + "uniqueItems": false + }, + "ReviewerMail": { + "description": "Reviewer mail of the project.", + "type": "string", + "uniqueItems": false + }, + "IsReadOnly": { + "description": "Shows if the project is just read only.", + "type": "boolean", + "uniqueItems": false + }, + "ProjectTags": { + "description": "List of tags of the project.", + "type": "array", + "items": { + "$ref": "#/definitions/TagResponse" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "ProjectResponse" + }, + "ReportResponse": { + "properties": { + "Id": { + "description": "Unique report identifier.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "description": "Name of the report.", + "type": "string", + "uniqueItems": false + }, + "DateCreation": { + "description": "Creation date of the report. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Budget": { + "description": "Budget of the report.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "State": { + "description": "State of the report : Active, rejected, valideted...\r\n\r\n Active = 0 \r\n Submitted = 2 \r\n Rejected = 3 \r\n Validated = 4 \r\n Closed = 5 \r\n ValidatedAndExported = 6 \r\n Reimbursed = 7 \r\n PreSubmitted = 8 \r\n InValidation = 50 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 50 + ] + }, + "User_Id": { + "description": "Unique identifier of report's owner.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserLastName": { + "description": "Last name of report's owner.", + "type": "string", + "uniqueItems": false + }, + "UserFirstName": { + "description": "First name of report's owner.", + "type": "string", + "uniqueItems": false + }, + "UserMail": { + "description": "Mail of report's owner.", + "type": "string", + "uniqueItems": false + }, + "Manager_Id": { + "description": "Unique manager identifier of the report's user.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Accountant_Id": { + "description": "Unique accountant identifier of the report's user.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Reviewer_Id": { + "description": "Unique reviwer identifier of the report's user", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "InvoicesCount": { + "description": "Invoices count related to the report.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Value": { + "description": "Value of the report.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueToReimburse": { + "description": "Value to reimburse of the report.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueInLocalCurrency": { + "description": "Value in user local currency of the report.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ValueToReimburseInLocalCurrency": { + "description": "Value to reimburse in user local currency of the report.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "StartDate": { + "description": "Start date of the report. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "description": "End date of the report. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "UserCurrency": { + "description": "User currency of the report.", + "type": "string", + "uniqueItems": false + }, + "UserLocalCurrency": { + "description": "User local currency of the report.", + "type": "string", + "uniqueItems": false + }, + "IdShort": { + "description": "Auto-generated identifier of the report.", + "type": "string", + "uniqueItems": false + }, + "CurrentValidator_Id": { + "description": "Unique current validator identifier of the report.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "InvoiceAttachedFilesCount": { + "description": "Expense attached file count relevant to the report.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "ReportTags": { + "description": "List of tags of the report.", + "type": "array", + "items": { + "$ref": "#/definitions/TagResponse" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "ReportResponse" + }, + "TagResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the tag.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "description": "Name of the tag.", + "type": "string", + "uniqueItems": false + }, + "Description": { + "description": "Description of the tag.", + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "description": "Creation date of the tag. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "description": "Shows if the tag is active or not.", + "type": "boolean", + "uniqueItems": false + }, + "TagType": { + "description": "Enum attribute which is the type of the tag : \r\n\r\n Tag = 1 \r\n SimpleTag = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2 + ] + }, + "DefinitionStr": { + "description": "Definition of the tag.", + "type": "string", + "uniqueItems": false + }, + "UseType": { + "description": "Enum attribute which is the use type of the tag : \r\n\r\n Invoice = 2 \r\n Mileage = 4 \r\n Purchase = 8 \r\n Subscription = 16 \r\n Mission = 32 \r\n User = 64 \r\n Balance = 128 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 2, + 4, + 8, + 16, + 32, + 64, + 128 + ] + } + }, + "type": "object", + "format": "TagResponse" + }, + "UpdateUserResult": { + "properties": { + "UserResponse": { + "$ref": "#/definitions/UserResponse" + }, + "ResultCode": { + "description": "Expensya response internal codes: \r\n\r\n Success = 0 \r\n PartialSuccess = 1, \r\n InvalidData = 7, \r\n NotAdmin = 20, \r\n NotAllowed = 30, \r\n Failed = 70, \r\n NothingToDo = 91, \r\n AlreadyExists = 1006... ", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 10, + 11, + 12, + 20, + 30, + 50, + 60, + 70, + 71, + 80, + 90, + 91, + 92, + 96, + 97, + 98, + 99, + 100, + 101, + 303, + 400, + 401, + 404, + 901, + 902, + 903, + 910, + 913, + 1001, + 1004, + 1005, + 1006, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2007, + 2008 + ] + }, + "Message": { + "description": "Extra details sent by the server.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "UpdateUserResult" + }, + "UserProject": { + "properties": { + "User_Id": { + "description": "Unique identifier of the user.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ExternalId": { + "description": "External identifier of the project.", + "type": "string", + "uniqueItems": false + }, + "Project_Id": { + "description": "Unique identifier of the project.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ElementType": { + "description": "Type of the element.\r\n\r\n Invoice = 1 \r\n Mission = 2 \r\n User = 3 \r\n UserCollectorConnection = 4 \r\n Company = 5 \r\n Partner = 6 \r\n PartnerUser = 7 \r\n BackendUser = 8 \r\n DelegateAccess = 9 \r\n PartnerContract = 10 \r\n PartnerBill = 11 \r\n VirtualCard = 12 \r\n CompanyConfigurationSettings = 13 \r\n PartnerConfigurationSettings = 14 \r\n ExportFormat = 15 \r\n PartnerExportFormat = 16 \r\n ImportFormat = 17 \r\n CompanyOffer = 18 \r\n CompanyBill = 19 \r\n CompanyContract = 20 \r\n Project = 21 \r\n ProPaymentInstrument = 22 \r\n FavoritePlaces = 23 \r\n OrangeApiUser = 24 \r\n UserProject = 25 \r\n CustomField = 26 \r\n Contact = 27 \r\n Card = 28 \r\n Rule = 29 \r\n Tag = 30 \r\n CustomFieldValue = 31 \r\n UserCustomFieldValue = 32 \r\n CompanyIntegrationSettings = 33 \r\n CompanyIntegration = 34 \r\n UserBankAccount = 35 \r\n CompanyBankAccount = 36 \r\n PaymentInstrument = 37 \r\n Category = 38 \r\n Vehicle = 39 \r\n TagAssignment = 40 \r\n CompanyContact = 41 \r\n Validator = 42 \r\n UserWithValidators = 43 \r\n CompanySftp = 44 \r\n CompanyOrder = 45 \r\n Supplier = 46 \r\n CustomIkRate = 47 \r\n DefaultIkRate = 48 \r\n ExtraSettings = 49 \r\n SSo = 50 \r\n CustomIntegration = 51 \r\n AccountSettings = 52 \r\n Perdiem = 53 \r\n MileageConfiguration = 54 \r\n FieldPosition = 55 \r\n VirtualPayment = 56 \r\n LegalStorage = 57 \r\n MobileConfiguration = 58 \r\n BICube = 59 \r\n ExportCustom = 60 \r\n Domain = 61 \r\n BiConfiguration = 62 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62 + ] + }, + "ExtraData": { + "description": "Additional informations about the project.", + "type": "string", + "uniqueItems": false + }, + "HasBillable": { + "description": "Shows if the project is billable to client.", + "type": "boolean", + "uniqueItems": false + }, + "StartDate": { + "description": "Start date of the project. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "description": "End date of the project. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "description": "Show if the project is Active.", + "type": "boolean", + "uniqueItems": false + }, + "MileageConfigurationsStr": { + "description": "Mileage configuration of the project.", + "type": "string", + "uniqueItems": false + }, + "Address": { + "description": "Address of the project.", + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "description": "Zip code of the project.", + "type": "string", + "uniqueItems": false + }, + "City": { + "description": "City of the project.", + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "UserProject" + }, + "UserProjectResponse": { + "properties": { + "UserProject": { + "$ref": "#/definitions/UserProject" + }, + "User": { + "$ref": "#/definitions/UserResponse" + }, + "Project": { + "$ref": "#/definitions/ProjectResponse" + } + }, + "type": "object", + "format": "UserProjectResponse" + }, + "UserResponse": { + "properties": { + "Id": { + "description": "Unique identifier of the user.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "LastName": { + "description": "Last name of the user.", + "type": "string", + "uniqueItems": false + }, + "FirstName": { + "description": "First name of the user.", + "type": "string", + "uniqueItems": false + }, + "Address": { + "description": "Address of the user.", + "type": "string", + "uniqueItems": false + }, + "PhoneNumber": { + "description": "Phone Number of the user.", + "type": "string", + "uniqueItems": false + }, + "Mail": { + "description": "Mail of the user.", + "type": "string", + "uniqueItems": false + }, + "MailAlias": { + "description": "Mail alias of the user.", + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "description": "Zip code of the user.", + "type": "string", + "uniqueItems": false + }, + "FaxNumber": { + "description": "Fax number of the user.", + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "description": "Creation date of the user. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "CountryCode": { + "description": "Country code of the user.", + "type": "string", + "uniqueItems": false + }, + "Language": { + "description": "Language of the user.", + "type": "string", + "uniqueItems": false + }, + "Currency": { + "description": "Currency of the user.", + "type": "string", + "uniqueItems": false + }, + "LocalCurrency": { + "description": "Local currency of the user.", + "type": "string", + "uniqueItems": false + }, + "LocalCountry": { + "description": "Local country of the user.", + "type": "string", + "uniqueItems": false + }, + "CanCreateCategories": { + "description": "Sows if the user has right to create categories.", + "type": "boolean", + "uniqueItems": false + }, + "Manager_Id": { + "description": "Unique manager identifier of the user.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "AccountantMail": { + "description": "Accountant mail of the user.", + "type": "string", + "uniqueItems": false + }, + "AccountantPayId": { + "description": "Accountant analytical axis of the user.", + "type": "string", + "uniqueItems": false + }, + "UserType": { + "description": "User Type : \r\n\r\n None = 0 \r\n Employee = 1 \r\n Administrator = 2 \r\n Accountant = 4 \r\n CanRefund = 8 \r\n NotDisabledInImport = 16 \r\n NotUpdatedInImport = 32 \r\n UserTypeToIgnore = 56 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 4, + 8, + 16, + 32, + 56 + ] + }, + "UserState": { + "description": "User State : \r\n\r\n None = 0 \r\n Validated = 1 \r\n Active = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2 + ] + }, + "PayId": { + "description": "Analytacal axis of the user.", + "type": "string", + "uniqueItems": false + }, + "PayId2": { + "description": "Second analytical axis of the user.", + "type": "string", + "uniqueItems": false + }, + "PayId3": { + "description": "Third analytical axis of the user.", + "type": "string", + "uniqueItems": false + }, + "PayId4": { + "description": "Fourth analytical axis of the user", + "type": "string", + "uniqueItems": false + }, + "PayId5": { + "description": "Fifth analytical axis of the user.", + "type": "string", + "uniqueItems": false + }, + "PayId6": { + "description": "Sixth analytical axis of the user.", + "type": "string", + "uniqueItems": false + }, + "ManagerFirstName": { + "description": "Manager first name of the user.", + "type": "string", + "uniqueItems": false + }, + "ManagerLastName": { + "description": "Manager last name of the user.", + "type": "string", + "uniqueItems": false + }, + "ManagerMail": { + "description": "Manager mail of the user.", + "type": "string", + "uniqueItems": false + }, + "ManagerPayId": { + "description": "Manager analytical axis of the user.", + "type": "string", + "uniqueItems": false + }, + "ManagerUserState": { + "description": "Manager state of the user : \r\n\r\n None = 0 \r\n Validated = 1 \r\n Active = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2 + ] + }, + "Reviewer_Id": { + "description": "Unique reviwer identifier of the user.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ReviewerFirstName": { + "description": "Reviwer first name of the user.", + "type": "string", + "uniqueItems": false + }, + "ReviewerLastName": { + "description": "Reviwer last name of the user.", + "type": "string", + "uniqueItems": false + }, + "ReviewerMail": { + "description": "Reviwer mail of the user.", + "type": "string", + "uniqueItems": false + }, + "ReviewerPayId": { + "description": "Reviwer analytical axis of the user.", + "type": "string", + "uniqueItems": false + }, + "ReviewerUserState": { + "description": "Reviwer state of the user : \r\n\r\n None = 0 \r\n Validated = 1 \r\n Active = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2 + ] + }, + "JobTitle": { + "description": "Job title of the user.", + "type": "string", + "uniqueItems": false + }, + "Vendor": { + "description": "Vendor of the user.", + "type": "string", + "uniqueItems": false + }, + "MileageConfigurationsStr": { + "description": "Mileage configuration of the user.", + "type": "string", + "uniqueItems": false + }, + "PerDiemConfigName": { + "description": "Perdiem configuration of the user.", + "type": "string", + "uniqueItems": false + }, + "UserRole": { + "description": "Roles access of the user : \r\n\r\n All = 0 \r\n Users = 2 \r\n Missions = 4 \r\n Invoices = 8 \r\n Projects = 16 \r\n Rules = 32 \r\n Settings = 64 \r\n Integrations = 128 \r\n SubscriptionAndBills = 256 \r\n BiReports = 512 \r\n Categories = 1024 \r\n Mileage = 2048 \r\n ReadOnly = 4096 \r\n Vehicles = 8192 \r\n SuppliersManagement = 16384 \r\n Advances = 32768 \r\n VirtualPayment = 65536 \r\n Purchases = 131072 \r\n CustomFields = 262144 \r\n ProPaymentInstruments = 524288 \r\n MissionOrders = 1048576 \r\n BankAccounts = 2097152 \r\n Bookings = 4194304 \r\n Contact = 8388608 \r\n IntegrationsHistory = 16777216 \r\n TechnicalIntegration = 33554432 \r\n Reimbursements = 67108864 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024, + 2048, + 4096, + 8192, + 16384, + 32768, + 65536, + 131072, + 262144, + 524288, + 1048576, + 2097152, + 4194304, + 8388608, + 16777216, + 33554432, + 67108864 + ] + }, + "ConfigurationSettingsStr": { + "description": "Additional configurations of the user.", + "type": "string", + "uniqueItems": false + }, + "ConfigurationSettingsReference": { + "description": "Configuration reference of the user.", + "type": "string", + "uniqueItems": false + }, + "LastLoginDate": { + "description": "Last login date of the user. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "LastSignInDate": { + "description": "Last signIn date of the user. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Validators": { + "description": "List of validators of the user.", + "type": "array", + "items": { + "$ref": "#/definitions/ValidatorResponse" + }, + "uniqueItems": false + }, + "UserSimpleTags": { + "description": "List of simple tags of the user.", + "type": "array", + "items": { + "$ref": "#/definitions/TagResponse" + }, + "uniqueItems": false + }, + "UserTags": { + "description": "List of tags of the user.", + "type": "array", + "items": { + "$ref": "#/definitions/TagResponse" + }, + "uniqueItems": false + }, + "RestrictedTags": { + "description": "Restricted tags with are managed by the user.", + "type": "array", + "items": { + "$ref": "#/definitions/TagResponse" + }, + "uniqueItems": false + } + }, + "type": "object", + "format": "UserResponse" + }, + "ValidatorResponse": { + "properties": { + "Mail": { + "type": "string", + "uniqueItems": false + }, + "FirstName": { + "type": "string", + "uniqueItems": false + }, + "LastName": { + "type": "string", + "uniqueItems": false + }, + "MinimumAmount": { + "type": "number", + "format": "decimal", + "uniqueItems": false + } + }, + "type": "object", + "format": "ValidatorResponse" + }, + "VATResponse": { + "properties": { + "Rates": { + "description": "VAT rates of the expense.", + "type": "array", + "items": { + "type": "number", + "format": "decimal" + }, + "uniqueItems": false + }, + "Values": { + "description": "AT values of the expense.", + "type": "array", + "items": { + "type": "number", + "format": "decimal" + }, + "uniqueItems": false + }, + "VatFreeAmount": { + "description": "Free amount of the VAT.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "Tips": { + "description": "Tips of the expense ", + "type": "number", + "format": "decimal", + "uniqueItems": false + } + }, + "type": "object", + "format": "VATResponse" + }, + "VehicleResponse": { + "properties": { + "Name": { + "description": "Name of the vehicle.", + "type": "string", + "uniqueItems": false + }, + "DateCreation": { + "description": "Creation date of the vehicle. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "CreationYearKm": { + "description": "Distance already filed outside Expensya in the creation year in Km.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "CreationYearMiles": { + "description": "Distance already filed outside Expensya in the creation year in mile.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "LastYearDistanceKm": { + "description": "Distance already filed outside Expensya in the last year in Km.", + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "LastUpdatedYear": { + "description": "Last updated year of the vehicle.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "VehicleType": { + "description": "Type of the vehicle : \r\n\r\n Car = 1 \r\n Moped = 2 \r\n Scooter = 3 \r\n Motocyle = 4 \r\n Bicycle = 5 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 1, + 2, + 3, + 4, + 5 + ] + }, + "InternalVehicleType": { + "description": "Internal type of the vehicle : \r\n\r\n None = 0 \r\n Personal = 1 \r\n Professional = 2 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2 + ] + }, + "CurrentValidator_Id": { + "description": "Unique identifier of the current validator of the vehicle.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "LastValidatorReminderDate": { + "description": "Last validator reminder date of the vehicle. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Comments": { + "description": "Comments of the vehicle.", + "type": "string", + "uniqueItems": false + }, + "State": { + "description": "State of the vehicle : \r\n\r\n Disabled = 0 \r\n Active = 1 \r\n Submitted = 2 \r\n Approved = 3 \r\n Rejected = 4 \r\n All = -1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1, + 2, + 3, + 4, + -1 + ] + }, + "ExternalId": { + "description": "External identifier of the vehicle.", + "type": "string", + "uniqueItems": false + }, + "AdministrativePower": { + "description": "Administrative power of the vehicle.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "IsActive": { + "description": "Shows if the vehicle is active or not.", + "type": "boolean", + "uniqueItems": false + }, + "AttachedFilesCount": { + "description": "Count of the attached files to the vehicle.", + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "CreationType": { + "description": "Type of the creation of the vehicle : \r\n\r\n UserCreated = 0 \r\n DefaultVehicle = 1 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 0, + 1 + ] + }, + "StartDate": { + "description": "Start date of the vehicle. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "EndDate": { + "description": "CEnd date of the vehicle. Respects the standard ISO 8601 date format. e.g: 2018-06-04T08:30:15.023Z", + "type": "string", + "format": "date-time", + "uniqueItems": false + } + }, + "type": "object", + "format": "VehicleResponse" + }, + "KeyValuePairGuidString": { + "properties": { + "Key": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Value": { + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "KeyValuePairGuidString" + }, + "KeyValuePairStringString": { + "properties": { + "Key": { + "type": "string", + "uniqueItems": false + }, + "Value": { + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "KeyValuePairStringString" + }, + "Object": { + "type": "object", + "format": "Object" + }, + "TimeSpan": { + "properties": { + "Ticks": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "Days": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Hours": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Milliseconds": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Minutes": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Seconds": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "TotalDays": { + "type": "number", + "format": "double", + "uniqueItems": false + }, + "TotalHours": { + "type": "number", + "format": "double", + "uniqueItems": false + }, + "TotalMilliseconds": { + "type": "number", + "format": "double", + "uniqueItems": false + }, + "TotalMinutes": { + "type": "number", + "format": "double", + "uniqueItems": false + }, + "TotalSeconds": { + "type": "number", + "format": "double", + "uniqueItems": false + }, + "Zero": { + "$ref": "#/definitions/TimeSpan" + }, + "MaxValue": { + "$ref": "#/definitions/TimeSpan" + }, + "MinValue": { + "$ref": "#/definitions/TimeSpan" + }, + "TicksPerMillisecond": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "TicksPerSecond": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "TicksPerMinute": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "TicksPerHour": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "TicksPerDay": { + "type": "integer", + "format": "int64", + "uniqueItems": false + } + }, + "type": "object", + "format": "TimeSpan" + }, + "TupleStringDecimal": { + "properties": { + "Item1": { + "type": "string", + "uniqueItems": false + }, + "Item2": { + "type": "number", + "format": "decimal", + "uniqueItems": false + } + }, + "type": "object", + "format": "TupleStringDecimal" + }, + "CustomFieldValueInputArray": { + "type": "array", + "items": { + "$ref": "#/definitions/CustomFieldValueInput" + } + }, + "UpdateCustomFieldValueInputArray": { + "type": "array", + "items": { + "$ref": "#/definitions/UpdateCustomFieldValueInput" + } + }, + "ApiExpenseExpenseIdImageGet200ApplicationJsonResponse": { + "type": "string", + "format": "stream" + }, + "AddOrUpdateProjectInputArray": { + "type": "array", + "items": { + "$ref": "#/definitions/AddOrUpdateProjectInput" + } + }, + "AddUserProjectInputArray": { + "type": "array", + "items": { + "$ref": "#/definitions/AddUserProjectInput" + } + }, + "UpdateUserProjectInputArray": { + "type": "array", + "items": { + "$ref": "#/definitions/UpdateUserProjectInput" + } + }, + "AssignTagsInput": { + "properties": { + "NewTags": { + "type": "array", + "items": { + "$ref": "#/definitions/AddOrUpdateTagInput" + }, + "uniqueItems": false + }, + "ExistingTagsToAssign": { + "type": "array", + "items": { + "type": "string", + "format": "guid" + }, + "uniqueItems": false + }, + "ExistingTagsToUnassign": { + "type": "array", + "items": { + "type": "string", + "format": "guid" + }, + "uniqueItems": false + }, + "ElementsToTag": { + "type": "array", + "items": { + "type": "string", + "format": "guid" + }, + "uniqueItems": false + }, + "ElementsType": { + "description": "InvoiceAndFK = 0 Report = 1 Category = 2 Project = 3 Company = 4 PartnerUser = 5 BackendUser = 6 InvoiceOnly = 7 FkOnly = 8 Rule = 9 User = 10 CustomFieldValue = 11 SimpleTag = 12 Vehicule = 14 PaymentInstrument = 15 UserBankAccounts = 16 CompanyBankAccounts = 17 VehicleAssignment = 18 Undefined = 255 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "AssignTagsInput" + }, + "AddOrUpdateTagInput": { + "properties": { + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Name": { + "type": "string", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "DefinitionStr": { + "type": "string", + "uniqueItems": false + }, + "SyncState": { + "description": "AddLocal = 0 DeleteLocal = 1 Sync = 3 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "AssignTagsInput": { + "$ref": "#/definitions/AssignTagsInput" + }, + "TagType": { + "description": "Tag = 1 SimpleTag = 2 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "IsActive": { + "type": "boolean", + "uniqueItems": false + }, + "UseType": { + "description": "Invoice = 2 Mileage = 4 Purchase = 8 Subscription = 16 Mission = 32 User = 64 Balance = 128 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "AddOrUpdateTagInput" + }, + "ExtendedValidator": { + "properties": { + "Mail": { + "type": "string", + "uniqueItems": false + }, + "FirstName": { + "type": "string", + "uniqueItems": false + }, + "LastName": { + "type": "string", + "uniqueItems": false + }, + "FullName": { + "type": "string", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Validator_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "NextValidator_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "MinimumAmount": { + "type": "number", + "format": "decimal", + "uniqueItems": false + }, + "ElementType": { + "description": "Invoice = 1 Mission = 2 User = 3 UserCollectorConnection = 4 Company = 5 Partner = 6 PartnerUser = 7 BackendUser = 8 DelegateAccess = 9 PartnerContract = 10 PartnerBill = 11 VirtualCard = 12 CompanyConfigurationSettings = 13 PartnerConfigurationSettings = 14 ExportFormat = 15 PartnerExportFormat = 16 ImportFormat = 17 CompanyOffer = 18 CompanyBill = 19 CompanyContract = 20 Project = 21 ProPaymentInstrument = 22 FavoritePlaces = 23 OrangeApiUser = 24 UserProject = 25 CustomField = 26 Contact = 27 Card = 28 Rule = 29 Tag = 30 CustomFieldValue = 31 UserCustomFieldValue = 32 CompanyIntegrationSettings = 33 CompanyIntegration = 34 UserBankAccount = 35 CompanyBankAccount = 36 PaymentInstrument = 37 Category = 38 Vehicle = 39 TagAssignment = 40 CompanyContact = 41 Validator = 42 UserWithValidators = 43 CompanySftp = 44 CompanyOrder = 45 Supplier = 46 CustomIkRate = 47 DefaultIkRate = 48 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "Element_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SkipConditions": { + "description": "None = 0 WarningRuleWithInterval = 1 ShouldBeTheLastValidator = 2 WarningRule = 4 EmptyLevel = 8 RefundException = 16 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "ExtendedValidator" + }, + "UserResult": { + "properties": { + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "LastName": { + "type": "string", + "uniqueItems": false + }, + "FirstName": { + "type": "string", + "uniqueItems": false + }, + "Address": { + "type": "string", + "uniqueItems": false + }, + "PhoneNumber": { + "type": "string", + "uniqueItems": false + }, + "Mail": { + "type": "string", + "uniqueItems": false + }, + "MailAlias": { + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "type": "string", + "uniqueItems": false + }, + "FaxNumber": { + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "CountryCode": { + "type": "string", + "uniqueItems": false + }, + "Language": { + "type": "string", + "uniqueItems": false + }, + "Currency": { + "type": "string", + "uniqueItems": false + }, + "LocalCurrency": { + "type": "string", + "uniqueItems": false + }, + "LocalCountry": { + "type": "string", + "uniqueItems": false + }, + "CanCreateCategories": { + "type": "boolean", + "uniqueItems": false + }, + "ShemaVersion": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "ExternalUserType": { + "description": "None = 0 FromBackend = 1 FromPartner = 2 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "Company_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Manager_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Login_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "AccountantMail": { + "type": "string", + "uniqueItems": false + }, + "AccountantPayId": { + "type": "string", + "uniqueItems": false + }, + "UserType": { + "description": "None = 0 Employee = 1 Administrator = 2 Accountant = 4 CanRefund = 8 NotDisabledInImport = 16 NotUpdatedInImport = 32 UserTypeToIgnore = 56 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "UserState": { + "description": "None = 0 Validated = 1 Active = 2 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "IsTest": { + "type": "boolean", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "PayId": { + "type": "string", + "uniqueItems": false + }, + "PayId2": { + "type": "string", + "uniqueItems": false + }, + "PayId3": { + "type": "string", + "uniqueItems": false + }, + "PayId4": { + "type": "string", + "uniqueItems": false + }, + "PayId5": { + "type": "string", + "uniqueItems": false + }, + "PayId6": { + "type": "string", + "uniqueItems": false + }, + "ManagerFirstName": { + "type": "string", + "uniqueItems": false + }, + "ManagerLastName": { + "type": "string", + "uniqueItems": false + }, + "ManagerMail": { + "type": "string", + "uniqueItems": false + }, + "ManagerPayId": { + "type": "string", + "uniqueItems": false + }, + "ManagerUserState": { + "description": "None = 0 Validated = 1 Active = 2 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "Reviewer_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ReviewerFirstName": { + "type": "string", + "uniqueItems": false + }, + "ReviewerLastName": { + "type": "string", + "uniqueItems": false + }, + "ReviewerMail": { + "type": "string", + "uniqueItems": false + }, + "ReviewerPayId": { + "type": "string", + "uniqueItems": false + }, + "ReviewerUserState": { + "description": "None = 0 Validated = 1 Active = 2 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "JobTitle": { + "type": "string", + "uniqueItems": false + }, + "UserValidators": { + "type": "array", + "items": { + "$ref": "#/definitions/ExtendedValidator" + }, + "uniqueItems": false + }, + "Vendor": { + "type": "string", + "uniqueItems": false + }, + "MileageConfigurationsStr": { + "type": "string", + "uniqueItems": false + }, + "IKRates_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "PerDiemConfiguration_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "PerDiemConfigName": { + "type": "string", + "uniqueItems": false + }, + "IKRatesReference": { + "type": "string", + "uniqueItems": false + }, + "ConfigurationSettings_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserRole": { + "description": "All = 0 Users = 2 Missions = 4 Invoices = 8 Projects = 16 Rules = 32 Settings = 64 Integrations = 128 SubscriptionAndBills = 256 BiReports = 512 Categories = 1024 Mileage = 2048 ReadOnly = 4096 Vehicles = 8192 SuppliersManagement = 16384 Advances = 32768 VirtualPayment = 65536 Purchases = 131072 CustomFields = 262144 ProPaymentInstruments = 524288 MissionOrders = 1048576 BankAccounts = 2097152 Bookings = 4194304 Contact = 8388608 IntegrationsHistory = 16777216 TechnicalIntegration = 33554432 Reimbursements = 67108864 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "ConfigurationSettingsStr": { + "type": "string", + "uniqueItems": false + }, + "ConfigurationSettingsReference": { + "type": "string", + "uniqueItems": false + }, + "LastLoginDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "SessionIdsStr": { + "type": "string", + "uniqueItems": false + }, + "LastSignInDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Tags": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "uniqueItems": false + }, + "SimpleTags": { + "type": "array", + "items": { + "$ref": "#/definitions/SimpleTag" + }, + "uniqueItems": false + }, + "SimpleTagsNames": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": false + }, + "Groups": { + "type": "array", + "items": { + "$ref": "#/definitions/Tag" + }, + "uniqueItems": false + }, + "FullName": { + "type": "string", + "uniqueItems": false + }, + "ManagerFullName": { + "type": "string", + "uniqueItems": false + }, + "ReviewerFullName": { + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "UserResult" + }, + "SimpleTag": { + "properties": { + "Name": { + "type": "string", + "uniqueItems": false + }, + "Description": { + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "IsActive": { + "type": "boolean", + "uniqueItems": false + }, + "TagType": { + "description": "Tag = 1 SimpleTag = 2 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "UseType": { + "description": "Invoice = 2 Mileage = 4 Purchase = 8 Subscription = 16 Mission = 32 User = 64 Balance = 128 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "PartnerOrCompany_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "CreationVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SyncState": { + "description": "AddLocal = 0 DeleteLocal = 1 Sync = 3 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + } + }, + "type": "object", + "format": "SimpleTag" + }, + "UserAndLogin": { + "properties": { + "Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Mail": { + "type": "string", + "uniqueItems": false + }, + "PayId": { + "type": "string", + "uniqueItems": false + }, + "PayId2": { + "type": "string", + "uniqueItems": false + }, + "PayId3": { + "type": "string", + "uniqueItems": false + }, + "PayId4": { + "type": "string", + "uniqueItems": false + }, + "PayId5": { + "type": "string", + "uniqueItems": false + }, + "PayId6": { + "type": "string", + "uniqueItems": false + }, + "CreationDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "CanCreateCategories": { + "type": "boolean", + "uniqueItems": false + }, + "ShemaVersion": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "Company_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Currency": { + "type": "string", + "uniqueItems": false + }, + "Manager_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Login_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "UserType": { + "description": "None = 0 Employee = 1 Administrator = 2 Accountant = 4 CanRefund = 8 NotDisabledInImport = 16 NotUpdatedInImport = 32 UserTypeToIgnore = 56 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "UserRole": { + "description": "All = 0 Users = 2 Missions = 4 Invoices = 8 Projects = 16 Rules = 32 Settings = 64 Integrations = 128 SubscriptionAndBills = 256 BiReports = 512 Categories = 1024 Mileage = 2048 ReadOnly = 4096 Vehicles = 8192 SuppliersManagement = 16384 Advances = 32768 VirtualPayment = 65536 Purchases = 131072 CustomFields = 262144 ProPaymentInstruments = 524288 MissionOrders = 1048576 BankAccounts = 2097152 Bookings = 4194304 Contact = 8388608 IntegrationsHistory = 16777216 TechnicalIntegration = 33554432 Reimbursements = 67108864 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "IsTest": { + "type": "boolean", + "uniqueItems": false + }, + "SyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "UserState": { + "description": "None = 0 Validated = 1 Active = 2 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "ExternalLoginProviderStr": { + "type": "string", + "uniqueItems": false + }, + "InvalidLoginCount": { + "type": "integer", + "format": "int32", + "uniqueItems": false + }, + "LastInvalidLoginDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "LocalCurrency": { + "type": "string", + "uniqueItems": false + }, + "LocalCountry": { + "type": "string", + "uniqueItems": false + }, + "Vendor": { + "type": "string", + "uniqueItems": false + }, + "MileageConfigurationsStr": { + "type": "string", + "uniqueItems": false + }, + "IKRates_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ConfigurationSettings_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "PerDiemConfiguration_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ConfigSyncVersion": { + "type": "integer", + "format": "int64", + "uniqueItems": false + }, + "SessionIdsStr": { + "type": "string", + "uniqueItems": false + }, + "ExternalUserType": { + "description": "None = 0 FromBackend = 1 FromPartner = 2 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "JobTitle": { + "type": "string", + "uniqueItems": false + }, + "AcceptedServiceTerms": { + "type": "boolean", + "uniqueItems": false + }, + "LastLoginDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "LastSignInDate": { + "type": "string", + "format": "date-time", + "uniqueItems": false + }, + "Address": { + "type": "string", + "uniqueItems": false + }, + "ZipCode": { + "type": "string", + "uniqueItems": false + }, + "PhoneNumber": { + "type": "string", + "uniqueItems": false + }, + "FaxNumber": { + "type": "string", + "uniqueItems": false + }, + "Reviewer_Id": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Updated": { + "type": "boolean", + "uniqueItems": false + }, + "PasswordHash": { + "type": "string", + "uniqueItems": false + }, + "FullName": { + "type": "string", + "uniqueItems": false + }, + "ConfigurationSettingsStr": { + "type": "string", + "uniqueItems": false + }, + "LastName": { + "type": "string", + "uniqueItems": false + }, + "FirstName": { + "type": "string", + "uniqueItems": false + }, + "Language": { + "type": "string", + "uniqueItems": false + }, + "City": { + "type": "string", + "uniqueItems": false + }, + "CountryCode": { + "type": "string", + "uniqueItems": false + }, + "UseGps": { + "type": "boolean", + "uniqueItems": false + }, + "MailAlias": { + "type": "string", + "uniqueItems": false + } + }, + "type": "object", + "format": "UserAndLogin" + }, + "SignupResponse": { + "properties": { + "UserId": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "LoginId": { + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "ResultCode": { + "description": "Success = 0 PartialSuccess = 1 NotPaid = 2 OldAppVersion = 3 InvalidCredentials = 4 AdditionalInformationNeeded = 5 InvalidPinCode = 6 InvalidData = 7 UserEmailExists = 10 CompanyEmailExists = 11 UserEmailAliasExists = 12 NotAdmin = 20 NotAllowed = 30 NotManager = 50 ExceedLimits = 60 Failed = 70 LockedOut = 71 UserDisabled = 80 UserNotValidated = 90 NothingToDo = 91 NotVerifiedInvoice = 92 ClientError = 96 NetworkError = 97 ServiceError = 98 UnknownError = 99 NotValidZipCode = 100 InvalidCoupon = 101 BadRequest = 400 NotFound = 404 WalletNotFound = 901 WalletDisabled = 902 PaymentInstrumentExpired = 903 AccountantExists = 910 AccountantNotExists = 913 PartnerExists = 1001 PartnerNotExists = 1004 NotEnoughLicences = 1005 AlreadyExists = 1006 BnppLimitActiveCardsError = 2000 BnppLimitAmountAccountError = 2001 BnppEndUsageError = 2002 BnppWrongAccountIdError = 2003 BnppWrongCurrencyCodeError = 2004 BnppWrongCertificateOrEndpointError = 2005 MissionShortIdNull = 2007 AlreadyDeleted = 2008 ", + "type": "integer", + "format": "enum", + "uniqueItems": false + }, + "UserMessage": { + "type": "string", + "uniqueItems": false + }, + "Details": { + "type": "string", + "uniqueItems": false + }, + "IsSuccess": { + "type": "boolean", + "uniqueItems": false + } + }, + "type": "object", + "format": "SignupResponse" + }, + "UpdateUserStateInput": { + "properties": { + "UserId": { + "description": "Unique identifier of the user.", + "type": "string", + "format": "guid", + "uniqueItems": false + }, + "Operation": { + "description": "Operation that will be applied to the user.\r\n\r\n Validate = 2 \r\n Activate = 3 \r\n Deactivate = 4 \r\n", + "type": "integer", + "format": "enum", + "uniqueItems": false, + "enum": [ + 2, + 3, + 4 + ] + } + }, + "type": "object", + "format": "UpdateUserStateInput" + }, + "UpdateUserStateInputArray": { + "type": "array", + "items": { + "$ref": "#/definitions/UpdateUserStateInput" + } + } + }, + "parameters": {}, + "responses": {}, + "securityDefinitions": {}, + "tags": [] +} diff --git a/certified-connectors/Expensya/apiProperties.json b/certified-connectors/Expensya/apiProperties.json new file mode 100644 index 000000000..d2e1a54a0 --- /dev/null +++ b/certified-connectors/Expensya/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#0073d1", + "capabilities": [], + "publisher": "EXPENSYA SA", + "stackOwner" : "EXPENSYA SA" + } +} diff --git a/certified-connectors/Expensya/readme.md b/certified-connectors/Expensya/readme.md new file mode 100644 index 000000000..dbf982ab3 --- /dev/null +++ b/certified-connectors/Expensya/readme.md @@ -0,0 +1,20 @@ + + +## Expensya Connector +Expensya is a leading Spend Management solution, in Europe, and this connector will allow our partners and customers to build on top of our technology +Expensya Connector contains a group of actions to perform some simple operations for Power Automate. + + + +## Pre-requisites + +- [Sign-up](https://app.expensya.com/Portal/#/Signup?lang=en) for an Expensya account +- [Sign-in](https://app.expensya.com/Portal/#/Login?lang=en) to manage an existing Expensya account +- [Create](https://app.expensya.com/Portal/#/Admin/Integrations) to generate an API key + + + +## Supported Operations + +The full list of supported actions can be found [here](https://help.expensya.com/l/en/article/rzm63doi7u-how-to-use-expensya-s-public-apis) + From 7f21c22eee0ccd9ea989eabe03344996ddc434dd Mon Sep 17 00:00:00 2001 From: Amir Keren Date: Thu, 22 Oct 2020 10:13:33 +0300 Subject: [PATCH 151/347] Change user ids visibility to important --- custom-connectors/AzureAdIp/apiDefinition.swagger.json | 1 + 1 file changed, 1 insertion(+) diff --git a/custom-connectors/AzureAdIp/apiDefinition.swagger.json b/custom-connectors/AzureAdIp/apiDefinition.swagger.json index 6b2ebfbe1..38e19287c 100644 --- a/custom-connectors/AzureAdIp/apiDefinition.swagger.json +++ b/custom-connectors/AzureAdIp/apiDefinition.swagger.json @@ -66,6 +66,7 @@ "type": "object", "properties": { "userIds": { + "x-ms-visibility": "important", "type": "array", "items": { "type": "string" From 67a198683c9d3fd82bc098b47dd943cb5174f3bf Mon Sep 17 00:00:00 2001 From: Amir Keren Date: Thu, 22 Oct 2020 10:20:37 +0300 Subject: [PATCH 152/347] Make userids important --- custom-connectors/AzureAdIp/apiDefinition.swagger.json | 1 + 1 file changed, 1 insertion(+) diff --git a/custom-connectors/AzureAdIp/apiDefinition.swagger.json b/custom-connectors/AzureAdIp/apiDefinition.swagger.json index 38e19287c..3111e00a9 100644 --- a/custom-connectors/AzureAdIp/apiDefinition.swagger.json +++ b/custom-connectors/AzureAdIp/apiDefinition.swagger.json @@ -125,6 +125,7 @@ "type": "object", "properties": { "userIds": { + "x-ms-visibility": "important", "type": "array", "items": { "type": "string" From 027e5fd4d7b8794719e2a2cc8c8fd08c115b5e35 Mon Sep 17 00:00:00 2001 From: Amir Keren Date: Thu, 22 Oct 2020 10:25:40 +0300 Subject: [PATCH 153/347] Change file name to file path --- certified-connectors/VirusTotal/apiDefinition.swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/VirusTotal/apiDefinition.swagger.json b/certified-connectors/VirusTotal/apiDefinition.swagger.json index b8e73f436..be4d3d752 100644 --- a/certified-connectors/VirusTotal/apiDefinition.swagger.json +++ b/certified-connectors/VirusTotal/apiDefinition.swagger.json @@ -143,7 +143,7 @@ "name": "file", "description": "File to be scanned", "required": true, - "x-ms-summary": "file name", + "x-ms-summary": "file path", "type": "file" } ], From 96b9b37d56fc649e3a6b62ec7c851571d6b71f6c Mon Sep 17 00:00:00 2001 From: vedran Date: Thu, 22 Oct 2020 23:32:03 +0200 Subject: [PATCH 154/347] Initial commit --- .../apiDefinition.swagger.json | 1241 +++++++++++++++++ .../apiProperties.json | 41 + .../ReversingLabs Intelligence/readme.md | 11 + 3 files changed, 1293 insertions(+) create mode 100644 custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json create mode 100644 custom-connectors/ReversingLabs Intelligence/apiProperties.json create mode 100644 custom-connectors/ReversingLabs Intelligence/readme.md diff --git a/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json b/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json new file mode 100644 index 000000000..0f721aac6 --- /dev/null +++ b/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json @@ -0,0 +1,1241 @@ +{ + "swagger": "2.0", + "info": { + "title": "ReversingLabs Intelligence", + "version": "1.0", + "description": "ReversingLabs continually processes goodware and malware files providing early intelligence about attacks before they infiltrate customer infrastructures. This visibility to threats “in-the-wild” enables preparation for new attacks and quickly identifies the threat levels of new files as they arrive. ReversingLabs enables more effective and efficient threat identification, development of better threat intelligence, and implementation of proactive threat hunting programs.", + "contact": { + "name": "ReversingLabs support", + "url": "https://support.reversinglabs.com/", + "email":"support@reversinglabs.com" + } + }, + "host": "data.reversinglabs.com", + "basePath": "/", + "schemes": [ + "https" + ], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.reversinglabs.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.reversinglabs.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Security" + } + ], + "consumes": [], + "produces": [], + "paths": { + "/api/databrowser/malware_presence/query/{hash_type}/{hash_value}": { + "get": { + "summary": "Get File Hash Reputation", + "description": "This service provides information about the malware status of requested files.", + "operationId": "Get-api-databrowser-malware_presence-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_type", + "in": "path", + "description": "required parameter; accepts these options: md5, sha1, sha256", + "required": true, + "type": "string", + "x-ms-summary" : "Hash Type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid hash of the type defined by hash_type", + "required": true, + "type": "string", + "x-ms-summary" : "Hash Value" + }, + { + "name": "show_hashes", + "in": "query", + "type": "boolean", + "default": false, + "description": "Both single and bulk malware presence queries support an additional request parameter show\\_hashes which can be either true or false. The parameter show\\_hashes can also be used with the Extended Malware Presence query. If not specified, the default value is false. When set to true, the show_hashes parameter will direct databrowser to provide md5, sha1 and sha256 hashes for the requested file(s), in addition to the rest of the Malware Presence information.", + "x-ms-summary" : "Show Hashes" + + }, + { + "name": "extended", + "in": "query", + "required": true, + "type": "boolean", + "default": false, + "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", + "x-ms-summary" : "Extended" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary" : "Format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/databrowser/malware_presence/bulk_query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-databrowser-malware_presence-bulk_query-post_format", + "description": "This service provides a means to send multiple hashes of files in a single request and provides information about the malware status for those files..", + "summary": "Get File Hash Reputation - Bulk Request", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary" : "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/octet-stream", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary" : "Body" + } + ] + } + }, + "/api/xref/v2/query/{hash_type}/{hash_value}": { + "get": { + "summary": "Get Historic Multi-AV Scan Records", + "description": "This service provides historic Multi-AV scan records for a given file hash.", + "operationId": "Get-historic-multi-av-scan-records-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_type", + "in": "path", + "description": "required parameter; accepts these options: md5, sha1, sha256", + "required": true, + "type": "string", + "x-ms-summary" : "Hash type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid hash of the type defined by hash_type", + "required": true, + "type": "string", + "x-ms-summary" : "Hash value" + }, + { + "name": "history", + "in": "query", + "required": true, + "type": "boolean", + "default": false, + "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", + "x-ms-summary" : "History" + }, + { + "name": "post_format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary" : "Post format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/xref/v2/bulk_query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Get-historic-multi-av-scan-records-query-hash_type-hash_value-bulk", + "description": "This service provides a means to send multiple hashes of files in a single request and provides Multi-AV scan records data for those files.", + "summary": "Get Historic Multi-AV Scan Records - Bulk Request", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary" : "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/octet-stream", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary" : "Body" + } + ] + } + }, + "/api/databrowser/rldata/query/{hash_type}/{hash_value}": { + "get": { + "summary": "Get File Hash Analysis Detail", + "description": "This service provides analysis results for the requested file.", + "operationId": "Get-api-databrowser-rldata-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_type", + "in": "path", + "description": "required parameter; accepts these options: md5, sha1, sha256", + "required": true, + "type": "string", + "x-ms-summary" : "Hash type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid hash of the type defined by ash_type", + "required": true, + "type": "string", + "x-ms-summary" : "Hash value" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary" : "Format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/databrowser/rldata/bulk_query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-databrowser-rldata-bulk_query-post_format", + "description": "This service provides a means to send multiple file hashes in a single request and provides analysis results for these file hashes.", + "summary": "Get File Hash Analysis Detail - Bulk Request", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary" : "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/octet-stream", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary" : "Body" + } + ] + } + }, + "/api/rescan/v1/query/{hash_type}/{hash_value}": { + "get": { + "summary": "Re-Analyze File", + "description": "This service provides a means to send file(s) for rescanning.", + "operationId": "Get-api-reanalyze-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_type", + "in": "path", + "description": "required parameter; accepts these options: md5, sha1, sha256", + "required": true, + "type": "string", + "x-ms-summary" : "Hash type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid hash of the type defined by hash_type", + "required": true, + "type": "string", + "x-ms-summary" : "Hash value" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/rescan/v1/bulk_query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-rescan-v1-bulk_query-post_format", + "description": "This service provides a means to initiate multiple files to be rescanned using a single request.", + "summary": "Re-Analyze File - Bulk Request", + "parameters": [ + { + "name": "format", + "in": "header", + "required": true, + "type": "string", + "default": "json", + "description": "format accepts the options xml or json and defines the return format", + "x-ms-summary" : "Format" + }, + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary" : "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/octet-stream", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary" : "Body" + } + ] + } + }, + "/api/group_by_rha1/v1/query/{rha1_type}/{hash_value}": { + "get": { + "summary": "Get Functionally Similar File Hashes Using ReversingLabs Hash Algorithm", + "description": "This service provides a list of SHA1 hashes of files that are functionally similar to the provided file (SHA1 hash) at the selected precision level.", + "operationId": "Get-Group-By-RHA1-Single-Query", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "rha1_type", + "in": "path", + "required": true, + "description": "rha1_type is a measure of the RHA1 precision level. It represents the degree to which a file is functionally similar to another file. A higher Precision Level will match fewer files but the files will have more functional similarity: - pe01, elf01, machO01 - 25% precision level - pe02 - 50% precision level", + "type": "string", + "x-ms-summary" : "RHA1 type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid SHA1 value", + "required": true, + "type": "string", + "x-ms-summary" : "Hash value" + }, + { + "name": "next_page_sha1", + "in": "query", + "type": "string", + "default": "false", + "description": "next_page_sha1 is an optional parameter used for pagination. It is the SHA1 hash of the first file on the next page.", + "x-ms-summary" : "Next page sha1" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary" : "Format" + }, + { + "name": "limit", + "in": "query", + "type": "integer", + "default": 1000, + "description": "the maximum number of file SHA1 hashes to return. This value has to be an integer in the range from 1 and 1000 (1000 is the default value)", + "x-ms-summary" : "Limit" + }, + { + "name": "extended", + "in": "query", + "type": "string", + "default": "false", + "description": "extended is an optional parameter. Possible values are true - extended, and false - non-extended data set (default)", + "x-ms-summary" : "Extended" + }, + { + "name": "classification", + "in": "query", + "type": "string", + "description": "if this parameter is provided in the request, the query will return a filtered list of files that match the requested classification. Possible values are: - KNOWN - SUSPICIOUS - MALICIOUS - UNKNOWN", + "x-ms-summary" : "Classification" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/imphash_index/v1/query/{hash_value}": { + "get": { + "summary": "Get Similar File Hashes Using Import Hashing Algorithm", + "description": "This service provides a list of SHA1 hashes functionally similar to the file associated with the provided import hash (ImpHash).", + "operationId": "Get-api-historic-multi-av-scan-records-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid ImpHash hash", + "required": true, + "type": "string", + "x-ms-summary" : "Hash value" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary" : "Format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/search/v1/query": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "text/xml", + "application/json" + ], + "parameters": [ + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/json", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Query" + }, + "x-examples": { + "application/json": "{\n \"query\": \"firstseen:[2017-06-20T00:00:00Z TO 2017-06-21T00:00:00Z] classification:[malicious, suspicious] threatname:win32\",\"page\":1, \"records_per_page\":1000,\"format\":\"xml\", \"sort\":\"firstseen asc\"\n}" + }, + "x-ms-summary" : "Body" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "summary": "Find Files Using Multi-Part Search Criteria", + "description": "This service provides a means to acquire a list of hashes that match the provided multi-part search criteria.", + "operationId": "Post-advanced-search-query" + } + }, + "/api/uri/statistics/uri_state/sha1/{hash_value}": { + "get": { + "summary": "Get URI Statistics on Email addresses, IP(s), Domain(s) and URL(s)", + "description": "This service provides statistical information on the number of known, malicious, and suspicious file(s) associated with the URI.", + "operationId": "Get-fetch-uri-state", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_value", + "in": "path", + "description": "required parameter; The SHA1 hash value of the URI string", + "required": true, + "type": "string", + "x-ms-summary" : "Hash value" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "json", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `json` (default).", + "x-ms-summary" : "Format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/networking/url/v1/report/query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-url-threat-intelligence", + "description": "This service returns threat intelligence data, including reputation from various reputation sources, metadata for performed URL analyses, and the maliciousness of files found on the submitted URL.", + "summary": "Get URL Threat Intelligence Report", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary" : "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/octet-stream", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary" : "Body" + } + ] + } + }, + "/api/networking/url/v1/analyze/query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-url-analyze", + "description": "This service enables the submission of a URL for analysis. ReversingLabs will crawl the URL, identifying files to download and submitting them to our file processing pipeline for classification and enrichment. A detailed report can then be retrieved using our URL Threat Intelligence API.", + "summary": "Analyze URL", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary" : "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/octet-stream", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary" : "Body" + } + ] + } + }, + "/api/certificate/index/v1/query/thumbprint/{thumbprint}": { + "get": { + "summary": "Get Files Signed with Specific Certificate Thumbprint(s)", + "description": "This service provides a list of files signed with a particular certificate, specified by its thumbprint.", + "operationId": "Get-api-certificate-index-v1-query-thumbprint", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "thumbprint", + "in": "path", + "description": " the thumbprint (sha1, sha256, md5) of the requested certificate. Most of our certificates use SHA256 for storing the thumbprint", + "required": true, + "type": "string", + "x-ms-summary" : "Thumbprint" + }, + { + "name": "classification", + "in": "query", + "type": "string", + "required": false, + "description": " if this parameter is provided in the request, the query will return a list of only those files that match the requested threat status. Possible values are: KNOWN, MALICIOUS, SUSPICIOUS, UNKNOWN", + "x-ms-summary" : "Classification" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "json", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary" : "Format" + }, + { + "name": "limit", + "in": "query", + "type": "integer", + "default": 100, + "description": "Maximum number of files to return in the certificate file list. It is possible to choose a number between 1 and 100 (100 is the default value)", + "x-ms-summary" : "Limit" + }, + { + "name": "extended", + "in": "query", + "required": true, + "type": "boolean", + "default": false, + "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", + "x-ms-summary" : "Extended" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/spex/upload/{sha1_value}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-sample-file-upload", + "description": "This services provides a means to upload a file for analysis.", + "summary": "Sample file upload", + "parameters": [ + { + "name": "sha1_value", + "in": "path", + "required": true, + "type": "string", + "description": "Required parameter.", + "x-ms-summary" : "SHA1 value" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/octet-stream", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary" : "Body" + } + ] + } + }, + "/api/spex/upload/{sha1_value}/meta": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-sample-metadata-upload", + "description": "This service provides a means to send metadata for previously successfully uploaded file.", + "summary": "Sample metadata file upload", + "parameters": [ + { + "name": "sha1_value", + "in": "path", + "required": true, + "type": "string", + "description": "Required parameter.", + "x-ms-summary" : "SHA1 value" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description":"Content type", + "default": "application/octet-stream", + "x-ms-summary" : "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary" : "Body" + } + ] + } + } + }, + "definitions": { + "Query": { + "properties": { + "query": { + "type": "string", + "description": "Every expression must be built according the the following format::. Please consult RL documentation for a list of field names and the operators that can be applied.", + "title": "" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "records_per_page": { + "type": "integer", + "format": "int32", + "description": "The number of records returned in the response.", + "title": "", + "default": 10000 + }, + "format": { + "type": "string", + "description": "Option to return in specific format", + "title": "", + "default": "xml", + "enum": [ + "xml", + "json" + ] + } + }, + "type": "object", + "required": [ + "query" + ] + }, + "rl": { + "type": "object" + } + }, + "tags": [ + { + "name": "File Reputation" + } + ], + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "security": [ + { + "basic_auth": [] + } + ] +} diff --git a/custom-connectors/ReversingLabs Intelligence/apiProperties.json b/custom-connectors/ReversingLabs Intelligence/apiProperties.json new file mode 100644 index 000000000..d6a86f78d --- /dev/null +++ b/custom-connectors/ReversingLabs Intelligence/apiProperties.json @@ -0,0 +1,41 @@ +{ + "properties":{ + "capabilities":[ + + ], + "connectionParameters":{ + "username":{ + "type":"securestring", + "uiDefinition":{ + "displayName":"username", + "description":"The username for this api", + "tooltip":"Provide the username", + "constraints":{ + "tabIndex":2, + "clearText":true, + "required":"true" + } + } + }, + "password":{ + "type":"securestring", + "uiDefinition":{ + "displayName":"password", + "description":"The password for this api", + "tooltip":"Provide the password", + "constraints":{ + "tabIndex":3, + "clearText":false, + "required":"true" + } + } + } + }, + "iconBrandColor":"#F7153D", + "policyTemplateInstances":[ + + ], + "publisher":"ReversingLabs US Inc.", + "stackOwner":"ReversingLabs US Inc." + } +} diff --git a/custom-connectors/ReversingLabs Intelligence/readme.md b/custom-connectors/ReversingLabs Intelligence/readme.md new file mode 100644 index 000000000..45baef901 --- /dev/null +++ b/custom-connectors/ReversingLabs Intelligence/readme.md @@ -0,0 +1,11 @@ +# ReversingLabs Intelligence + +ReversingLabs continually processes goodware and malware files providing early intelligence about attacks before they infiltrate customer infrastructures. This visibility to threats “in-the-wild” enables preparation for new attacks and quickly identifies the threat levels of new files as they arrive. ReversingLabs enables more effective and efficient threat identification, development of better threat intelligence, and implementation of proactive threat hunting programs. + +## Prerequisites + +To use this integration, you need to have a ReversingLabs account. Please contact `sales@reversinglabs.com` to get started. + +## Known issues and limitations + +Please note that some of our APIs will return a 404 to indicate that a resource was not found. This is not an error state but simply informational. To avoid the Logic App showing errors in the run state, we were advised to place calls to APIs in a Scope primitive. From 46dab828aad8878036924ed654e3c79a514d60f5 Mon Sep 17 00:00:00 2001 From: Wael El Zahr Date: Fri, 23 Oct 2020 06:29:22 +0300 Subject: [PATCH 155/347] Updates Zenkraft Connector (#507) * Zenkraft Custom connector added * Updated 'Readme' and moved Zenkraft to Certified Connectors * Updated indentation and removed empty commands Co-authored-by: Wael El Zahr --- certified-connectors/Zenkraft/Readme.md | 27 + .../Zenkraft/apiDefinition.swagger.json | 1667 +++++++++++++++++ .../Zenkraft/apiProperties.json | 23 + 3 files changed, 1717 insertions(+) create mode 100644 certified-connectors/Zenkraft/Readme.md create mode 100644 certified-connectors/Zenkraft/apiDefinition.swagger.json create mode 100644 certified-connectors/Zenkraft/apiProperties.json diff --git a/certified-connectors/Zenkraft/Readme.md b/certified-connectors/Zenkraft/Readme.md new file mode 100644 index 000000000..fa12234e3 --- /dev/null +++ b/certified-connectors/Zenkraft/Readme.md @@ -0,0 +1,27 @@ +The Zenkraft shipping API is designed to make it easy to rate, book, track and schedule pickups with a growing list of shipping carriers. + +## How to get credentials +You will need a paid subscription to access the Zenkraft API. Please contact sales@zenkraft.com + + +## Prerequisites +You will need the following to proceed: +* A Zenkraft API Key + +## Known issues and limitations +If there's an issue with a carrier's web service, our connector will return an error message + + +## Supported Operations +The connector supports the following operations: +* `Get rates` +* `Create Shipment` +* `Pickup Shipment` +* `Cancel Shipment` +* `Track Shipment` +* `Print Label` +* `Get Printers` + + + + diff --git a/certified-connectors/Zenkraft/apiDefinition.swagger.json b/certified-connectors/Zenkraft/apiDefinition.swagger.json new file mode 100644 index 000000000..da7a30a75 --- /dev/null +++ b/certified-connectors/Zenkraft/apiDefinition.swagger.json @@ -0,0 +1,1667 @@ +{ + "basePath": "/", + "consumes": [ "application/json" ], + "definitions": {}, + "host": "api.zenkraft.com", + "info": { + "description": "Connects to Zenkraft API to create/manage/track shipments from 50+ Different carriers", + "title": "Zenkraft", + "version": "1.0", + "contact": { + "name": "Zenkraft Support", + "url": "https://zenkraft.com/docs", + "email": "support@zenkraft.com" + } + }, + "parameters": {}, + "paths": { + "/cancel": { + "post": { + "description": "Cancels a shipment with a given shipment ID or tracking number", + "operationId": "cancelshipment", + "parameters": [ + { + "in": "body", + "name": "body", + "required": false, + "schema": { + "properties": { + "cancel": { + "description": "cancel", + "properties": { + "carrier": { + "description": "carrier", + "type": "string" + }, + "shipping_account": { + "description": "shipping_account", + "format": "int32", + "title": "", + "type": "string" + }, + "test": { + "description": "test", + "type": "boolean" + }, + "tracking_number": { + "description": "tracking_number", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "success": { + "description": "success", + "properties": { + "message": { + "description": "message", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "properties": { + "code": { + "description": "code", + "type": "string" + }, + "detail": { + "description": "detail", + "type": "string" + }, + "message": { + "description": "message", + "type": "string" + } + } + } + } + + }, + "summary": "Cancel Shipment" + } + }, + "/pickup": { + "post": { + "description": "Schedules a shipment for pickup", + "operationId": "pickupshipment", + "parameters": [ + { + "in": "body", + "name": "body", + "required": false, + "schema": { + "properties": { + "pickup": { + "description": "pickup", + "properties": { + "carrier": { + "description": "carrier", + "type": "string" + }, + "debug": { + "description": "debug", + "type": "boolean" + }, + "description": { + "description": "description", + "type": "string" + }, + "dim_units": { + "description": "dim_units", + "type": "string" + }, + "location": { + "description": "location", + "properties": { + "city": { + "description": "city", + "title": "pickup city", + "type": "string" + }, + "company": { + "description": "company", + "title": "pickup company", + "type": "string" + }, + "country": { + "description": "country", + "title": "pickup country", + "type": "string" + }, + "email": { + "description": "email", + "title": "pickup email", + "type": "string" + }, + "location_type": { + "description": "location_type", + "type": "string" + }, + "name": { + "description": "name", + "title": "pickup name", + "type": "string" + }, + "phone": { + "description": "phone", + "title": "pickup phone", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "title": "pickup postal code", + "type": "string" + }, + "residential": { + "description": "residential", + "type": "boolean" + }, + "state": { + "description": "state", + "title": "pickup state", + "type": "string" + }, + "street1": { + "description": "street1", + "title": "pickup street1", + "type": "string" + } + }, + "type": "object" + }, + "shipments": { + "description": "shipments", + "items": { + "properties": { + "package_type": { + "description": "package_type", + "type": "string" + }, + "packages": { + "description": "packages", + "items": { + "properties": { + "height": { + "description": "height", + "format": "int32", + "type": "integer" + }, + "length": { + "description": "length", + "format": "int32", + "type": "integer" + }, + "value": { + "description": "value", + "format": "int32", + "type": "integer" + }, + "weight": { + "description": "weight", + "format": "int32", + "type": "integer" + }, + "width": { + "description": "width", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "recipient": { + "description": "recipient", + "properties": { + "city": { + "description": "city", + "title": "recipient city", + "type": "string" + }, + "company": { + "description": "company", + "title": "recipient company", + "type": "string" + }, + "country": { + "description": "country", + "title": "recipient country", + "type": "string" + }, + "email": { + "description": "email", + "title": "recipient email", + "type": "string" + }, + "name": { + "description": "name", + "title": "recipient name", + "type": "string" + }, + "phone": { + "description": "phone", + "title": "recipient phone", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "title": "recipient postal code", + "type": "string" + }, + "state": { + "description": "state", + "title": "recipient state", + "type": "string" + }, + "street1": { + "description": "street1", + "title": "recipient street1", + "type": "string" + } + }, + "type": "object" + }, + "service": { + "description": "service", + "title": "shipment service", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "shipping_account": { + "description": "shipping_account", + "format": "float", + "title": "", + "type": "string" + }, + "test": { + "description": "test", + "type": "boolean" + }, + "time": { + "description": "time", + "properties": { + "close_time": { + "description": "close_time", + "type": "string" + }, + "date": { + "description": "date", + "type": "string" + }, + "ready_time": { + "description": "ready_time", + "type": "string" + } + }, + "type": "object" + }, + "weight_units": { + "description": "weight_units", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "shipment": { + "description": "shipment", + "properties": { + "carrier": { + "description": "carrier", + "type": "string" + }, + "checkpoints": { + "description": "checkpoints", + "items": { + "properties": { + "description": { + "description": "description", + "type": "string" + }, + "location": { + "description": "location", + "properties": { + "city": { + "description": "city", + "type": "string" + }, + "country": { + "description": "country", + "type": "string" + }, + "state": { + "description": "state", + "type": "string" + } + }, + "type": "object" + }, + "signed_by": { + "description": "signed_by", + "type": "string" + }, + "time": { + "description": "time", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "costs": { + "description": "costs", + "properties": { + "currency": { + "description": "currency", + "type": "string" + }, + "net_charge": { + "description": "net_charge", + "type": "string" + } + }, + "type": "object" + }, + "currency": { + "description": "currency", + "type": "string" + }, + "debug": { + "description": "debug", + "type": "boolean" + }, + "delivered": { + "description": "delivered", + "type": "boolean" + }, + "dim_units": { + "description": "dim_units", + "type": "string" + }, + "id": { + "description": "id", + "type": "string" + }, + "include_base64_label": { + "description": "include_base64_label", + "type": "boolean" + }, + "label_type": { + "description": "label_type", + "type": "string" + }, + "packages": { + "description": "packages", + "items": { + "properties": { + "height": { + "description": "height", + "type": "string" + }, + "label": { + "description": "label", + "type": "string" + }, + "label_type": { + "description": "label_type", + "type": "string" + }, + "length": { + "description": "length", + "type": "string" + }, + "tracking_number": { + "description": "tracking_number", + "type": "string" + }, + "value": { + "description": "value", + "type": "string" + }, + "weight": { + "description": "weight", + "type": "string" + }, + "width": { + "description": "width", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "packaging": { + "description": "packaging", + "type": "string" + }, + "recipient": { + "description": "recipient", + "properties": { + "city": { + "description": "city", + "type": "string" + }, + "company": { + "description": "company", + "type": "string" + }, + "country": { + "description": "country", + "type": "string" + }, + "email": { + "description": "email", + "type": "string" + }, + "name": { + "description": "name", + "type": "string" + }, + "phone": { + "description": "phone", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "type": "string" + }, + "state": { + "description": "state", + "type": "string" + }, + "street1": { + "description": "street1", + "type": "string" + } + }, + "type": "object" + }, + "references": { + "description": "references", + "items": {}, + "type": "array" + }, + "sender": { + "description": "sender", + "properties": { + "city": { + "description": "city", + "type": "string" + }, + "company": { + "description": "company", + "type": "string" + }, + "country": { + "description": "country", + "type": "string" + }, + "email": { + "description": "email", + "type": "string" + }, + "name": { + "description": "name", + "type": "string" + }, + "phone": { + "description": "phone", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "type": "string" + }, + "state": { + "description": "state", + "type": "string" + }, + "street1": { + "description": "street1", + "type": "string" + } + }, + "type": "object" + }, + "service": { + "description": "service", + "type": "string" + }, + "ship_date": { + "description": "ship_date", + "type": "string" + }, + "shipping_account": { + "description": "shipping_account", + "format": "float", + "title": "", + "type": "string" + }, + "special_services": { + "description": "special_services", + "items": {}, + "type": "array" + }, + "status": { + "description": "status", + "type": "string" + }, + "test": { + "description": "test", + "type": "boolean" + }, + "tracking_number": { + "description": "tracking_number", + "type": "string" + }, + "type": { + "description": "type", + "type": "string" + }, + "weight_units": { + "description": "weight_units", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "properties": { + "code": { + "description": "code", + "type": "string" + }, + "detail": { + "description": "detail", + "type": "string" + }, + "message": { + "description": "message", + "type": "string" + } + } + } + } + }, + "summary": "Schedule Pickup" + } + }, + "/print": { + "post": { + "description": "Sends a command to print the shipping label based on the base64 string", + "operationId": "print", + "parameters": [ + { + "in": "body", + "name": "body", + "required": false, + "schema": { + "properties": { + "content": { + "description": "content", + "type": "string" + }, + "printer_id": { + "description": "printer_id", + "format": "int32", + "type": "integer" + }, + "tray": { + "default": "auto", + "description": "tray", + "title": "", + "type": "string" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "success": { + "description": "success", + "properties": { + "message": { + "description": "message", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "properties": { + "code": { + "description": "code", + "type": "string" + }, + "detail": { + "description": "detail", + "type": "string" + }, + "message": { + "description": "message", + "type": "string" + } + } + } + } + }, + "summary": "Print Shipping Label" + } + }, + "/printers": { + "get": { + "description": "Request returns credentials, the list of available printers, their trays and some additional data.", + "operationId": "getprinters", + "parameters": [], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "credentials": { + "description": "credentials", + "properties": { + "email": { + "description": "email", + "type": "string" + }, + "password": { + "description": "password", + "type": "string" + } + }, + "type": "object" + }, + "printers": { + "description": "printers", + "items": { + "properties": { + "active_tray": { + "description": "active_tray", + "type": "string" + }, + "computer_id": { + "description": "computer_id", + "format": "int32", + "type": "integer" + }, + "computer_name": { + "description": "computer_name", + "type": "string" + }, + "id": { + "description": "id", + "format": "int32", + "type": "integer" + }, + "printer_name": { + "description": "printer_name", + "type": "string" + }, + "status": { + "description": "status", + "type": "string" + }, + "tray": { + "description": "tray", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "properties": { + "code": { + "description": "code", + "type": "string" + }, + "detail": { + "description": "detail", + "type": "string" + }, + "message": { + "description": "message", + "type": "string" + } + } + } + } + }, + "summary": "Get Printers" + } + }, + "/rate": { + "post": { + "description": "Obtains available shipping rates based on shipping accounts provided.", + "operationId": "getrates", + "parameters": [ + { + "in": "body", + "name": "body", + "required": false, + "schema": { + "properties": { + "shipment": { + "description": "shipment", + "properties": { + "carrier": { + "description": "carrier", + "type": "string" + }, + "currency": { + "description": "currency", + "type": "string" + }, + "dim_units": { + "description": "dim_units", + "type": "string" + }, + "packages": { + "description": "packages", + "items": { + "properties": { + "height": { + "description": "height", + "format": "int32", + "type": "integer" + }, + "length": { + "description": "length", + "format": "int32", + "type": "integer" + }, + "value": { + "description": "value", + "format": "int32", + "type": "integer" + }, + "weight": { + "description": "weight", + "format": "int32", + "type": "integer" + }, + "width": { + "description": "width", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "recipient": { + "description": "recipient", + "properties": { + "city": { + "description": "city", + "title": "recipient city", + "type": "string" + }, + "country": { + "description": "country", + "title": "recipient country", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "title": "recipient postal code", + "type": "string" + }, + "state": { + "description": "state", + "title": "recipient state", + "type": "string" + }, + "street1": { + "description": "street1", + "title": "recipient street 1", + "type": "string" + } + }, + "type": "object" + }, + "sender": { + "description": "sender", + "properties": { + "city": { + "description": "city", + "title": "sender city", + "type": "string" + }, + "country": { + "description": "country", + "title": "sender country", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "title": "sender postal code", + "type": "string" + }, + "state": { + "description": "state", + "title": "sender state", + "type": "string" + }, + "street1": { + "description": "street1", + "title": "sender street 1", + "type": "string" + } + }, + "type": "object" + }, + "shipping_account": { + "description": "shipping_account", + "format": "float", + "title": "", + "type": "string" + }, + "test": { + "description": "test", + "type": "boolean" + }, + "type": { + "description": "type", + "type": "string" + }, + "weight_units": { + "description": "weight_units", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "rates": { + "description": "rates", + "items": { + "properties": { + "carrier": { + "description": "carrier", + "type": "string" + }, + "currency": { + "description": "currency", + "type": "string" + }, + "delivery_day": { + "description": "delivery_day", + "type": "string" + }, + "service_name": { + "description": "service_name", + "type": "string" + }, + "service_type": { + "description": "service_type", + "type": "string" + }, + "total_cost": { + "description": "total_cost", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "properties": { + "code": { + "description": "code", + "type": "string" + }, + "detail": { + "description": "detail", + "type": "string" + }, + "message": { + "description": "message", + "type": "string" + } + } + } + } + + }, + "summary": "Get Available Rates" + } + }, + "/ship": { + "post": { + "description": "Books a shipment with a carrier and returns a shipping label.", + "operationId": "createshipment", + "parameters": [ + { + "in": "body", + "name": "body", + "required": false, + "schema": { + "properties": { + "shipment": { + "description": "shipment", + "properties": { + "carrier": { + "description": "carrier", + "title": "", + "type": "string" + }, + "currency": { + "description": "currency", + "title": "", + "type": "string" + }, + "debug": { + "description": "debug", + "type": "boolean" + }, + "dim_units": { + "description": "dim_units", + "type": "string" + }, + "include_base64_label": { + "description": "include_base64_label", + "type": "boolean" + }, + "label_type": { + "description": "label_type", + "type": "string" + }, + "packages": { + "description": "packages", + "items": { + "properties": { + "carrier_specific": { + "description": "carrier_specific", + "items": {}, + "type": "array" + }, + "height": { + "description": "height", + "format": "int32", + "type": "integer" + }, + "length": { + "description": "length", + "format": "int32", + "type": "integer" + }, + "value": { + "description": "value", + "format": "int32", + "type": "integer" + }, + "weight": { + "description": "weight", + "format": "int32", + "type": "integer" + }, + "width": { + "description": "width", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "packaging": { + "description": "packaging", + "type": "string" + }, + "recipient": { + "description": "recipient", + "properties": { + "city": { + "description": "city", + "title": "recipient city", + "type": "string" + }, + "company": { + "description": "company", + "title": "recipient company", + "type": "string" + }, + "country": { + "description": "country", + "title": "recipient country", + "type": "string" + }, + "email": { + "description": "email", + "title": "recipient email", + "type": "string" + }, + "name": { + "description": "name", + "title": "recipient name", + "type": "string" + }, + "phone": { + "description": "phone", + "title": "recipient phone", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "title": "recipient postal_code", + "type": "string" + }, + "state": { + "description": "state", + "title": "recipient state", + "type": "string" + }, + "street1": { + "description": "street1", + "title": "recipient street1", + "type": "string" + }, + "street2": { + "description": "street2", + "title": "recipient street2", + "type": "string" + } + }, + "type": "object" + }, + "references": { + "description": "references", + "items": { + "properties": { + "type": { + "description": "type", + "title": "reference type", + "type": "string" + }, + "value": { + "description": "value", + "title": "reference value", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "sender": { + "description": "sender", + "properties": { + "city": { + "description": "city", + "title": "sender city", + "type": "string" + }, + "company": { + "description": "company", + "title": "sender company", + "type": "string" + }, + "country": { + "description": "country", + "title": "sender country", + "type": "string" + }, + "email": { + "description": "email", + "title": "sender email", + "type": "string" + }, + "name": { + "description": "name", + "title": "sender name", + "type": "string" + }, + "phone": { + "description": "phone", + "title": "sender phone", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "title": "sender postal_code", + "type": "string" + }, + "state": { + "description": "state", + "title": "sender state", + "type": "string" + }, + "street1": { + "description": "street1", + "title": "sender street1", + "type": "string" + }, + "street2": { + "description": "street2", + "title": "sender street2", + "type": "string" + } + }, + "type": "object" + }, + "service": { + "description": "service", + "type": "string" + }, + "ship_date": { + "description": "ship_date", + "type": "string" + }, + "shipping_account": { + "description": "shipping_account", + "format": "float", + "title": "", + "type": "string" + }, + "test": { + "description": "test", + "type": "boolean" + }, + "type": { + "description": "type", + "type": "string" + }, + "weight_units": { + "description": "weight_units", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "shipment": { + "description": "shipment", + "properties": { + "carrier": { + "description": "carrier", + "type": "string" + }, + "costs": { + "description": "costs", + "properties": { + "base_charge": { + "description": "base_charge", + "type": "string" + }, + "currency": { + "description": "currency", + "type": "string" + }, + "discounts": { + "description": "discounts", + "type": "string" + }, + "net_charge": { + "description": "net_charge", + "type": "string" + }, + "surcharges": { + "description": "surcharges", + "type": "string" + }, + "taxes": { + "description": "taxes", + "type": "string" + } + }, + "type": "object" + }, + "currency": { + "description": "currency", + "type": "string" + }, + "dim_units": { + "description": "dim_units", + "type": "string" + }, + "id": { + "description": "id", + "type": "string" + }, + "label_type": { + "description": "label_type", + "type": "string" + }, + "packages": { + "description": "packages", + "items": { + "properties": { + "height": { + "description": "height", + "format": "int32", + "type": "integer" + }, + "label": { + "description": "label", + "type": "string" + }, + "label_type": { + "description": "label_type", + "type": "string" + }, + "length": { + "description": "length", + "format": "int32", + "type": "integer" + }, + "tracking_number": { + "description": "tracking_number", + "type": "string" + }, + "value": { + "description": "value", + "format": "int32", + "type": "integer" + }, + "weight": { + "description": "weight", + "type": "string" + }, + "width": { + "description": "width", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "packaging": { + "description": "packaging", + "type": "string" + }, + "recipient": { + "description": "recipient", + "properties": { + "city": { + "description": "city", + "type": "string" + }, + "country": { + "description": "country", + "type": "string" + }, + "name": { + "description": "name", + "type": "string" + }, + "phone": { + "description": "phone", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "type": "string" + }, + "state": { + "description": "state", + "type": "string" + }, + "street1": { + "description": "street1", + "type": "string" + } + }, + "type": "object" + }, + "references": { + "description": "references", + "items": { + "properties": { + "type": { + "description": "type", + "type": "string" + }, + "value": { + "description": "value", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "sender": { + "description": "sender", + "properties": { + "city": { + "description": "city", + "type": "string" + }, + "country": { + "description": "country", + "type": "string" + }, + "name": { + "description": "name", + "type": "string" + }, + "phone": { + "description": "phone", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "type": "string" + }, + "state": { + "description": "state", + "type": "string" + }, + "street1": { + "description": "street1", + "type": "string" + } + }, + "type": "object" + }, + "service": { + "description": "service", + "type": "string" + }, + "ship_date": { + "description": "ship_date", + "type": "string" + }, + "shipping_account": { + "description": "shipping_account", + "format": "int64", + "title": "", + "type": "integer" + }, + "shipping_documents": { + "description": "shipping_documents", + "items": {}, + "type": "array" + }, + "test": { + "description": "test", + "type": "boolean" + }, + "tracking_number": { + "description": "tracking_number", + "type": "string" + }, + "type": { + "description": "type", + "type": "string" + }, + "weight_units": { + "description": "weight_units", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "properties": { + "code": { + "description": "code", + "type": "string" + }, + "detail": { + "description": "detail", + "type": "string" + }, + "message": { + "description": "message", + "type": "string" + } + } + } + } + }, + "summary": "Create a shipment" + } + }, + "/track": { + "post": { + "description": "Tracks a shipment with a carrier and returns the checkpoints.", + "operationId": "trackshipment", + "parameters": [ + { + "in": "body", + "name": "body", + "required": false, + "schema": { + "properties": { + "track": { + "description": "track", + "properties": { + "carrier": { + "description": "carrier", + "type": "string" + }, + "shipping_account": { + "description": "shipping_account", + "format": "float", + "title": "", + "type": "string" + }, + "test": { + "description": "test", + "type": "boolean" + }, + "tracking_number": { + "description": "tracking_number", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "default", + "schema": { + "properties": { + "carrier": { + "description": "carrier", + "type": "string" + }, + "checkpoints": { + "description": "checkpoints", + "items": { + "properties": { + "description": { + "description": "description", + "type": "string" + }, + "location": { + "description": "location", + "properties": { + "city": { + "description": "city", + "type": "string" + }, + "country": { + "description": "country", + "type": "string" + }, + "postal_code": { + "description": "postal_code", + "type": "string" + }, + "state": { + "description": "state", + "type": "string" + } + }, + "type": "object" + }, + "time": { + "description": "time", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "status", + "type": "string" + } + }, + "type": "object" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "properties": { + "code": { + "description": "code", + "type": "string" + }, + "detail": { + "description": "detail", + "type": "string" + }, + "message": { + "description": "message", + "type": "string" + } + } + } + } + }, + "summary": "Track Shipment" + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://zenkraft.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://zenkraft.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Commerce;Sales and CRM" + } + ], + "produces": [], + "responses": {}, + "schemes": [ + "https" + ], + "security": [ + { + "API Key": [] + } + ], + "securityDefinitions": { + "API Key": { + "in": "header", + "name": "zkkey", + "type": "apiKey" + } + }, + "swagger": "2.0", + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/Zenkraft/apiProperties.json b/certified-connectors/Zenkraft/apiProperties.json new file mode 100644 index 000000000..1b15cc5b8 --- /dev/null +++ b/certified-connectors/Zenkraft/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "capabilities": [], + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "constraints": { + "clearText": false, + "required": "true", + "tabIndex": 2 + }, + "description": "The API Key for this api", + "displayName": "API Key", + "tooltip": "Provide your API Key" + } + } + }, + "iconBrandColor": "#dcdaff", + "publisher": "Zenkraft", + "stackOwner": "Zenkraft" + } +} \ No newline at end of file From 3f76d023460cc89879a78a029fa8c05052b26ec8 Mon Sep 17 00:00:00 2001 From: Frank Lu Date: Fri, 23 Oct 2020 18:39:08 +0800 Subject: [PATCH 156/347] Initial for certificate --- .../Yeeflow/apiDefinition.swagger.json | 1165 +++++++++++++++++ .../Yeeflow/apiProperties.json | 36 + certified-connectors/Yeeflow/readme.md | 30 + 3 files changed, 1231 insertions(+) create mode 100644 certified-connectors/Yeeflow/apiDefinition.swagger.json create mode 100644 certified-connectors/Yeeflow/apiProperties.json create mode 100644 certified-connectors/Yeeflow/readme.md diff --git a/certified-connectors/Yeeflow/apiDefinition.swagger.json b/certified-connectors/Yeeflow/apiDefinition.swagger.json new file mode 100644 index 000000000..ce9bc2b0a --- /dev/null +++ b/certified-connectors/Yeeflow/apiDefinition.swagger.json @@ -0,0 +1,1165 @@ +{ + "swagger": "2.0", + "info": { + "title": "Yeeflow", + "description": "Yeeflow is a no-code application development platform that empowers you to build enterprise-class applications that run on mobile, tablet, and web. Create custom forms, configure workflows, build informative dashboard, and get your app up and running in minutes.", + "version": "1.0", + "contact": { + "name": "Yeeflow Support", + "url": "https://support.yeeflow.com", + "email": "support@yeeflow.com" + } + }, + "host": "api.yeeflow.com", + "basePath": "/v1/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.yeeflow.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.yeeflow.com/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Productivity;Business Management" + } + ], + "paths": { + "/lists/41/{listID}/items": { + "post": { + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "string", + "description": "ID of added item", + "x-ms-summary": "Item ID" + }, + "Status": { + "type": "integer", + "description": "0 is success", + "format": "int32" + }, + "Message": { + "type": "string", + "description": "Error message" + } + } + } + } + }, + "summary": "Add an item to a list", + "operationId": "AddItem", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetListFieldsSchema", + "value-path": "Data", + "parameters": { + "appID": 41, + "listID": { + "parameter": "listID" + }, + "type": "editable" + } + } + } + } + } + } + ], + "description": "Add an item to a list" + } + }, + "/lists/{appID}/{listID}/fields/schema": { + "get": { + "responses": { + "200": { + "description": "success", + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "object", + "description": "List fields schema" + } + } + } + } + }, + "summary": "Get List Fields Schema", + "operationId": "GetListFieldsSchema", + "x-ms-visibility": "internal", + "parameters": [ + { + "name": "appID", + "in": "path", + "required": true, + "type": "integer" + }, + { + "name": "listID", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "type", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "all", + "editable" + ], + "x-ms-summary": "Field types fitler", + "x-ms-enum-values": [ + { + "displayName": "All fields", + "value": "all" + }, + { + "displayName": "Editable fields", + "value": "editable" + } + ] + } + ], + "description": "Get List Fields Schema" + } + }, + "/lists/41/{listID}/items/{id}": { + "get": { + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetListFieldsSchema", + "value-path": "Data", + "parameters": { + "appID": 41, + "listID": { + "parameter": "listID" + } + } + } + }, + "Status": { + "type": "integer", + "format": "int32", + "description": "Status" + }, + "Message": { + "type": "string", + "description": "Message" + } + } + } + } + }, + "summary": "Get an item by ID", + "description": "Get an item by ID", + "operationId": "GetItem", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ListDataID", + "x-ms-summary": "Item ID" + } + ] + }, + "delete": { + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "string", + "description": "ID of deleted item", + "x-ms-summary": "Item ID" + }, + "Status": { + "type": "integer", + "format": "int32", + "description": "Status" + }, + "Message": { + "type": "string", + "description": "Message" + } + } + } + } + }, + "summary": "Delete an item", + "description": "Delete an item", + "operationId": "DeleteItem", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ListDataID", + "x-ms-summary": "Item ID" + } + ] + }, + "patch": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "string", + "description": "ID of updated item", + "x-ms-summary": "Item ID" + }, + "Status": { + "type": "integer", + "format": "int32", + "description": "Status" + }, + "Message": { + "type": "string", + "description": "Message" + } + } + } + } + }, + "summary": "Update an item by ID", + "operationId": "UpdateItem", + "description": "Update an item by ID", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "description": "ListDataID", + "x-ms-summary": "Item ID" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "RowVersion": { + "type": "integer", + "format": "int32", + "description": "RowVersion" + }, + "Data": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetListFieldsSchema", + "value-path": "Data", + "parameters": { + "appID": 41, + "listID": { + "parameter": "listID" + }, + "type": "editable" + } + } + } + } + } + } + ] + } + }, + "/lists/41/{listID}/fields": { + "get": { + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "FieldID": { + "type": "integer", + "format": "int32", + "description": "Field ID" + }, + "FieldName": { + "type": "string", + "description": "Field Name" + }, + "DisplayName": { + "type": "string", + "description": "Display Name" + }, + "InternalName": { + "type": "string", + "description": "Internal Name" + }, + "Type": { + "type": "string", + "description": "Type" + }, + "DefaultValue": { + "type": "string", + "description": "Default Value" + }, + "Rules": { + "type": "string", + "description": "Rules" + }, + "IsSort": { + "type": "boolean", + "description": "IsSort" + }, + "IsIndex": { + "type": "boolean", + "description": "IsIndex" + }, + "IsSystem": { + "type": "boolean", + "description": "IsSystem" + }, + "IsUnique": { + "type": "boolean", + "description": "IsUnique" + }, + "Created": { + "type": "string", + "description": "Created" + }, + "Modified": { + "type": "string", + "description": "Modified" + }, + "CreatedBy": { + "type": "string", + "description": "Created By" + }, + "ModifiedBy": { + "type": "string", + "description": "Modified By" + } + } + }, + "description": "Data" + }, + "Status": { + "type": "integer", + "format": "int32", + "description": "Status" + }, + "Message": { + "type": "string", + "description": "Message" + }, + "TotalCount": { + "type": "integer", + "format": "int32", + "description": "TotalCount" + } + } + } + } + }, + "summary": "Get fields of a list", + "description": "Get fields of a list", + "operationId": "GetListFields", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + } + ] + } + }, + "/applications": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "AppID": { + "type": "integer", + "format": "int32", + "description": "AppID" + }, + "ListID": { + "type": "string", + "description": "ListID" + }, + "Title": { + "type": "string", + "description": "Title" + }, + "Description": { + "type": "string", + "description": "Description" + }, + "IsVerRecord": { + "type": "boolean", + "description": "IsVerRecord" + }, + "IconUrl": { + "type": "string", + "description": "IconUrl" + }, + "Created": { + "type": "string", + "description": "Created" + }, + "Modified": { + "type": "string", + "description": "Modified" + }, + "CreatedBy": { + "type": "string", + "description": "CreatedBy" + }, + "ModifiedBy": { + "type": "string", + "description": "ModifiedBy" + }, + "WorkspaceID": { + "type": "string", + "description": "WorkspaceID" + } + } + }, + "description": "Data" + }, + "Status": { + "type": "integer", + "format": "int32", + "description": "Status" + }, + "Message": { + "type": "string", + "description": "Message" + } + } + } + } + }, + "summary": "Get Applications", + "description": "Get Applications", + "x-ms-visibility": "internal", + "operationId": "GetApplications", + "parameters": [ + { + "name": "appID", + "in": "query", + "required": false, + "type": "integer" + } + ] + } + }, + "/applications/{listID}/lists": { + "get": { + "responses": { + "200": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "AppID": { + "type": "integer", + "format": "int32", + "description": "AppID" + }, + "ListID": { + "type": "string", + "description": "ListID" + }, + "Title": { + "type": "string", + "description": "Title" + }, + "Description": { + "type": "string", + "description": "Description" + }, + "IsVerRecord": { + "type": "boolean", + "description": "IsVerRecord" + }, + "IconUrl": { + "type": "string", + "description": "IconUrl" + }, + "Created": { + "type": "string", + "description": "Created" + }, + "Modified": { + "type": "string", + "description": "Modified" + }, + "CreatedBy": { + "type": "string", + "description": "CreatedBy" + }, + "ModifiedBy": { + "type": "string", + "description": "ModifiedBy" + }, + "WorkspaceID": { + "type": "string", + "description": "WorkspaceID" + } + } + }, + "description": "Data" + }, + "Status": { + "type": "integer", + "format": "int32", + "description": "Status" + }, + "Message": { + "type": "string", + "description": "Message" + } + } + } + } + }, + "summary": "Get Lists of Application", + "description": "Get Lists of Application", + "x-ms-visibility": "internal", + "operationId": "GetApplicationLists", + "parameters": [ + { + "name": "listID", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "appID", + "in": "query", + "required": false, + "type": "integer" + } + ] + } + }, + "/lists/41/{listID}/hooks/1": { + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/webhookResponse" + }, + "description": "Webhook response" + }, + "post": { + "responses": { + "default": { + "description": "Success", + "schema": { + "type": "object" + } + } + }, + "summary": "When an item is created", + "description": "When an item is created", + "operationId": "OnItemCreated", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "$ref": "#/parameters/channel" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "columnType": { + "type": "integer", + "x-ms-visibility": "internal", + "default": 0 + }, + "callbackUrl": { + "type": "string", + "description": "callbackUrl", + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "title": "" + } + }, + "required": [ + "callbackUrl" + ] + } + } + ] + } + }, + "/lists/41/{listID}/hooks/2": { + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/webhookResponse" + }, + "description": "Webhook response" + }, + "post": { + "responses": { + "default": { + "description": "Success", + "schema": { + "type": "object" + } + } + }, + "summary": "When an item is modified", + "description": "When an item is modified", + "operationId": "OnItemModified", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "$ref": "#/parameters/channel" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "columnType": { + "type": "integer", + "x-ms-visibility": "internal", + "default": 0 + }, + "callbackUrl": { + "type": "string", + "description": "callbackUrl", + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "title": "" + } + }, + "required": [ + "callbackUrl" + ] + } + } + ] + } + }, + "/lists/41/{listID}/hooks/3": { + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/webhookResponse" + }, + "description": "Webhook response" + }, + "post": { + "responses": { + "default": { + "description": "Success", + "schema": { + "type": "object" + } + } + }, + "summary": "When an item is created or modified", + "description": "When an item is created or modified", + "operationId": "OnItemCreatedModified", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "$ref": "#/parameters/channel" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "columnType": { + "type": "integer", + "x-ms-visibility": "internal", + "default": 0 + }, + "callbackUrl": { + "type": "string", + "description": "callbackUrl", + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "title": "" + } + }, + "required": [ + "callbackUrl" + ] + } + } + ] + } + }, + "/lists/41/{listID}/hooks/4": { + "x-ms-notification-content": { + "schema": { + "$ref": "#/definitions/webhookResponse" + }, + "description": "Webhook response" + }, + "post": { + "responses": { + "default": { + "description": "Success", + "schema": { + "type": "object" + } + } + }, + "summary": "When an item is deleted", + "description": "When an item is deleted", + "operationId": "OnItemDeleted", + "x-ms-trigger": "single", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "$ref": "#/parameters/channel" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "columnType": { + "type": "integer", + "x-ms-visibility": "internal", + "default": 0 + }, + "callbackUrl": { + "type": "string", + "description": "callbackUrl", + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "title": "" + } + }, + "required": [ + "callbackUrl" + ] + } + } + ] + } + }, + "/lists/41/{listID}/items/query": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "Data": { + "description": "Query retrieved items", + "x-ms-summary": "Items", + "type": "array", + "items": { + "x-ms-dynamic-schema": { + "operationId": "GetListFieldsSchema", + "value-path": "Data", + "parameters": { + "appID": 41, + "listID": { + "parameter": "listID" + } + } + } + } + }, + "Status": { + "type": "integer", + "format": "int32", + "description": "Status" + }, + "Message": { + "type": "string", + "description": "Message" + }, + "TotalCount": { + "type": "integer", + "format": "int32", + "description": "TotalCount" + } + } + } + } + }, + "summary": "Query items", + "description": "Query items", + "operationId": "QueryItems", + "parameters": [ + { + "$ref": "#/parameters/application" + }, + { + "$ref": "#/parameters/listID" + }, + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "Fields": { + "type": "array", + "items": { + "$ref": "#/definitions/fieldName" + }, + "description": "Only data for fields whose IDs are in this list will be included in the result. If you don't need every field, you can use this parameter to reduce the amount of data transferred.\n\n Server will return all fields value of the item if you don't pass this parameter.\n" + }, + "Filters": { + "type": "array", + "items": { + "$ref": "#/definitions/listDataWhereRequest" + }, + "description": "Filters" + }, + "Sorts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Field": { + "$ref": "#/definitions/fieldName" + }, + "Desc": { + "type": "boolean", + "description": "Desc", + "x-ms-summary": "Is descending" + } + } + }, + "description": "Sorts" + }, + "PageIndex": { + "type": "integer", + "format": "int32", + "description": "Page number", + "x-ms-summary": "Page number", + "default": 1 + }, + "PageSize": { + "type": "integer", + "format": "int32", + "description": "Number of records per page", + "x-ms-summary": "Page size", + "default": 10 + } + } + } + } + ] + } + }, + "/lists/{appID}/{listID}/hooks/{hookId}": { + "delete": { + "responses": { + "default": { + "description": "default", + "schema": {} + } + }, + "summary": "Delete a trigger", + "operationId": "DeleteTrigger", + "x-ms-visibility": "internal", + "parameters": [ + { + "name": "appID", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "listID", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "hookId", + "in": "path", + "required": true, + "type": "string" + } + ], + "description": "Delete a trigger" + } + } + }, + "definitions": { + "listDataWhereRequest": { + "type": "object", + "properties": { + "Field": { + "$ref": "#/definitions/fieldName" + }, + "Value": { + "type": "string", + "description": "Value" + }, + "Type": { + "type": "integer", + "format": "int32", + "x-ms-summary": "Filter type", + "description": "https://developer.yeeflow.com/api/#defFilterTypes" + }, + "Pre": { + "type": "string", + "description": "Relation to the previous condition", + "default": "and", + "enum": [ + "and", + "or" + ], + "x-ms-enum-values": [ + { + "displayName": "Or", + "value": "or" + }, + { + "displayName": "And", + "value": "and" + } + ] + }, + "Child": { + "type": "array", + "items": { + "$ref": "#/definitions/listDataWhereRequest" + }, + "description": "Nested filter objects" + } + } + }, + "webhookBody": { + "type": "object", + "properties": { + "columnType": { + "type": "integer", + "x-ms-visibility": "internal", + "default": 0 + }, + "callbackUrl": { + "type": "string", + "description": "callbackUrl", + "x-ms-notification-url": true, + "x-ms-visibility": "internal", + "title": "" + } + }, + "required": [ + "callbackUrl" + ] + }, + "webhookResponse": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "GetListFieldsSchema", + "value-path": "Data", + "parameters": { + "appID": 41, + "listID": { + "parameter": "listID" + } + } + } + }, + "fieldName": { + "type": "string", + "x-ms-summary": "Field", + "description": "Select a field", + "x-ms-dynamic-values": { + "operationId": "GetListFields", + "value-path": "FieldName", + "value-title": "DisplayName", + "value-collection": "Data", + "parameters": { + "application": "", + "listID": { + "parameter": "listID" + } + } + } + } + }, + "parameters": { + "application": { + "name": "application", + "x-ms-summary": "Application", + "description": "Select an application", + "in": "query", + "type": "string", + "required": true, + "x-ms-dynamic-values": { + "operationId": "GetApplications", + "value-path": "ListID", + "value-title": "Title", + "value-collection": "Data", + "parameters": { + "appID": 41 + } + } + }, + "listID": { + "name": "listID", + "x-ms-summary": "List", + "description": "Select a list", + "in": "path", + "required": true, + "type": "string", + "x-ms-dynamic-values": { + "operationId": "GetApplicationLists", + "value-path": "ListID", + "value-title": "Title", + "value-collection": "Data", + "parameters": { + "appID": 41, + "listID": { + "parameter": "application" + } + } + } + }, + "channel": { + "name": "channel", + "x-ms-summary": "Channel for trigger", + "x-ms-visibility": "internal", + "description": "Channel for trigger", + "in": "query", + "type": "string", + "default": "ms-power", + "required": true + } + }, + "responses": {}, + "securityDefinitions": { + "oauth2_auth": { + "type": "oauth2", + "flow": "accessCode", + "authorizationUrl": "https://login.yeeflow.com/connect/authorize", + "tokenUrl": "https://login.yeeflow.com/connect/token", + "scopes": { + "openid basic_api offline_access": "openid basic_api offline_access" + } + } + }, + "security": [ + { + "oauth2_auth": [ + "openid basic_api offline_access" + ] + } + ], + "tags": [] +} \ No newline at end of file diff --git a/certified-connectors/Yeeflow/apiProperties.json b/certified-connectors/Yeeflow/apiProperties.json new file mode 100644 index 000000000..e30307eca --- /dev/null +++ b/certified-connectors/Yeeflow/apiProperties.json @@ -0,0 +1,36 @@ +{ + "properties": { + "connectionParameters": { + "token": { + "type": "oauthSetting", + "oAuthSettings": { + "identityProvider": "oauth2", + "clientId": "18e3f376-5cfd-1ed1-770f-ba933a6041d1", + "scopes": [ + "openid basic_api offline_access" + ], + "redirectMode": "Global", + "redirectUrl": "https://global.consent.azure-apim.net/redirect", + "properties": { + "IsFirstParty": "False" + }, + "customParameters": { + "authorizationUrl": { + "value": "https://login.yeeflow.com/connect/authorize" + }, + "tokenUrl": { + "value": "https://login.yeeflow.com/connect/token" + }, + "refreshUrl": { + "value": "https://login.yeeflow.com/connect/token" + } + } + } + } + }, + "iconBrandColor": "#1ab394", + "capabilities": [], + "publisher": "Yeeflow Singapore PTE. LTD.", + "stackOwner": "Yeeflow Singapore PTE. LTD." + } +} \ No newline at end of file diff --git a/certified-connectors/Yeeflow/readme.md b/certified-connectors/Yeeflow/readme.md new file mode 100644 index 000000000..ac4a4a532 --- /dev/null +++ b/certified-connectors/Yeeflow/readme.md @@ -0,0 +1,30 @@ + + +## Yeeflow +Yeeflow is a no-code application development platform that empowers you to build enterprise-class applications that run on mobile, tablet, and web. Create custom forms, configure workflows, build informative dashboard, and get your app up and running in minutes. + +Yeeflow connector allows you to access and operate your data in Yeeflow. And you can be notified when an item has been created, changed, deleted in Yeeflow and then making appropriate actions in other systems. + + +## Pre-requisites +First of all, you need to have an account in [Yeeflow](https://www.yeeflow.com/). + + +## API documentation +The API documentation can be found here [https://developer.yeeflow.com/api/](https://developer.yeeflow.com/api/) + + +## Supported Operations + + - **Add an item to a list:** This action will create an item in selected list. + - **Get an item by ID:** This action can be used to get an item of selected list by item ID. + - **Update an item by ID:** This action will update an item in selected list. + - **Delete an item:** This action will delete an item in selected list. + - **Get fields of a list:** This action will get the field definitions of a list. + - **Query items:** This action can be used to query items of selected list. The detailed description of the API can be found here [Query list items](https://developer.yeeflow.com/api/#tag/Lists/paths/~1lists~1{appID}~1{listID}~1items~1query/post) + + ## Supported Triggers + - **When an item is created:** Trigger when an item is created in selected list. + - **When an item is created or modified:** Trigger when an item is created or modified in selected list. + - **When an item is deleted:** Trigger when an item is deleted in selected list. + - **When an item is modified:** Trigger when an item is modified in selected list. \ No newline at end of file From 55a3556f7289e1e5a13d6c40f3ec8022ae0865da Mon Sep 17 00:00:00 2001 From: vedran Date: Fri, 23 Oct 2020 12:50:00 +0200 Subject: [PATCH 157/347] Fixed indentations and moved to certified connectors dir --- .../apiDefinition.swagger.json | 1240 +++++++++++++++++ .../apiProperties.json | 41 + .../ReversingLabs Intelligence/readme.md | 11 + .../apiDefinition.swagger.json | 193 ++- 4 files changed, 1388 insertions(+), 97 deletions(-) create mode 100644 certified-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json create mode 100644 certified-connectors/ReversingLabs Intelligence/apiProperties.json create mode 100644 certified-connectors/ReversingLabs Intelligence/readme.md diff --git a/certified-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json b/certified-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json new file mode 100644 index 000000000..87a761e95 --- /dev/null +++ b/certified-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json @@ -0,0 +1,1240 @@ +{ + "swagger": "2.0", + "info": { + "title": "ReversingLabs Intelligence", + "version": "1.0", + "description": "ReversingLabs continually processes goodware and malware files providing early intelligence about attacks before they infiltrate customer infrastructures. This visibility to threats “in-the-wild” enables preparation for new attacks and quickly identifies the threat levels of new files as they arrive. ReversingLabs enables more effective and efficient threat identification, development of better threat intelligence, and implementation of proactive threat hunting programs.", + "contact": { + "name": "ReversingLabs support", + "url": "https://support.reversinglabs.com/", + "email": "support@reversinglabs.com" + } + }, + "host": "data.reversinglabs.com", + "basePath": "/", + "schemes": [ + "https" + ], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://www.reversinglabs.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.reversinglabs.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Security" + } + ], + "consumes": [], + "produces": [], + "paths": { + "/api/databrowser/malware_presence/query/{hash_type}/{hash_value}": { + "get": { + "summary": "Get File Hash Reputation", + "description": "This service provides information about the malware status of requested files.", + "operationId": "Get-api-databrowser-malware_presence-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_type", + "in": "path", + "description": "required parameter; accepts these options: md5, sha1, sha256", + "required": true, + "type": "string", + "x-ms-summary": "Hash Type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid hash of the type defined by hash_type", + "required": true, + "type": "string", + "x-ms-summary": "Hash Value" + }, + { + "name": "show_hashes", + "in": "query", + "type": "boolean", + "default": false, + "description": "Both single and bulk malware presence queries support an additional request parameter show\\_hashes which can be either true or false. The parameter show\\_hashes can also be used with the Extended Malware Presence query. If not specified, the default value is false. When set to true, the show_hashes parameter will direct databrowser to provide md5, sha1 and sha256 hashes for the requested file(s), in addition to the rest of the Malware Presence information.", + "x-ms-summary": "Show Hashes" + }, + { + "name": "extended", + "in": "query", + "required": true, + "type": "boolean", + "default": false, + "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", + "x-ms-summary": "Extended" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary": "Format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/databrowser/malware_presence/bulk_query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-databrowser-malware_presence-bulk_query-post_format", + "description": "This service provides a means to send multiple hashes of files in a single request and provides information about the malware status for those files..", + "summary": "Get File Hash Reputation - Bulk Request", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary": "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/octet-stream", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary": "Body" + } + ] + } + }, + "/api/xref/v2/query/{hash_type}/{hash_value}": { + "get": { + "summary": "Get Historic Multi-AV Scan Records", + "description": "This service provides historic Multi-AV scan records for a given file hash.", + "operationId": "Get-historic-multi-av-scan-records-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_type", + "in": "path", + "description": "required parameter; accepts these options: md5, sha1, sha256", + "required": true, + "type": "string", + "x-ms-summary": "Hash type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid hash of the type defined by hash_type", + "required": true, + "type": "string", + "x-ms-summary": "Hash value" + }, + { + "name": "history", + "in": "query", + "required": true, + "type": "boolean", + "default": false, + "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", + "x-ms-summary": "History" + }, + { + "name": "post_format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary": "Post format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/xref/v2/bulk_query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Get-historic-multi-av-scan-records-query-hash_type-hash_value-bulk", + "description": "This service provides a means to send multiple hashes of files in a single request and provides Multi-AV scan records data for those files.", + "summary": "Get Historic Multi-AV Scan Records - Bulk Request", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary": "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/octet-stream", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary": "Body" + } + ] + } + }, + "/api/databrowser/rldata/query/{hash_type}/{hash_value}": { + "get": { + "summary": "Get File Hash Analysis Detail", + "description": "This service provides analysis results for the requested file.", + "operationId": "Get-api-databrowser-rldata-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_type", + "in": "path", + "description": "required parameter; accepts these options: md5, sha1, sha256", + "required": true, + "type": "string", + "x-ms-summary": "Hash type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid hash of the type defined by ash_type", + "required": true, + "type": "string", + "x-ms-summary": "Hash value" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary": "Format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/databrowser/rldata/bulk_query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-databrowser-rldata-bulk_query-post_format", + "description": "This service provides a means to send multiple file hashes in a single request and provides analysis results for these file hashes.", + "summary": "Get File Hash Analysis Detail - Bulk Request", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary": "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/octet-stream", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary": "Body" + } + ] + } + }, + "/api/rescan/v1/query/{hash_type}/{hash_value}": { + "get": { + "summary": "Re-Analyze File", + "description": "This service provides a means to send file(s) for rescanning.", + "operationId": "Get-api-reanalyze-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_type", + "in": "path", + "description": "required parameter; accepts these options: md5, sha1, sha256", + "required": true, + "type": "string", + "x-ms-summary": "Hash type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid hash of the type defined by hash_type", + "required": true, + "type": "string", + "x-ms-summary": "Hash value" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/rescan/v1/bulk_query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-rescan-v1-bulk_query-post_format", + "description": "This service provides a means to initiate multiple files to be rescanned using a single request.", + "summary": "Re-Analyze File - Bulk Request", + "parameters": [ + { + "name": "format", + "in": "header", + "required": true, + "type": "string", + "default": "json", + "description": "format accepts the options xml or json and defines the return format", + "x-ms-summary": "Format" + }, + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary": "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/octet-stream", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary": "Body" + } + ] + } + }, + "/api/group_by_rha1/v1/query/{rha1_type}/{hash_value}": { + "get": { + "summary": "Get Functionally Similar File Hashes Using ReversingLabs Hash Algorithm", + "description": "This service provides a list of SHA1 hashes of files that are functionally similar to the provided file (SHA1 hash) at the selected precision level.", + "operationId": "Get-Group-By-RHA1-Single-Query", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "rha1_type", + "in": "path", + "required": true, + "description": "rha1_type is a measure of the RHA1 precision level. It represents the degree to which a file is functionally similar to another file. A higher Precision Level will match fewer files but the files will have more functional similarity: - pe01, elf01, machO01 - 25% precision level - pe02 - 50% precision level", + "type": "string", + "x-ms-summary": "RHA1 type" + }, + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid SHA1 value", + "required": true, + "type": "string", + "x-ms-summary": "Hash value" + }, + { + "name": "next_page_sha1", + "in": "query", + "type": "string", + "default": "false", + "description": "next_page_sha1 is an optional parameter used for pagination. It is the SHA1 hash of the first file on the next page.", + "x-ms-summary": "Next page sha1" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary": "Format" + }, + { + "name": "limit", + "in": "query", + "type": "integer", + "default": 1000, + "description": "the maximum number of file SHA1 hashes to return. This value has to be an integer in the range from 1 and 1000 (1000 is the default value)", + "x-ms-summary": "Limit" + }, + { + "name": "extended", + "in": "query", + "type": "string", + "default": "false", + "description": "extended is an optional parameter. Possible values are true - extended, and false - non-extended data set (default)", + "x-ms-summary": "Extended" + }, + { + "name": "classification", + "in": "query", + "type": "string", + "description": "if this parameter is provided in the request, the query will return a filtered list of files that match the requested classification. Possible values are: - KNOWN - SUSPICIOUS - MALICIOUS - UNKNOWN", + "x-ms-summary": "Classification" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/imphash_index/v1/query/{hash_value}": { + "get": { + "summary": "Get Similar File Hashes Using Import Hashing Algorithm", + "description": "This service provides a list of SHA1 hashes functionally similar to the file associated with the provided import hash (ImpHash).", + "operationId": "Get-api-historic-multi-av-scan-records-query-hash_type-hash_value", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_value", + "in": "path", + "description": "required parameter; must be a valid ImpHash hash", + "required": true, + "type": "string", + "x-ms-summary": "Hash value" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "xml", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary": "Format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/search/v1/query": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "text/xml", + "application/json" + ], + "parameters": [ + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/json", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Query" + }, + "x-examples": { + "application/json": "{\n \"query\": \"firstseen:[2017-06-20T00:00:00Z TO 2017-06-21T00:00:00Z] classification:[malicious, suspicious] threatname:win32\",\"page\":1, \"records_per_page\":1000,\"format\":\"xml\", \"sort\":\"firstseen asc\"\n}" + }, + "x-ms-summary": "Body" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "summary": "Find Files Using Multi-Part Search Criteria", + "description": "This service provides a means to acquire a list of hashes that match the provided multi-part search criteria.", + "operationId": "Post-advanced-search-query" + } + }, + "/api/uri/statistics/uri_state/sha1/{hash_value}": { + "get": { + "summary": "Get URI Statistics on Email addresses, IP(s), Domain(s) and URL(s)", + "description": "This service provides statistical information on the number of known, malicious, and suspicious file(s) associated with the URI.", + "operationId": "Get-fetch-uri-state", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "hash_value", + "in": "path", + "description": "required parameter; The SHA1 hash value of the URI string", + "required": true, + "type": "string", + "x-ms-summary": "Hash value" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "json", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `json` (default).", + "x-ms-summary": "Format" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/networking/url/v1/report/query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-url-threat-intelligence", + "description": "This service returns threat intelligence data, including reputation from various reputation sources, metadata for performed URL analyses, and the maliciousness of files found on the submitted URL.", + "summary": "Get URL Threat Intelligence Report", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary": "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/octet-stream", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary": "Body" + } + ] + } + }, + "/api/networking/url/v1/analyze/query/{post_format}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-url-analyze", + "description": "This service enables the submission of a URL for analysis. ReversingLabs will crawl the URL, identifying files to download and submitting them to our file processing pipeline for classification and enrichment. A detailed report can then be retrieved using our URL Threat Intelligence API.", + "summary": "Analyze URL", + "parameters": [ + { + "name": "post_format", + "in": "path", + "required": true, + "type": "string", + "default": "json", + "description": "Required parameter that defines the POST payload format. Supported options are xml and json", + "x-ms-summary": "Post format" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/octet-stream", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary": "Body" + } + ] + } + }, + "/api/certificate/index/v1/query/thumbprint/{thumbprint}": { + "get": { + "summary": "Get Files Signed with Specific Certificate Thumbprint(s)", + "description": "This service provides a list of files signed with a particular certificate, specified by its thumbprint.", + "operationId": "Get-api-certificate-index-v1-query-thumbprint", + "produces": [ + "application/xml", + "application/json" + ], + "parameters": [ + { + "name": "thumbprint", + "in": "path", + "description": " the thumbprint (sha1, sha256, md5) of the requested certificate. Most of our certificates use SHA256 for storing the thumbprint", + "required": true, + "type": "string", + "x-ms-summary": "Thumbprint" + }, + { + "name": "classification", + "in": "query", + "type": "string", + "required": false, + "description": " if this parameter is provided in the request, the query will return a list of only those files that match the requested threat status. Possible values are: KNOWN, MALICIOUS, SUSPICIOUS, UNKNOWN", + "x-ms-summary": "Classification" + }, + { + "name": "format", + "in": "query", + "type": "string", + "default": "json", + "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", + "x-ms-summary": "Format" + }, + { + "name": "limit", + "in": "query", + "type": "integer", + "default": 100, + "description": "Maximum number of files to return in the certificate file list. It is possible to choose a number between 1 and 100 (100 is the default value)", + "x-ms-summary": "Limit" + }, + { + "name": "extended", + "in": "query", + "required": true, + "type": "boolean", + "default": false, + "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", + "x-ms-summary": "Extended" + } + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + } + } + }, + "/api/spex/upload/{sha1_value}": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-sample-file-upload", + "description": "This services provides a means to upload a file for analysis.", + "summary": "Sample file upload", + "parameters": [ + { + "name": "sha1_value", + "in": "path", + "required": true, + "type": "string", + "description": "Required parameter.", + "x-ms-summary": "SHA1 value" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/octet-stream", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary": "Body" + } + ] + } + }, + "/api/spex/upload/{sha1_value}/meta": { + "post": { + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "OK! The request has succeeded.", + "headers": {} + }, + "400": { + "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." + }, + "401": { + "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." + }, + "403": { + "description": "Forbidden! The server understood the request, but is refusing to fulfill it." + }, + "404": { + "description": "Not Found! The server has not found anything matching the Request-URI." + }, + "500": { + "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." + }, + "503": { + "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." + } + }, + "operationId": "Post-api-sample-metadata-upload", + "description": "This service provides a means to send metadata for previously successfully uploaded file.", + "summary": "Sample metadata file upload", + "parameters": [ + { + "name": "sha1_value", + "in": "path", + "required": true, + "type": "string", + "description": "Required parameter.", + "x-ms-summary": "SHA1 value" + }, + { + "name": "Content-Type:", + "in": "header", + "required": false, + "type": "string", + "description": "Content type", + "default": "application/octet-stream", + "x-ms-summary": "Content type" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/rl" + }, + "x-ms-summary": "Body" + } + ] + } + } + }, + "definitions": { + "Query": { + "properties": { + "query": { + "type": "string", + "description": "Every expression must be built according the the following format::. Please consult RL documentation for a list of field names and the operators that can be applied.", + "title": "" + }, + "page": { + "type": "integer", + "format": "int32" + }, + "records_per_page": { + "type": "integer", + "format": "int32", + "description": "The number of records returned in the response.", + "title": "", + "default": 10000 + }, + "format": { + "type": "string", + "description": "Option to return in specific format", + "title": "", + "default": "xml", + "enum": [ + "xml", + "json" + ] + } + }, + "type": "object", + "required": [ + "query" + ] + }, + "rl": { + "type": "object" + } + }, + "tags": [ + { + "name": "File Reputation" + } + ], + "securityDefinitions": { + "basic_auth": { + "type": "basic" + } + }, + "security": [ + { + "basic_auth": [] + } + ] +} diff --git a/certified-connectors/ReversingLabs Intelligence/apiProperties.json b/certified-connectors/ReversingLabs Intelligence/apiProperties.json new file mode 100644 index 000000000..d6a86f78d --- /dev/null +++ b/certified-connectors/ReversingLabs Intelligence/apiProperties.json @@ -0,0 +1,41 @@ +{ + "properties":{ + "capabilities":[ + + ], + "connectionParameters":{ + "username":{ + "type":"securestring", + "uiDefinition":{ + "displayName":"username", + "description":"The username for this api", + "tooltip":"Provide the username", + "constraints":{ + "tabIndex":2, + "clearText":true, + "required":"true" + } + } + }, + "password":{ + "type":"securestring", + "uiDefinition":{ + "displayName":"password", + "description":"The password for this api", + "tooltip":"Provide the password", + "constraints":{ + "tabIndex":3, + "clearText":false, + "required":"true" + } + } + } + }, + "iconBrandColor":"#F7153D", + "policyTemplateInstances":[ + + ], + "publisher":"ReversingLabs US Inc.", + "stackOwner":"ReversingLabs US Inc." + } +} diff --git a/certified-connectors/ReversingLabs Intelligence/readme.md b/certified-connectors/ReversingLabs Intelligence/readme.md new file mode 100644 index 000000000..45baef901 --- /dev/null +++ b/certified-connectors/ReversingLabs Intelligence/readme.md @@ -0,0 +1,11 @@ +# ReversingLabs Intelligence + +ReversingLabs continually processes goodware and malware files providing early intelligence about attacks before they infiltrate customer infrastructures. This visibility to threats “in-the-wild” enables preparation for new attacks and quickly identifies the threat levels of new files as they arrive. ReversingLabs enables more effective and efficient threat identification, development of better threat intelligence, and implementation of proactive threat hunting programs. + +## Prerequisites + +To use this integration, you need to have a ReversingLabs account. Please contact `sales@reversinglabs.com` to get started. + +## Known issues and limitations + +Please note that some of our APIs will return a 404 to indicate that a resource was not found. This is not an error state but simply informational. To avoid the Logic App showing errors in the run state, we were advised to place calls to APIs in a Scope primitive. diff --git a/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json b/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json index 0f721aac6..87a761e95 100644 --- a/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json +++ b/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json @@ -5,9 +5,9 @@ "version": "1.0", "description": "ReversingLabs continually processes goodware and malware files providing early intelligence about attacks before they infiltrate customer infrastructures. This visibility to threats “in-the-wild” enables preparation for new attacks and quickly identifies the threat levels of new files as they arrive. ReversingLabs enables more effective and efficient threat identification, development of better threat intelligence, and implementation of proactive threat hunting programs.", "contact": { - "name": "ReversingLabs support", - "url": "https://support.reversinglabs.com/", - "email":"support@reversinglabs.com" + "name": "ReversingLabs support", + "url": "https://support.reversinglabs.com/", + "email": "support@reversinglabs.com" } }, "host": "data.reversinglabs.com", @@ -16,18 +16,18 @@ "https" ], "x-ms-connector-metadata": [ - { - "propertyName": "Website", - "propertyValue": "https://www.reversinglabs.com/" - }, - { - "propertyName": "Privacy policy", - "propertyValue": "https://www.reversinglabs.com/privacy-policy" - }, - { - "propertyName": "Categories", - "propertyValue": "Security" - } + { + "propertyName": "Website", + "propertyValue": "https://www.reversinglabs.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://www.reversinglabs.com/privacy-policy" + }, + { + "propertyName": "Categories", + "propertyValue": "Security" + } ], "consumes": [], "produces": [], @@ -48,7 +48,7 @@ "description": "required parameter; accepts these options: md5, sha1, sha256", "required": true, "type": "string", - "x-ms-summary" : "Hash Type" + "x-ms-summary": "Hash Type" }, { "name": "hash_value", @@ -56,7 +56,7 @@ "description": "required parameter; must be a valid hash of the type defined by hash_type", "required": true, "type": "string", - "x-ms-summary" : "Hash Value" + "x-ms-summary": "Hash Value" }, { "name": "show_hashes", @@ -64,9 +64,8 @@ "type": "boolean", "default": false, "description": "Both single and bulk malware presence queries support an additional request parameter show\\_hashes which can be either true or false. The parameter show\\_hashes can also be used with the Extended Malware Presence query. If not specified, the default value is false. When set to true, the show_hashes parameter will direct databrowser to provide md5, sha1 and sha256 hashes for the requested file(s), in addition to the rest of the Malware Presence information.", - "x-ms-summary" : "Show Hashes" - - }, + "x-ms-summary": "Show Hashes" + }, { "name": "extended", "in": "query", @@ -74,7 +73,7 @@ "type": "boolean", "default": false, "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", - "x-ms-summary" : "Extended" + "x-ms-summary": "Extended" }, { "name": "format", @@ -82,7 +81,7 @@ "type": "string", "default": "xml", "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary" : "Format" + "x-ms-summary": "Format" } ], "responses": { @@ -121,7 +120,7 @@ "application/json", "application/xml" ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -156,16 +155,16 @@ "type": "string", "default": "json", "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary" : "Post format" + "x-ms-summary": "Post format" }, { "name": "Content-Type:", "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/octet-stream", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -174,7 +173,7 @@ "schema": { "$ref": "#/definitions/rl" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ] } @@ -195,7 +194,7 @@ "description": "required parameter; accepts these options: md5, sha1, sha256", "required": true, "type": "string", - "x-ms-summary" : "Hash type" + "x-ms-summary": "Hash type" }, { "name": "hash_value", @@ -203,7 +202,7 @@ "description": "required parameter; must be a valid hash of the type defined by hash_type", "required": true, "type": "string", - "x-ms-summary" : "Hash value" + "x-ms-summary": "Hash value" }, { "name": "history", @@ -212,7 +211,7 @@ "type": "boolean", "default": false, "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", - "x-ms-summary" : "History" + "x-ms-summary": "History" }, { "name": "post_format", @@ -220,10 +219,10 @@ "type": "string", "default": "xml", "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary" : "Post format" + "x-ms-summary": "Post format" } ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -259,7 +258,7 @@ "application/json", "application/xml" ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -294,16 +293,16 @@ "type": "string", "default": "json", "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary" : "Post format" + "x-ms-summary": "Post format" }, { "name": "Content-Type:", "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/octet-stream", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -312,7 +311,7 @@ "schema": { "$ref": "#/definitions/rl" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ] } @@ -333,7 +332,7 @@ "description": "required parameter; accepts these options: md5, sha1, sha256", "required": true, "type": "string", - "x-ms-summary" : "Hash type" + "x-ms-summary": "Hash type" }, { "name": "hash_value", @@ -341,7 +340,7 @@ "description": "required parameter; must be a valid hash of the type defined by ash_type", "required": true, "type": "string", - "x-ms-summary" : "Hash value" + "x-ms-summary": "Hash value" }, { "name": "format", @@ -349,10 +348,10 @@ "type": "string", "default": "xml", "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary" : "Format" + "x-ms-summary": "Format" } ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -388,7 +387,7 @@ "application/json", "application/xml" ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -423,16 +422,16 @@ "type": "string", "default": "json", "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary" : "Post format" + "x-ms-summary": "Post format" }, { "name": "Content-Type:", "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/octet-stream", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -441,7 +440,7 @@ "schema": { "$ref": "#/definitions/rl" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ] } @@ -462,7 +461,7 @@ "description": "required parameter; accepts these options: md5, sha1, sha256", "required": true, "type": "string", - "x-ms-summary" : "Hash type" + "x-ms-summary": "Hash type" }, { "name": "hash_value", @@ -470,10 +469,10 @@ "description": "required parameter; must be a valid hash of the type defined by hash_type", "required": true, "type": "string", - "x-ms-summary" : "Hash value" + "x-ms-summary": "Hash value" } ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -509,7 +508,7 @@ "application/json", "application/xml" ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -544,7 +543,7 @@ "type": "string", "default": "json", "description": "format accepts the options xml or json and defines the return format", - "x-ms-summary" : "Format" + "x-ms-summary": "Format" }, { "name": "post_format", @@ -553,16 +552,16 @@ "type": "string", "default": "json", "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary" : "Post format" + "x-ms-summary": "Post format" }, { "name": "Content-Type:", "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/octet-stream", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -571,7 +570,7 @@ "schema": { "$ref": "#/definitions/rl" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ] } @@ -592,7 +591,7 @@ "required": true, "description": "rha1_type is a measure of the RHA1 precision level. It represents the degree to which a file is functionally similar to another file. A higher Precision Level will match fewer files but the files will have more functional similarity: - pe01, elf01, machO01 - 25% precision level - pe02 - 50% precision level", "type": "string", - "x-ms-summary" : "RHA1 type" + "x-ms-summary": "RHA1 type" }, { "name": "hash_value", @@ -600,7 +599,7 @@ "description": "required parameter; must be a valid SHA1 value", "required": true, "type": "string", - "x-ms-summary" : "Hash value" + "x-ms-summary": "Hash value" }, { "name": "next_page_sha1", @@ -608,7 +607,7 @@ "type": "string", "default": "false", "description": "next_page_sha1 is an optional parameter used for pagination. It is the SHA1 hash of the first file on the next page.", - "x-ms-summary" : "Next page sha1" + "x-ms-summary": "Next page sha1" }, { "name": "format", @@ -616,7 +615,7 @@ "type": "string", "default": "xml", "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary" : "Format" + "x-ms-summary": "Format" }, { "name": "limit", @@ -624,7 +623,7 @@ "type": "integer", "default": 1000, "description": "the maximum number of file SHA1 hashes to return. This value has to be an integer in the range from 1 and 1000 (1000 is the default value)", - "x-ms-summary" : "Limit" + "x-ms-summary": "Limit" }, { "name": "extended", @@ -632,17 +631,17 @@ "type": "string", "default": "false", "description": "extended is an optional parameter. Possible values are true - extended, and false - non-extended data set (default)", - "x-ms-summary" : "Extended" + "x-ms-summary": "Extended" }, { "name": "classification", "in": "query", "type": "string", "description": "if this parameter is provided in the request, the query will return a filtered list of files that match the requested classification. Possible values are: - KNOWN - SUSPICIOUS - MALICIOUS - UNKNOWN", - "x-ms-summary" : "Classification" + "x-ms-summary": "Classification" } ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -684,7 +683,7 @@ "description": "required parameter; must be a valid ImpHash hash", "required": true, "type": "string", - "x-ms-summary" : "Hash value" + "x-ms-summary": "Hash value" }, { "name": "format", @@ -692,7 +691,7 @@ "type": "string", "default": "xml", "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary" : "Format" + "x-ms-summary": "Format" } ], "responses": { @@ -736,9 +735,9 @@ "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/json", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -750,10 +749,10 @@ "x-examples": { "application/json": "{\n \"query\": \"firstseen:[2017-06-20T00:00:00Z TO 2017-06-21T00:00:00Z] classification:[malicious, suspicious] threatname:win32\",\"page\":1, \"records_per_page\":1000,\"format\":\"xml\", \"sort\":\"firstseen asc\"\n}" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -798,7 +797,7 @@ "description": "required parameter; The SHA1 hash value of the URI string", "required": true, "type": "string", - "x-ms-summary" : "Hash value" + "x-ms-summary": "Hash value" }, { "name": "format", @@ -806,7 +805,7 @@ "type": "string", "default": "json", "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `json` (default).", - "x-ms-summary" : "Format" + "x-ms-summary": "Format" } ], "responses": { @@ -845,7 +844,7 @@ "application/json", "application/xml" ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -880,16 +879,16 @@ "type": "string", "default": "json", "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary" : "Post format" + "x-ms-summary": "Post format" }, { "name": "Content-Type:", "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/octet-stream", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -898,7 +897,7 @@ "schema": { "$ref": "#/definitions/rl" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ] } @@ -913,7 +912,7 @@ "application/json", "application/xml" ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -948,16 +947,16 @@ "type": "string", "default": "json", "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary" : "Post format" + "x-ms-summary": "Post format" }, { "name": "Content-Type:", "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/octet-stream", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -966,7 +965,7 @@ "schema": { "$ref": "#/definitions/rl" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ] } @@ -987,7 +986,7 @@ "description": " the thumbprint (sha1, sha256, md5) of the requested certificate. Most of our certificates use SHA256 for storing the thumbprint", "required": true, "type": "string", - "x-ms-summary" : "Thumbprint" + "x-ms-summary": "Thumbprint" }, { "name": "classification", @@ -995,7 +994,7 @@ "type": "string", "required": false, "description": " if this parameter is provided in the request, the query will return a list of only those files that match the requested threat status. Possible values are: KNOWN, MALICIOUS, SUSPICIOUS, UNKNOWN", - "x-ms-summary" : "Classification" + "x-ms-summary": "Classification" }, { "name": "format", @@ -1003,7 +1002,7 @@ "type": "string", "default": "json", "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary" : "Format" + "x-ms-summary": "Format" }, { "name": "limit", @@ -1011,7 +1010,7 @@ "type": "integer", "default": 100, "description": "Maximum number of files to return in the certificate file list. It is possible to choose a number between 1 and 100 (100 is the default value)", - "x-ms-summary" : "Limit" + "x-ms-summary": "Limit" }, { "name": "extended", @@ -1020,10 +1019,10 @@ "type": "boolean", "default": false, "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", - "x-ms-summary" : "Extended" + "x-ms-summary": "Extended" } ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -1059,7 +1058,7 @@ "application/json", "application/xml" ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -1093,16 +1092,16 @@ "required": true, "type": "string", "description": "Required parameter.", - "x-ms-summary" : "SHA1 value" + "x-ms-summary": "SHA1 value" }, { "name": "Content-Type:", "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/octet-stream", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -1111,7 +1110,7 @@ "schema": { "$ref": "#/definitions/rl" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ] } @@ -1126,7 +1125,7 @@ "application/json", "application/xml" ], - "responses": { + "responses": { "200": { "description": "OK! The request has succeeded.", "headers": {} @@ -1160,16 +1159,16 @@ "required": true, "type": "string", "description": "Required parameter.", - "x-ms-summary" : "SHA1 value" + "x-ms-summary": "SHA1 value" }, { "name": "Content-Type:", "in": "header", "required": false, "type": "string", - "description":"Content type", + "description": "Content type", "default": "application/octet-stream", - "x-ms-summary" : "Content type" + "x-ms-summary": "Content type" }, { "name": "body", @@ -1178,7 +1177,7 @@ "schema": { "$ref": "#/definitions/rl" }, - "x-ms-summary" : "Body" + "x-ms-summary": "Body" } ] } From 8c321f199be4707ecc59a5efaa11d66ab6ac5b7d Mon Sep 17 00:00:00 2001 From: vedran Date: Fri, 23 Oct 2020 13:01:10 +0200 Subject: [PATCH 158/347] Removed from custom connectors dir --- .../apiDefinition.swagger.json | 1240 ----------------- .../apiProperties.json | 41 - .../ReversingLabs Intelligence/readme.md | 11 - 3 files changed, 1292 deletions(-) delete mode 100644 custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json delete mode 100644 custom-connectors/ReversingLabs Intelligence/apiProperties.json delete mode 100644 custom-connectors/ReversingLabs Intelligence/readme.md diff --git a/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json b/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json deleted file mode 100644 index 87a761e95..000000000 --- a/custom-connectors/ReversingLabs Intelligence/apiDefinition.swagger.json +++ /dev/null @@ -1,1240 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "ReversingLabs Intelligence", - "version": "1.0", - "description": "ReversingLabs continually processes goodware and malware files providing early intelligence about attacks before they infiltrate customer infrastructures. This visibility to threats “in-the-wild” enables preparation for new attacks and quickly identifies the threat levels of new files as they arrive. ReversingLabs enables more effective and efficient threat identification, development of better threat intelligence, and implementation of proactive threat hunting programs.", - "contact": { - "name": "ReversingLabs support", - "url": "https://support.reversinglabs.com/", - "email": "support@reversinglabs.com" - } - }, - "host": "data.reversinglabs.com", - "basePath": "/", - "schemes": [ - "https" - ], - "x-ms-connector-metadata": [ - { - "propertyName": "Website", - "propertyValue": "https://www.reversinglabs.com/" - }, - { - "propertyName": "Privacy policy", - "propertyValue": "https://www.reversinglabs.com/privacy-policy" - }, - { - "propertyName": "Categories", - "propertyValue": "Security" - } - ], - "consumes": [], - "produces": [], - "paths": { - "/api/databrowser/malware_presence/query/{hash_type}/{hash_value}": { - "get": { - "summary": "Get File Hash Reputation", - "description": "This service provides information about the malware status of requested files.", - "operationId": "Get-api-databrowser-malware_presence-query-hash_type-hash_value", - "produces": [ - "application/xml", - "application/json" - ], - "parameters": [ - { - "name": "hash_type", - "in": "path", - "description": "required parameter; accepts these options: md5, sha1, sha256", - "required": true, - "type": "string", - "x-ms-summary": "Hash Type" - }, - { - "name": "hash_value", - "in": "path", - "description": "required parameter; must be a valid hash of the type defined by hash_type", - "required": true, - "type": "string", - "x-ms-summary": "Hash Value" - }, - { - "name": "show_hashes", - "in": "query", - "type": "boolean", - "default": false, - "description": "Both single and bulk malware presence queries support an additional request parameter show\\_hashes which can be either true or false. The parameter show\\_hashes can also be used with the Extended Malware Presence query. If not specified, the default value is false. When set to true, the show_hashes parameter will direct databrowser to provide md5, sha1 and sha256 hashes for the requested file(s), in addition to the rest of the Malware Presence information.", - "x-ms-summary": "Show Hashes" - }, - { - "name": "extended", - "in": "query", - "required": true, - "type": "boolean", - "default": false, - "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", - "x-ms-summary": "Extended" - }, - { - "name": "format", - "in": "query", - "type": "string", - "default": "xml", - "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary": "Format" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - } - } - }, - "/api/databrowser/malware_presence/bulk_query/{post_format}": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "operationId": "Post-api-databrowser-malware_presence-bulk_query-post_format", - "description": "This service provides a means to send multiple hashes of files in a single request and provides information about the malware status for those files..", - "summary": "Get File Hash Reputation - Bulk Request", - "parameters": [ - { - "name": "post_format", - "in": "path", - "required": true, - "type": "string", - "default": "json", - "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary": "Post format" - }, - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/octet-stream", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/rl" - }, - "x-ms-summary": "Body" - } - ] - } - }, - "/api/xref/v2/query/{hash_type}/{hash_value}": { - "get": { - "summary": "Get Historic Multi-AV Scan Records", - "description": "This service provides historic Multi-AV scan records for a given file hash.", - "operationId": "Get-historic-multi-av-scan-records-query-hash_type-hash_value", - "produces": [ - "application/xml", - "application/json" - ], - "parameters": [ - { - "name": "hash_type", - "in": "path", - "description": "required parameter; accepts these options: md5, sha1, sha256", - "required": true, - "type": "string", - "x-ms-summary": "Hash type" - }, - { - "name": "hash_value", - "in": "path", - "description": "required parameter; must be a valid hash of the type defined by hash_type", - "required": true, - "type": "string", - "x-ms-summary": "Hash value" - }, - { - "name": "history", - "in": "query", - "required": true, - "type": "boolean", - "default": false, - "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", - "x-ms-summary": "History" - }, - { - "name": "post_format", - "in": "query", - "type": "string", - "default": "xml", - "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary": "Post format" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - } - } - }, - "/api/xref/v2/bulk_query/{post_format}": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "operationId": "Get-historic-multi-av-scan-records-query-hash_type-hash_value-bulk", - "description": "This service provides a means to send multiple hashes of files in a single request and provides Multi-AV scan records data for those files.", - "summary": "Get Historic Multi-AV Scan Records - Bulk Request", - "parameters": [ - { - "name": "post_format", - "in": "path", - "required": true, - "type": "string", - "default": "json", - "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary": "Post format" - }, - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/octet-stream", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/rl" - }, - "x-ms-summary": "Body" - } - ] - } - }, - "/api/databrowser/rldata/query/{hash_type}/{hash_value}": { - "get": { - "summary": "Get File Hash Analysis Detail", - "description": "This service provides analysis results for the requested file.", - "operationId": "Get-api-databrowser-rldata-query-hash_type-hash_value", - "produces": [ - "application/xml", - "application/json" - ], - "parameters": [ - { - "name": "hash_type", - "in": "path", - "description": "required parameter; accepts these options: md5, sha1, sha256", - "required": true, - "type": "string", - "x-ms-summary": "Hash type" - }, - { - "name": "hash_value", - "in": "path", - "description": "required parameter; must be a valid hash of the type defined by ash_type", - "required": true, - "type": "string", - "x-ms-summary": "Hash value" - }, - { - "name": "format", - "in": "query", - "type": "string", - "default": "xml", - "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary": "Format" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - } - } - }, - "/api/databrowser/rldata/bulk_query/{post_format}": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "operationId": "Post-api-databrowser-rldata-bulk_query-post_format", - "description": "This service provides a means to send multiple file hashes in a single request and provides analysis results for these file hashes.", - "summary": "Get File Hash Analysis Detail - Bulk Request", - "parameters": [ - { - "name": "post_format", - "in": "path", - "required": true, - "type": "string", - "default": "json", - "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary": "Post format" - }, - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/octet-stream", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/rl" - }, - "x-ms-summary": "Body" - } - ] - } - }, - "/api/rescan/v1/query/{hash_type}/{hash_value}": { - "get": { - "summary": "Re-Analyze File", - "description": "This service provides a means to send file(s) for rescanning.", - "operationId": "Get-api-reanalyze-query-hash_type-hash_value", - "produces": [ - "application/xml", - "application/json" - ], - "parameters": [ - { - "name": "hash_type", - "in": "path", - "description": "required parameter; accepts these options: md5, sha1, sha256", - "required": true, - "type": "string", - "x-ms-summary": "Hash type" - }, - { - "name": "hash_value", - "in": "path", - "description": "required parameter; must be a valid hash of the type defined by hash_type", - "required": true, - "type": "string", - "x-ms-summary": "Hash value" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - } - } - }, - "/api/rescan/v1/bulk_query/{post_format}": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "operationId": "Post-api-rescan-v1-bulk_query-post_format", - "description": "This service provides a means to initiate multiple files to be rescanned using a single request.", - "summary": "Re-Analyze File - Bulk Request", - "parameters": [ - { - "name": "format", - "in": "header", - "required": true, - "type": "string", - "default": "json", - "description": "format accepts the options xml or json and defines the return format", - "x-ms-summary": "Format" - }, - { - "name": "post_format", - "in": "path", - "required": true, - "type": "string", - "default": "json", - "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary": "Post format" - }, - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/octet-stream", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/rl" - }, - "x-ms-summary": "Body" - } - ] - } - }, - "/api/group_by_rha1/v1/query/{rha1_type}/{hash_value}": { - "get": { - "summary": "Get Functionally Similar File Hashes Using ReversingLabs Hash Algorithm", - "description": "This service provides a list of SHA1 hashes of files that are functionally similar to the provided file (SHA1 hash) at the selected precision level.", - "operationId": "Get-Group-By-RHA1-Single-Query", - "produces": [ - "application/xml", - "application/json" - ], - "parameters": [ - { - "name": "rha1_type", - "in": "path", - "required": true, - "description": "rha1_type is a measure of the RHA1 precision level. It represents the degree to which a file is functionally similar to another file. A higher Precision Level will match fewer files but the files will have more functional similarity: - pe01, elf01, machO01 - 25% precision level - pe02 - 50% precision level", - "type": "string", - "x-ms-summary": "RHA1 type" - }, - { - "name": "hash_value", - "in": "path", - "description": "required parameter; must be a valid SHA1 value", - "required": true, - "type": "string", - "x-ms-summary": "Hash value" - }, - { - "name": "next_page_sha1", - "in": "query", - "type": "string", - "default": "false", - "description": "next_page_sha1 is an optional parameter used for pagination. It is the SHA1 hash of the first file on the next page.", - "x-ms-summary": "Next page sha1" - }, - { - "name": "format", - "in": "query", - "type": "string", - "default": "xml", - "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary": "Format" - }, - { - "name": "limit", - "in": "query", - "type": "integer", - "default": 1000, - "description": "the maximum number of file SHA1 hashes to return. This value has to be an integer in the range from 1 and 1000 (1000 is the default value)", - "x-ms-summary": "Limit" - }, - { - "name": "extended", - "in": "query", - "type": "string", - "default": "false", - "description": "extended is an optional parameter. Possible values are true - extended, and false - non-extended data set (default)", - "x-ms-summary": "Extended" - }, - { - "name": "classification", - "in": "query", - "type": "string", - "description": "if this parameter is provided in the request, the query will return a filtered list of files that match the requested classification. Possible values are: - KNOWN - SUSPICIOUS - MALICIOUS - UNKNOWN", - "x-ms-summary": "Classification" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - } - } - }, - "/api/imphash_index/v1/query/{hash_value}": { - "get": { - "summary": "Get Similar File Hashes Using Import Hashing Algorithm", - "description": "This service provides a list of SHA1 hashes functionally similar to the file associated with the provided import hash (ImpHash).", - "operationId": "Get-api-historic-multi-av-scan-records-query-hash_type-hash_value", - "produces": [ - "application/xml", - "application/json" - ], - "parameters": [ - { - "name": "hash_value", - "in": "path", - "description": "required parameter; must be a valid ImpHash hash", - "required": true, - "type": "string", - "x-ms-summary": "Hash value" - }, - { - "name": "format", - "in": "query", - "type": "string", - "default": "xml", - "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary": "Format" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - } - } - }, - "/api/search/v1/query": { - "post": { - "consumes": [ - "application/json" - ], - "produces": [ - "text/xml", - "application/json" - ], - "parameters": [ - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/json", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Query" - }, - "x-examples": { - "application/json": "{\n \"query\": \"firstseen:[2017-06-20T00:00:00Z TO 2017-06-21T00:00:00Z] classification:[malicious, suspicious] threatname:win32\",\"page\":1, \"records_per_page\":1000,\"format\":\"xml\", \"sort\":\"firstseen asc\"\n}" - }, - "x-ms-summary": "Body" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "summary": "Find Files Using Multi-Part Search Criteria", - "description": "This service provides a means to acquire a list of hashes that match the provided multi-part search criteria.", - "operationId": "Post-advanced-search-query" - } - }, - "/api/uri/statistics/uri_state/sha1/{hash_value}": { - "get": { - "summary": "Get URI Statistics on Email addresses, IP(s), Domain(s) and URL(s)", - "description": "This service provides statistical information on the number of known, malicious, and suspicious file(s) associated with the URI.", - "operationId": "Get-fetch-uri-state", - "produces": [ - "application/xml", - "application/json" - ], - "parameters": [ - { - "name": "hash_value", - "in": "path", - "description": "required parameter; The SHA1 hash value of the URI string", - "required": true, - "type": "string", - "x-ms-summary": "Hash value" - }, - { - "name": "format", - "in": "query", - "type": "string", - "default": "json", - "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `json` (default).", - "x-ms-summary": "Format" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - } - } - }, - "/api/networking/url/v1/report/query/{post_format}": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "operationId": "Post-url-threat-intelligence", - "description": "This service returns threat intelligence data, including reputation from various reputation sources, metadata for performed URL analyses, and the maliciousness of files found on the submitted URL.", - "summary": "Get URL Threat Intelligence Report", - "parameters": [ - { - "name": "post_format", - "in": "path", - "required": true, - "type": "string", - "default": "json", - "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary": "Post format" - }, - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/octet-stream", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/rl" - }, - "x-ms-summary": "Body" - } - ] - } - }, - "/api/networking/url/v1/analyze/query/{post_format}": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "operationId": "Post-url-analyze", - "description": "This service enables the submission of a URL for analysis. ReversingLabs will crawl the URL, identifying files to download and submitting them to our file processing pipeline for classification and enrichment. A detailed report can then be retrieved using our URL Threat Intelligence API.", - "summary": "Analyze URL", - "parameters": [ - { - "name": "post_format", - "in": "path", - "required": true, - "type": "string", - "default": "json", - "description": "Required parameter that defines the POST payload format. Supported options are xml and json", - "x-ms-summary": "Post format" - }, - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/octet-stream", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/rl" - }, - "x-ms-summary": "Body" - } - ] - } - }, - "/api/certificate/index/v1/query/thumbprint/{thumbprint}": { - "get": { - "summary": "Get Files Signed with Specific Certificate Thumbprint(s)", - "description": "This service provides a list of files signed with a particular certificate, specified by its thumbprint.", - "operationId": "Get-api-certificate-index-v1-query-thumbprint", - "produces": [ - "application/xml", - "application/json" - ], - "parameters": [ - { - "name": "thumbprint", - "in": "path", - "description": " the thumbprint (sha1, sha256, md5) of the requested certificate. Most of our certificates use SHA256 for storing the thumbprint", - "required": true, - "type": "string", - "x-ms-summary": "Thumbprint" - }, - { - "name": "classification", - "in": "query", - "type": "string", - "required": false, - "description": " if this parameter is provided in the request, the query will return a list of only those files that match the requested threat status. Possible values are: KNOWN, MALICIOUS, SUSPICIOUS, UNKNOWN", - "x-ms-summary": "Classification" - }, - { - "name": "format", - "in": "query", - "type": "string", - "default": "json", - "description": "Optional parameter that allows choosing the response format. Supported values are `xml` and `json`. If the parameter is not provided in the request, the response will be returned in `xml` (default).", - "x-ms-summary": "Format" - }, - { - "name": "limit", - "in": "query", - "type": "integer", - "default": 100, - "description": "Maximum number of files to return in the certificate file list. It is possible to choose a number between 1 and 100 (100 is the default value)", - "x-ms-summary": "Limit" - }, - { - "name": "extended", - "in": "query", - "required": true, - "type": "boolean", - "default": false, - "description": "Both single and bulk malware presence queries support an additional query flag extended which can be either true or false. If not specified, the default value is false. When set to true, the extended flag will direct databrowser to provide a richer response schema with additional information about the requested file(s).", - "x-ms-summary": "Extended" - } - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - } - } - }, - "/api/spex/upload/{sha1_value}": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "operationId": "Post-api-sample-file-upload", - "description": "This services provides a means to upload a file for analysis.", - "summary": "Sample file upload", - "parameters": [ - { - "name": "sha1_value", - "in": "path", - "required": true, - "type": "string", - "description": "Required parameter.", - "x-ms-summary": "SHA1 value" - }, - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/octet-stream", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/rl" - }, - "x-ms-summary": "Body" - } - ] - } - }, - "/api/spex/upload/{sha1_value}/meta": { - "post": { - "consumes": [ - "application/json", - "application/xml" - ], - "produces": [ - "application/json", - "application/xml" - ], - "responses": { - "200": { - "description": "OK! The request has succeeded.", - "headers": {} - }, - "400": { - "description": "Bad Request! The request could not be understood by the server due to malformed syntax. A possible reason might be that the request contains Unicode characters that cannot be processed." - }, - "401": { - "description": "Unauthorized! The request requires user authentication. The request MUST include a WWW- Authenticate header field containing a challenge applicable to the requested resource." - }, - "403": { - "description": "Forbidden! The server understood the request, but is refusing to fulfill it." - }, - "404": { - "description": "Not Found! The server has not found anything matching the Request-URI." - }, - "500": { - "description": "Internal Server Error! The server encountered an unexpected condition which prevented it from fulfilling the request." - }, - "503": { - "description": "Service Unavailable! The server is currently unable to handle the request due to a temporary overloading or maintenance of the server." - } - }, - "operationId": "Post-api-sample-metadata-upload", - "description": "This service provides a means to send metadata for previously successfully uploaded file.", - "summary": "Sample metadata file upload", - "parameters": [ - { - "name": "sha1_value", - "in": "path", - "required": true, - "type": "string", - "description": "Required parameter.", - "x-ms-summary": "SHA1 value" - }, - { - "name": "Content-Type:", - "in": "header", - "required": false, - "type": "string", - "description": "Content type", - "default": "application/octet-stream", - "x-ms-summary": "Content type" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/rl" - }, - "x-ms-summary": "Body" - } - ] - } - } - }, - "definitions": { - "Query": { - "properties": { - "query": { - "type": "string", - "description": "Every expression must be built according the the following format::. Please consult RL documentation for a list of field names and the operators that can be applied.", - "title": "" - }, - "page": { - "type": "integer", - "format": "int32" - }, - "records_per_page": { - "type": "integer", - "format": "int32", - "description": "The number of records returned in the response.", - "title": "", - "default": 10000 - }, - "format": { - "type": "string", - "description": "Option to return in specific format", - "title": "", - "default": "xml", - "enum": [ - "xml", - "json" - ] - } - }, - "type": "object", - "required": [ - "query" - ] - }, - "rl": { - "type": "object" - } - }, - "tags": [ - { - "name": "File Reputation" - } - ], - "securityDefinitions": { - "basic_auth": { - "type": "basic" - } - }, - "security": [ - { - "basic_auth": [] - } - ] -} diff --git a/custom-connectors/ReversingLabs Intelligence/apiProperties.json b/custom-connectors/ReversingLabs Intelligence/apiProperties.json deleted file mode 100644 index d6a86f78d..000000000 --- a/custom-connectors/ReversingLabs Intelligence/apiProperties.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "properties":{ - "capabilities":[ - - ], - "connectionParameters":{ - "username":{ - "type":"securestring", - "uiDefinition":{ - "displayName":"username", - "description":"The username for this api", - "tooltip":"Provide the username", - "constraints":{ - "tabIndex":2, - "clearText":true, - "required":"true" - } - } - }, - "password":{ - "type":"securestring", - "uiDefinition":{ - "displayName":"password", - "description":"The password for this api", - "tooltip":"Provide the password", - "constraints":{ - "tabIndex":3, - "clearText":false, - "required":"true" - } - } - } - }, - "iconBrandColor":"#F7153D", - "policyTemplateInstances":[ - - ], - "publisher":"ReversingLabs US Inc.", - "stackOwner":"ReversingLabs US Inc." - } -} diff --git a/custom-connectors/ReversingLabs Intelligence/readme.md b/custom-connectors/ReversingLabs Intelligence/readme.md deleted file mode 100644 index 45baef901..000000000 --- a/custom-connectors/ReversingLabs Intelligence/readme.md +++ /dev/null @@ -1,11 +0,0 @@ -# ReversingLabs Intelligence - -ReversingLabs continually processes goodware and malware files providing early intelligence about attacks before they infiltrate customer infrastructures. This visibility to threats “in-the-wild” enables preparation for new attacks and quickly identifies the threat levels of new files as they arrive. ReversingLabs enables more effective and efficient threat identification, development of better threat intelligence, and implementation of proactive threat hunting programs. - -## Prerequisites - -To use this integration, you need to have a ReversingLabs account. Please contact `sales@reversinglabs.com` to get started. - -## Known issues and limitations - -Please note that some of our APIs will return a 404 to indicate that a resource was not found. This is not an error state but simply informational. To avoid the Logic App showing errors in the run state, we were advised to place calls to APIs in a Scope primitive. From f8a323518d57e9ba57c2105d0a77ed51897db0d7 Mon Sep 17 00:00:00 2001 From: michal Date: Sat, 24 Oct 2020 11:00:43 +0000 Subject: [PATCH 159/347] CRMB Bot - readme.md update --- certified-connectors/CRMBot/readme.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/certified-connectors/CRMBot/readme.md b/certified-connectors/CRMBot/readme.md index 366ebda15..41ac2c403 100644 --- a/certified-connectors/CRMBot/readme.md +++ b/certified-connectors/CRMBot/readme.md @@ -1,12 +1,15 @@ +## CRM Bot - Conversational AI for your CRM + Create powerful conversation experience for your customers right from your CRM system. Give users new ways to interact with your company by building engaging voice and text-based conversational interfaces, such as voice apps and chatbots, powered by AI. Connect with users on your website, mobile app, the Google Assistant, Amazon Alexa, Facebook Messenger, and other popular platforms and devices. And do it directly from your existing CRM implementation. ## Prerequisites -Our clients have to undergo a registration process (currently offered through MS Teams chatbot as well as our website/sales bot. This provides them with a secret API key which is necessary to use our connector. +Our clients have to undergo a registration process which is currently offered through MS Teams chatbot as well as our website/sales bot available [here](https://crmbot.ai). This provides them with a secret API key which is necessary to use our connector. ## How to get credentials In order to get access to your own chatbot project with CRM Bot, all you have to do is get in touch with our CRM chatbot (which is available at crmbot.ai). The chatbot will guide you through the registration process. -## Support and documentation: -You can find the detailed documentation [here:](https://docs.crmbot.ai/docs/) \ No newline at end of file +## Support and documentation + +You can find the detailed documentation [here.](https://docs.crmbot.ai/docs/) \ No newline at end of file From cebf3338d56f225c4002536a1827b2d35933e036 Mon Sep 17 00:00:00 2001 From: michal Date: Sat, 24 Oct 2020 11:38:27 +0000 Subject: [PATCH 160/347] CRM Bot - readme.md update --- certified-connectors/CRMBot/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/CRMBot/readme.md b/certified-connectors/CRMBot/readme.md index 41ac2c403..3044bbbc3 100644 --- a/certified-connectors/CRMBot/readme.md +++ b/certified-connectors/CRMBot/readme.md @@ -1,10 +1,10 @@ ## CRM Bot - Conversational AI for your CRM -Create powerful conversation experience for your customers right from your CRM system. Give users new ways to interact with your company by building engaging voice and text-based conversational interfaces, such as voice apps and chatbots, powered by AI. Connect with users on your website, mobile app, the Google Assistant, Amazon Alexa, Facebook Messenger, and other popular platforms and devices. And do it directly from your existing CRM implementation. +Create a powerful conversational experience for your customers right from your CRM system. Give users new ways to interact with your company by building engaging voice and text-based conversational interfaces, such as voice apps and chatbots, powered by AI. Connect with users on your website, mobile app, the Google Assistant, Amazon Alexa, Facebook Messenger, and other popular platforms and devices. And do it directly from your existing CRM implementation. ## Prerequisites -Our clients have to undergo a registration process which is currently offered through MS Teams chatbot as well as our website/sales bot available [here](https://crmbot.ai). This provides them with a secret API key which is necessary to use our connector. +Our clients have to undergo a registration process which is currently offered through MS Teams chatbot as well as part of overall solution installation, currently available through our sales bot [here](https://crmbot.ai). This provides them with a secret API key which is necessary to use our connector with their chatbot projects. ## How to get credentials From e5c0e7936cd933fe0169ceeb17347365399ff829 Mon Sep 17 00:00:00 2001 From: Frank Lu Date: Mon, 26 Oct 2020 10:05:53 +0800 Subject: [PATCH 161/347] fix validation issues --- .../Yeeflow/apiDefinition.swagger.json | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/certified-connectors/Yeeflow/apiDefinition.swagger.json b/certified-connectors/Yeeflow/apiDefinition.swagger.json index ce9bc2b0a..a3a3481be 100644 --- a/certified-connectors/Yeeflow/apiDefinition.swagger.json +++ b/certified-connectors/Yeeflow/apiDefinition.swagger.json @@ -34,6 +34,7 @@ "paths": { "/lists/41/{listID}/items": { "post": { + "consumes": ["application/json"], "responses": { "200": { "description": "Success", @@ -119,13 +120,15 @@ "name": "appID", "in": "path", "required": true, - "type": "integer" + "type": "integer", + "x-ms-url-encoding": "single" }, { "name": "listID", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-ms-url-encoding": "single" }, { "name": "type", @@ -202,7 +205,8 @@ "required": true, "type": "string", "description": "ListDataID", - "x-ms-summary": "Item ID" + "x-ms-summary": "Item ID", + "x-ms-url-encoding": "single" } ] }, @@ -247,11 +251,13 @@ "required": true, "type": "string", "description": "ListDataID", - "x-ms-summary": "Item ID" + "x-ms-summary": "Item ID", + "x-ms-url-encoding": "single" } ] }, "patch": { + "consumes": ["application/json"], "responses": { "200": { "description": "default", @@ -292,7 +298,8 @@ "required": true, "type": "string", "description": "ListDataID", - "x-ms-summary": "Item ID" + "x-ms-summary": "Item ID", + "x-ms-url-encoding": "single" }, { "name": "body", @@ -608,7 +615,8 @@ "name": "listID", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-ms-url-encoding": "single" }, { "name": "appID", @@ -635,6 +643,7 @@ } } }, + "consumes": ["application/json"], "summary": "When an item is created", "description": "When an item is created", "operationId": "OnItemCreated", @@ -652,13 +661,12 @@ { "name": "body", "in": "body", - "required": false, + "required": true, "schema": { "type": "object", "properties": { "columnType": { "type": "integer", - "x-ms-visibility": "internal", "default": 0 }, "callbackUrl": { @@ -693,6 +701,7 @@ } } }, + "consumes": ["application/json"], "summary": "When an item is modified", "description": "When an item is modified", "operationId": "OnItemModified", @@ -710,13 +719,12 @@ { "name": "body", "in": "body", - "required": false, + "required": true, "schema": { "type": "object", "properties": { "columnType": { "type": "integer", - "x-ms-visibility": "internal", "default": 0 }, "callbackUrl": { @@ -751,6 +759,7 @@ } } }, + "consumes": ["application/json"], "summary": "When an item is created or modified", "description": "When an item is created or modified", "operationId": "OnItemCreatedModified", @@ -768,13 +777,12 @@ { "name": "body", "in": "body", - "required": false, + "required": true, "schema": { "type": "object", "properties": { "columnType": { "type": "integer", - "x-ms-visibility": "internal", "default": 0 }, "callbackUrl": { @@ -809,6 +817,7 @@ } } }, + "consumes": ["application/json"], "summary": "When an item is deleted", "description": "When an item is deleted", "operationId": "OnItemDeleted", @@ -826,13 +835,12 @@ { "name": "body", "in": "body", - "required": false, + "required": true, "schema": { "type": "object", "properties": { "columnType": { "type": "integer", - "x-ms-visibility": "internal", "default": 0 }, "callbackUrl": { @@ -894,6 +902,7 @@ } } }, + "consumes": ["application/json"], "summary": "Query items", "description": "Query items", "operationId": "QueryItems", @@ -978,19 +987,22 @@ "name": "appID", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-ms-url-encoding": "single" }, { "name": "listID", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-ms-url-encoding": "single" }, { "name": "hookId", "in": "path", "required": true, - "type": "string" + "type": "string", + "x-ms-url-encoding": "single" } ], "description": "Delete a trigger" @@ -1047,7 +1059,6 @@ "properties": { "columnType": { "type": "integer", - "x-ms-visibility": "internal", "default": 0 }, "callbackUrl": { @@ -1114,6 +1125,7 @@ "listID": { "name": "listID", "x-ms-summary": "List", + "x-ms-url-encoding": "single", "description": "Select a list", "in": "path", "required": true, From 93f42f9cb31450d612f5ae8e88dca6aec4a4efb8 Mon Sep 17 00:00:00 2001 From: amancdk <35783172+amancdk@users.noreply.github.com> Date: Mon, 26 Oct 2020 11:31:10 +0530 Subject: [PATCH 162/347] Update apiProperties.json Changing the icon color --- certified-connectors/CDK Drive Customers/apiProperties.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/CDK Drive Customers/apiProperties.json b/certified-connectors/CDK Drive Customers/apiProperties.json index b65b3e9b2..98d5939ec 100644 --- a/certified-connectors/CDK Drive Customers/apiProperties.json +++ b/certified-connectors/CDK Drive Customers/apiProperties.json @@ -1,9 +1,9 @@ { "properties": { "connectionParameters": {}, - "iconBrandColor": "#83bd41", + "iconBrandColor": "#1F1B3A", "capabilities": [], "publisher": "CDK Global", "stackOwner": "CDK Global" } -} \ No newline at end of file +} From 877c3ee13abde7eb75dc163210a542b7f45df270 Mon Sep 17 00:00:00 2001 From: amancdk <35783172+amancdk@users.noreply.github.com> Date: Tue, 27 Oct 2020 01:45:42 +0530 Subject: [PATCH 163/347] Cdk drive customers api (#527) * Initial commit for CDK Customer API connector * Initial commit for CDK Customer API connector * Reducing the length of the description * Correcting the description * Update apiProperties.json Changing the icon color --- certified-connectors/CDK Drive Customers/apiProperties.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/certified-connectors/CDK Drive Customers/apiProperties.json b/certified-connectors/CDK Drive Customers/apiProperties.json index b65b3e9b2..98d5939ec 100644 --- a/certified-connectors/CDK Drive Customers/apiProperties.json +++ b/certified-connectors/CDK Drive Customers/apiProperties.json @@ -1,9 +1,9 @@ { "properties": { "connectionParameters": {}, - "iconBrandColor": "#83bd41", + "iconBrandColor": "#1F1B3A", "capabilities": [], "publisher": "CDK Global", "stackOwner": "CDK Global" } -} \ No newline at end of file +} From 15a4915147bbe441599f1b9e8bce5d562a50eb0b Mon Sep 17 00:00:00 2001 From: Michal Turzynski Date: Mon, 26 Oct 2020 21:24:04 +0000 Subject: [PATCH 164/347] Add CRMBot connector (#486) * Add CRMBot connector * CRMB Bot - readme.md update * CRM Bot - readme.md update --- .../CRMBot/apiDefinition.swagger.json | 687 ++++++++++++++++++ .../CRMBot/apiProperties.json | 23 + certified-connectors/CRMBot/readme.md | 15 + 3 files changed, 725 insertions(+) create mode 100644 certified-connectors/CRMBot/apiDefinition.swagger.json create mode 100644 certified-connectors/CRMBot/apiProperties.json create mode 100644 certified-connectors/CRMBot/readme.md diff --git a/certified-connectors/CRMBot/apiDefinition.swagger.json b/certified-connectors/CRMBot/apiDefinition.swagger.json new file mode 100644 index 000000000..80f209509 --- /dev/null +++ b/certified-connectors/CRMBot/apiDefinition.swagger.json @@ -0,0 +1,687 @@ +{ + "swagger": "2.0", + "info": { + "title": "CRM Bot", + "description": "Create powerful conversation experience for your customers right from your CRM system.\nLearn more https://docs.crmbot.ai/", + "version": "1.0", + "contact": { + "name": "CRM Bot Ltd - Support", + "url": "https://github.com/crmbot-ai/crmbot-community/issues", + "email": "support@crmbot.ai" + } + }, + "host": "services.crmbot.ai", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [], + "paths": { + "/runtime/api/message/custom": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Adaptive card" + } + } + } + } + }, + "operationId": "build-custom-message", + "summary": "Build Adaptive Card Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "text": { + "type": "string", + "description": "Paste here your adaptive card JSON", + "title": "Payload" + } + }, + "required": [ + "text", + "platform" + ] + }, + "x-ms-visibility": "advanced" + } + ], + "description": "Creates Microsoft Adaptive Card response to send to the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/message/text": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Text message" + } + } + } + } + }, + "operationId": "build-text-message", + "summary": "Build Text Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "text": { + "type": "string", + "description": "Provide your response", + "title": "Text" + } + }, + "required": [ + "text", + "platform" + ] + }, + "x-ms-visibility": "advanced" + } + ], + "description": "Creates a standard text response to send to the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/message/card": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Card message" + } + } + } + } + }, + "operationId": "build-card-message", + "summary": "Build Card Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "title": { + "type": "string", + "description": "Enter card title", + "title": "Title" + }, + "subtitle": { + "type": "string", + "description": "Enter card description (optional)", + "title": "Description" + }, + "url": { + "type": "string", + "description": "Enter url of your .jpg or .png (optional)", + "title": "Image URL" + }, + "isCarousel": { + "type": "boolean", + "description": "Set to NO as default.", + "title": "Display as carousel", + "default": false + }, + "buttontitle1": { + "type": "string", + "description": "Title of your button", + "title": "1st Button Title" + }, + "buttonpostback1": { + "type": "string", + "description": "Postback (text sent to Flow) of your button", + "title": "1st Button Postback" + }, + "buttontitle2": { + "type": "string", + "description": "Title of your button", + "title": "2nd Button Title" + }, + "buttonpostback2": { + "type": "string", + "description": "Postback (text sent to Flow) of your button", + "title": "2nd Button Postback" + }, + "buttontitle3": { + "type": "string", + "description": "Title of your button", + "title": "3rd Button Title" + }, + "buttonpostback3": { + "type": "string", + "description": "Postback (text sent to Flow) of your button", + "title": "3rd Button Postback" + } + }, + "required": [ + "title", + "platform", + "isCarousel" + ] + }, + "x-ms-visibility": "advanced" + } + ], + "description": "Creates Card response to send to the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/message/quickreplies": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Quick replies message" + } + } + } + } + }, + "operationId": "build-quickreplies-message", + "summary": "Build Quick Reply Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "title": { + "type": "string", + "description": "Text to display above the options", + "title": "Title" + }, + "text": { + "type": "string", + "description": "Provide list of comma separated options", + "title": "Menu options" + } + }, + "required": [ + "text", + "platform", + "title" + ] + } + } + ], + "description": "Creates a small menu of suggested actions for the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/message/media": { + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "properties": { + "message": { + "type": "object", + "title": "Media message" + } + } + } + } + }, + "operationId": "build-media-message", + "summary": "Build Media Response", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "platform": { + "type": "string", + "description": "Use Platform parameter from trigger action", + "title": "Platform" + }, + "url": { + "type": "string", + "description": "Enter url of your image or video", + "title": "Image/Video URL" + }, + "mediaType": { + "type": "string", + "enum": [ + "1", + "2" + ], + "x-ms-enum-values": [ + { + "displayName": "Image", + "value": "1" + }, + { + "displayName": "Video", + "value": "2" + } + ], + "title": "Media type", + "description": "Select right type" + } + }, + "required": [ + "url", + "mediaType", + "platform" + ] + } + } + ], + "description": "Creates an image or video to send to the user.", + "x-ms-visibility": "important" + } + }, + "/runtime/api/flowconnector/response": { + "post": { + "operationId": "send-response", + "summary": "Send Response", + "description": "Sends your response to the user within the context of existing conversation (Requires Bot Trigger).", + "responses": { + "200": { + "description": "OK" + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "required": [ + "useGlossary", + "targetLanguage", + "sessionId" + ], + "type": "object", + "properties": { + "sessionId": { + "type": "string", + "title": "Bot Session ID", + "description": "Use BotSessionID parameter from trigger action" + }, + "useGlossary": { + "type": "boolean", + "description": "If you have a custom dictionary for your Bot select Yes", + "title": "Use Custom Dictionary" + }, + "targetLanguage": { + "type": "string", + "description": "Use Language parameter from trigger action", + "title": "Target Language" + }, + "webhookResponse": { + "type": "object", + "properties": { + "FulfillmentMessages": { + "type": "array", + "items": { + "type": "object" + }, + "title": "Fullfilment Messages", + "description": "Use Message parameter from your Response Actions" + }, + "EventName": { + "description": "Select the event you would like to invoke", + "type": "string", + "x-ms-summary": "Select the event you would like to invoke", + "x-ms-dynamic-values": { + "operationId": "get-events" + }, + "title": "Event" + }, + "OutputContextName": { + "description": "Apply specific context to response", + "type": "string", + "x-ms-summary": "Apply specific context to response", + "x-ms-dynamic-values": { + "operationId": "get-contexts" + }, + "title": "Output Context" + }, + "OutputContextLifespan": { + "description": "Duration of context", + "type": "integer", + "x-ms-summary": "Duration of context", + "title": "Context Lifespan" + } + } + } + } + } + } + ], + "x-ms-visibility": "important" + } + }, + "/runtime/api/flowconnector/proactive": { + "post": { + "operationId": "send-proactive-message", + "summary": "Send Proactive Message", + "description": "Sends your response to the user outside of the standard conversation (requires User ID).", + "responses": { + "200": { + "description": "OK" + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "required": [ + "sessionId", + "useGlossary", + "targetLanguage" + ], + "type": "object", + "properties": { + "sessionId": { + "type": "string", + "description": "Needs to come from your trigger or supporting datasets", + "title": "User ID" + }, + "useGlossary": { + "type": "boolean", + "description": "If you have a custom dictionary for your Bot select Yes", + "title": "Use Custom Dictionary" + }, + "targetLanguage": { + "type": "string", + "description": "Use Language parameter from trigger action", + "title": "Target Language" + }, + "webhookResponse": { + "type": "object", + "properties": { + "FulfillmentMessages": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Use Message parameter from your Response Actions", + "title": "Fullfilment Messages" + } + } + } + } + } + } + ], + "x-ms-visibility": "important" + } + }, + "/runtime/api/flowconnector/getIntents": { + "get": { + "operationId": "get-intents", + "summary": "Get intents", + "description": "Get intents", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "intent": { + "type": "string" + } + } + } + } + } + } + } + }, + "/runtime/api/flowconnector/getContexts": { + "get": { + "operationId": "get-contexts", + "summary": "Get contexts", + "description": "Get contexts", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "/runtime/api/flowconnector/getEvents": { + "get": { + "operationId": "get-events", + "summary": "Get events", + "description": "Get events", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "/runtime/api/flowconnector/getSchema/{intent}": { + "get": { + "operationId": "get-schema", + "summary": "Get intent schema", + "description": "Get intent schema", + "x-ms-visibility": "internal", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + }, + "parameters": [ + { + "name": "intent", + "in": "path", + "required": true, + "type": "string", + "description": "Select the intent", + "default": "test" + } + ] + } + }, + "/runtime/api/flowconnector": { + "x-ms-notification-content": { + "schema": { + "type": "object", + "x-ms-dynamic-schema": { + "operationId": "get-schema", + "parameters": { + "intent": { + "parameter": "intent" + } + } + }, + "x-ms-dynamic-properties": { + "operationId": "get-schema", + "parameters": { + "intent": { + "parameterReference": "body/intent" + } + } + } + }, + "description": "Api Response" + }, + "x-ms-visibility": "important", + "post": { + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object" + } + } + }, + "operationId": "intent-detected", + "summary": "When Intent is detected", + "x-ms-trigger": "single", + "parameters": [ + { + "name": "body", + "in": "body", + "required": false, + "schema": { + "type": "object", + "properties": { + "callbackUrl": { + "type": "string", + "description": "callbackUrl", + "x-ms-visibility": "internal", + "title": "", + "x-ms-notification-url": true + }, + "intent": { + "description": "Select intent you would like to trigger on", + "type": "string", + "x-ms-summary": "Select intent you would like to trigger on", + "x-ms-dynamic-values": { + "operationId": "get-intents", + "value-path": "intent", + "value-title": "intent" + }, + "title": "Intent", + "x-ms-visibility": "important" + }, + "platform": { + "title": "Platform", + "description": "Use Unspecified if your flow is platform agnostic", + "type": "string", + "x-ms-visibility": "important", + "x-ms-summary": "Use Unspecified if your flow is platform agnostic", + "enum": [ + "Unspecified", + "Messenger", + "Google Assistant", + "Skype", + "Slack" + ] + } + }, + "required": [ + "callbackUrl", + "intent", + "platform" + ] + }, + "x-ms-visibility": "advanced" + } + ], + "description": "Triggers when CRM Bot matches user request to one of your Intents with fullfilment.", + "x-ms-visibility": "important" + } + } + }, + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API Key": { + "type": "apiKey", + "in": "header", + "name": "X-Tcb-Api-Key" + } + }, + "security": [ + { + "API Key": [] + } + ], + "tags": [], + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://docs.crmbot.ai" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://crmbot.ai/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Sales and CRM;AI" + } + ] +} \ No newline at end of file diff --git a/certified-connectors/CRMBot/apiProperties.json b/certified-connectors/CRMBot/apiProperties.json new file mode 100644 index 000000000..f9c964a89 --- /dev/null +++ b/certified-connectors/CRMBot/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "CRM Bot API Key", + "description": "Please see your registration email for reference.", + "tooltip": "Please see your registration email for reference.", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#0B304D", + "capabilities": [], + "publisher": "CRM Bot Ltd", + "stackOwner": "CRM Bot Ltd" + } +} \ No newline at end of file diff --git a/certified-connectors/CRMBot/readme.md b/certified-connectors/CRMBot/readme.md new file mode 100644 index 000000000..3044bbbc3 --- /dev/null +++ b/certified-connectors/CRMBot/readme.md @@ -0,0 +1,15 @@ +## CRM Bot - Conversational AI for your CRM + +Create a powerful conversational experience for your customers right from your CRM system. Give users new ways to interact with your company by building engaging voice and text-based conversational interfaces, such as voice apps and chatbots, powered by AI. Connect with users on your website, mobile app, the Google Assistant, Amazon Alexa, Facebook Messenger, and other popular platforms and devices. And do it directly from your existing CRM implementation. + +## Prerequisites + +Our clients have to undergo a registration process which is currently offered through MS Teams chatbot as well as part of overall solution installation, currently available through our sales bot [here](https://crmbot.ai). This provides them with a secret API key which is necessary to use our connector with their chatbot projects. + +## How to get credentials + +In order to get access to your own chatbot project with CRM Bot, all you have to do is get in touch with our CRM chatbot (which is available at crmbot.ai). The chatbot will guide you through the registration process. + +## Support and documentation + +You can find the detailed documentation [here.](https://docs.crmbot.ai/docs/) \ No newline at end of file From 518fd3b3d5f3378c7c846272e8b929543180a11b Mon Sep 17 00:00:00 2001 From: Frank Lu Date: Tue, 27 Oct 2020 14:39:56 +0800 Subject: [PATCH 165/347] Change clientId to dummy value --- certified-connectors/Yeeflow/apiProperties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/certified-connectors/Yeeflow/apiProperties.json b/certified-connectors/Yeeflow/apiProperties.json index e30307eca..49e658f59 100644 --- a/certified-connectors/Yeeflow/apiProperties.json +++ b/certified-connectors/Yeeflow/apiProperties.json @@ -5,7 +5,7 @@ "type": "oauthSetting", "oAuthSettings": { "identityProvider": "oauth2", - "clientId": "18e3f376-5cfd-1ed1-770f-ba933a6041d1", + "clientId": "00000000-0000-0000-0000-000000000000", "scopes": [ "openid basic_api offline_access" ], From c10274f4ca127a493929fba843e6de8c074ed666 Mon Sep 17 00:00:00 2001 From: geckoR42 Date: Tue, 27 Oct 2020 15:45:31 +0900 Subject: [PATCH 166/347] Docurain Connector --- certified-connectors/Docurain/Readme.md | 80 ++++++ .../Docurain/apiDefinition.swagger.json | 248 ++++++++++++++++++ .../Docurain/apiProperties.json | 23 ++ .../Docurain/images/Download1-1.png | Bin 0 -> 505464 bytes .../Docurain/images/Download1-2.png | Bin 0 -> 222299 bytes .../Docurain/images/Download1-3.png | Bin 0 -> 292119 bytes .../Docurain/images/Download1-4.png | Bin 0 -> 99352 bytes .../Docurain/images/Download1-5.png | Bin 0 -> 150349 bytes .../Docurain/images/PowerApp1-1.png | Bin 0 -> 348119 bytes .../Docurain/images/PowerApp1-2.png | Bin 0 -> 324400 bytes .../Docurain/images/PowerApp1-3.png | Bin 0 -> 286574 bytes .../Docurain/images/RenderAsync1-1.png | Bin 0 -> 352444 bytes .../Docurain/images/RenderAsync1-2.png | Bin 0 -> 857417 bytes .../Docurain/images/RenderAsync1-3.png | Bin 0 -> 170029 bytes 14 files changed, 351 insertions(+) create mode 100644 certified-connectors/Docurain/Readme.md create mode 100644 certified-connectors/Docurain/apiDefinition.swagger.json create mode 100644 certified-connectors/Docurain/apiProperties.json create mode 100644 certified-connectors/Docurain/images/Download1-1.png create mode 100644 certified-connectors/Docurain/images/Download1-2.png create mode 100644 certified-connectors/Docurain/images/Download1-3.png create mode 100644 certified-connectors/Docurain/images/Download1-4.png create mode 100644 certified-connectors/Docurain/images/Download1-5.png create mode 100644 certified-connectors/Docurain/images/PowerApp1-1.png create mode 100644 certified-connectors/Docurain/images/PowerApp1-2.png create mode 100644 certified-connectors/Docurain/images/PowerApp1-3.png create mode 100644 certified-connectors/Docurain/images/RenderAsync1-1.png create mode 100644 certified-connectors/Docurain/images/RenderAsync1-2.png create mode 100644 certified-connectors/Docurain/images/RenderAsync1-3.png diff --git a/certified-connectors/Docurain/Readme.md b/certified-connectors/Docurain/Readme.md new file mode 100644 index 000000000..e6497bf47 --- /dev/null +++ b/certified-connectors/Docurain/Readme.md @@ -0,0 +1,80 @@ + +## Docurain Connector +Docurain connector provides an API to generate Documents (e.g. PDF, Excel, etc...). +This API allows you to create your own Document using a template file registered in Docurain and data in PowerApps. + + +## Prerequisites. +To proceed, you will need the following. +* Create a Account Docurain `https://docurain.jp/signup/` +* Create an access token from Docurain console screen
+ The access token is an API key for the custom connector "Docurain". Please set an expire and an allowed IP address with this in mind. + +## Downloading & Deploying the Connector +1. Clone the PowerPlatformConnectors GitHub repository +2. Open a terminal, then change to the `Docurain` directory +3. Run `paconn login`, then follow the authentication steps +4. Once authenticated, run `paconn create -s settings.json` +5. Select the target environment for your connector + +### Create Connection +Create a new connection using your API Key.
+The Access token you created in the Docurain console screen will be your API Key.
+`token [access_token]` + +## Supported Actions +The Acuity Scheduling sample connector currently supports the following actions: +* `Render`: Render a Document(Report, Form) by specifying the name of a template saved in Docurain beforehand. +* `RenderAsync`: Render a Document(Report, Form) asynchronously by specifying the name of a template saved in Docurain beforehand. +* `GetAsyncStatus`: Get the processing status of rendering with the result ID returned from RenderAsync. +* `GetAsyncResult`: Get the rendering result with the result ID returned from RenderAsync. + +## Sample Usage +### PowerApp +* **Displays Docurain-rendered PDFs in PDFViewer based on the input values (json) from the screen and the "sample" templates previously registered in Docurain.** + 1. Setting the OnSelect button.
+ `Docurain.Render("[output format]", "[template name]", "[data format]", "[JSON with any properties]")`
+ + + 1. PDFViewer settings
+ + + 1. Input value in each field and click the button. The result is displayed in PDFViewer.
+ + +### PowerApp And Flow +* **Download a Docurain-rendered PDF based on the input values (json) from the screen and a "sample" template previously registered in Docurain.** + + 1. Setting the OnSelect button.
+ Determine the result returned from `DourainRender`, download the file or display the message.
+ `DourainRender` is Sample Flow. `DourainRender` will be explained in the following sections.
+ + + 1. Flow in Power Automate
+ `DourainRender`(sample)
+
+ Temporarily save the Docurain output PDF to OneDrive and respond to PowerApp with the URL of the file. In case of an error, the response of the API is JSON, so it responds with a body.
+
+ + + 1. Input a value in each field and click the button to download the PDF.
+ + +* **If Render times out due to large data or output results, use RenderAsync to avoid it.** + 1. Setting the OnSelect button.
+ Determine the result returned from `DourainRenderAsync`, download the file or display the message.
+ `DourainRenderAsync` is Sample Flow. `DourainRenderAsync` will be explained in the following sections.
+
+ + 1. Flow in Power Automate
+ `DourainRenderAsync`(sample)
+ **If you want to use it in the actual flow, add a step to determine the response of each API.**
+
+ + 1. Input a value in each field and click the button to download the PDF.
+ + +## Further Support +* Login to the Docurain console screen and connect to the following URL. + `https://api.docurain.jp/console/inquiry` +* Please send your inquiry with the title and content of your inquiry. diff --git a/certified-connectors/Docurain/apiDefinition.swagger.json b/certified-connectors/Docurain/apiDefinition.swagger.json new file mode 100644 index 000000000..bbc9b5f19 --- /dev/null +++ b/certified-connectors/Docurain/apiDefinition.swagger.json @@ -0,0 +1,248 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Docurain", + "description": "DocurainAPI\u901a\u4fe1\u30b3\u30cd\u30af\u30bf", + "contact": { + "name": "Docurain support", + "url": "https://api.docurain.jp/console/inquiry", + "email": "cs@docurain.jp" + } + }, + "host": "powerapps.docurain.jp", + "basePath": "/", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], + "paths": { + "/apiw/{outType}/{templateName}": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": { + "title": "body", + "type": "string", + "format": "binary", + "description": "\u51e6\u7406\u6210\u529f\u6642\u306f\u751f\u6210\u3055\u308c\u305f\u5e33\u7968\u306e\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u304c\u8fd4\u5374\u3055\u308c\u307e\u3059\u3002 \u51e6\u7406\u5931\u6557\u6642\u306f\u30a8\u30e9\u30fc\u306e\u8a73\u7d30\u3092\u793a\u3059JSON\u304c\u8fd4\u5374\u3055\u308c\u307e\u3059\u3002" + }, + "headers": { + "Content-Type": { + "description": "Content-Type", + "type": "string" + } + } + } + }, + "summary": "Render", + "operationId": "Render", + "description": "\u4e8b\u524d\u306bDocurain\u306b\u4fdd\u5b58\u3057\u305f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u540d\u79f0\u3092\u6307\u5b9a\u3057\u3066\u5e33\u7968\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u884c\u3046API\u3067\u3059\u3002", + "parameters": [ + { + "name": "outType", + "in": "path", + "required": true, + "type": "string", + "description": "\u51fa\u529b\u5f62\u5f0f\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3000\uff1a pdf, xls(xlsx), png, jpg, gif, svg", + "x-ms-summary": "\u51fa\u529b\u5f62\u5f0f" + }, + { + "name": "templateName", + "in": "path", + "required": true, + "type": "string", + "description": "\u3059\u3067\u306bDocurain\u306b\u4fdd\u5b58\u3057\u305f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u540d\u79f0\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "x-ms-summary": "\u4e8b\u524d\u4fdd\u5b58\u6e08\u307f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u540d" + }, + { + "name": "X-Docurain-Data-Type", + "in": "header", + "required": true, + "type": "string", + "description": "\u30c7\u30fc\u30bf\u306e\u5f62\u5f0f\u3092\u8a2d\u5b9a\u3057\u3066\u4e0b\u3055\u3044\u3000\uff1a json, csv, tsv", + "x-ms-summary": "\u30c7\u30fc\u30bf\u5f62\u5f0f" + }, + { + "name": "body", + "in": "body", + "required": true, + "description": "\u30c7\u30fc\u30bf\u5f62\u5f0f\u306b\u6307\u5b9a\u3057\u305f\u5f62\u5f0f(json/csv/tsv)\u306e\u6587\u5b57\u5217\u30c7\u30fc\u30bf\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "schema": { + "type": "string", + "description": "\u30c7\u30fc\u30bf\u5f62\u5f0f\u306b\u6307\u5b9a\u3057\u305f\u5f62\u5f0f\u306e\u30c7\u30fc\u30bf\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "title": "data", + "format": "" + } + } + ] + } + }, + "/apiw/async/{outType}/{templateName}": { + "post": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "resultId": { + "type": "string", + "description": "\u975e\u540c\u671fAPI\u306e\u51e6\u7406\u30b9\u30c6\u30fc\u30bf\u30b9\u554f\u3044\u5408\u308f\u305b\u3001\u51e6\u7406\u7d50\u679c\u306e\u53d6\u5f97\u306e\u305f\u3081\u306eID", + "title": "resultId" + } + } + }, + "headers": { + "Content-Type": { + "description": "Content-Type", + "type": "string" + } + } + } + }, + "summary": "RenderAsync", + "operationId": "RenderAsync", + "description": "\u4e8b\u524d\u306bDocurain\u306b\u4fdd\u5b58\u3057\u305f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u540d\u79f0\u3092\u6307\u5b9a\u3057\u3066\u5e33\u7968\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u975e\u540c\u671f\u3067\u884c\u3046API\u3067\u3059\u3002", + "parameters": [ + { + "name": "outType", + "in": "path", + "required": true, + "type": "string", + "description": "\u51fa\u529b\u5f62\u5f0f\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3000\uff1a pdf, xls(xlsx), png, jpg, gif, svg", + "x-ms-summary": "\u51fa\u529b\u5f62\u5f0f" + }, + { + "name": "templateName", + "in": "path", + "required": true, + "type": "string", + "description": "\u3059\u3067\u306bDocurain\u306b\u4fdd\u5b58\u3057\u305f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u540d\u79f0\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "x-ms-summary": "\u4e8b\u524d\u4fdd\u5b58\u6e08\u307f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u540d" + }, + { + "name": "X-Docurain-Data-Type", + "in": "header", + "required": true, + "type": "string", + "description": "\u30c7\u30fc\u30bf\u306e\u5f62\u5f0f\u3092\u8a2d\u5b9a\u3057\u3066\u4e0b\u3055\u3044\u3000\uff1a json, csv, tsv", + "x-ms-summary": "\u30c7\u30fc\u30bf\u5f62\u5f0f" + }, + { + "name": "body", + "in": "body", + "required": true, + "description": "\u30c7\u30fc\u30bf\u5f62\u5f0f\u306b\u6307\u5b9a\u3057\u305f\u5f62\u5f0f(json/csv/tsv)\u306e\u6587\u5b57\u5217\u30c7\u30fc\u30bf\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "schema": { + "type": "string", + "description": "\u30c7\u30fc\u30bf\u5f62\u5f0f\u306b\u6307\u5b9a\u3057\u305f\u5f62\u5f0f\u306e\u30c7\u30fc\u30bf\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "title": "data", + "format": "" + } + } + ] + } + }, + "/apiw/async/{resultId}/status": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "\u6307\u5b9a\u3057\u305f\u7d50\u679cID\u306e\u51e6\u7406\u30b9\u30c6\u30fc\u30bf\u30b9 : PROCESSING:\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u51e6\u7406\u4e2d, FAIL:\u5931\u6557, SUCCESS:\u6210\u529f", + "title": "status" + } + } + } + } + }, + "summary": "GetAsyncStatus", + "operationId": "GetAsyncStatus", + "description": "\u6307\u5b9a\u3057\u305f\u7d50\u679cID\u306e\u51e6\u7406\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002", + "parameters": [ + { + "name": "resultId", + "in": "path", + "required": true, + "type": "string", + "description": "RenderAsync\u3088\u308a\u8fd4\u5374\u3055\u308c\u305f\u7d50\u679cID\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "x-ms-summary": "\u51e6\u7406\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u554f\u3044\u5408\u308f\u305b\u308b\u7d50\u679cID" + } + ] + } + }, + "/apiw/async/{resultId}": { + "get": { + "responses": { + "default": { + "description": "default", + "schema": { + "title": "body", + "type": "string", + "format": "binary", + "description": "\u51e6\u7406\u6210\u529f\u6642\u306f\u751f\u6210\u3055\u308c\u305f\u5e33\u7968\u306e\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u304c\u8fd4\u5374\u3055\u308c\u307e\u3059\u3002 \u51e6\u7406\u5931\u6557\u6642\u306f\u30a8\u30e9\u30fc\u306e\u8a73\u7d30\u3092\u793a\u3059JSON\u304c\u8fd4\u5374\u3055\u308c\u307e\u3059\u3002" + }, + "headers": { + "Content-Type": { + "description": "Content-Type", + "type": "string" + } + } + } + }, + "summary": "GetAsyncResult", + "description": "\u6307\u5b9a\u3057\u305f\u7d50\u679cID\u306e\u51e6\u7406\u7d50\u679c\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002", + "operationId": "GetAsyncResult", + "parameters": [ + { + "name": "resultId", + "in": "path", + "required": true, + "type": "string", + "description": "RenderAsync\u3088\u308a\u8fd4\u5374\u3055\u308c\u305f\u7d50\u679cID\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "x-ms-summary": "\u53d6\u5f97\u3059\u308b\u51e6\u7406\u7d50\u679c\u306e\u7d50\u679cID" + } + ] + } + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://docurain.jp/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://docurain.jp/privacypolicy/" + }, + { + "propertyName": "Categories", + "propertyValue": "" + } + ], + "definitions": {}, + "parameters": {}, + "responses": {}, + "securityDefinitions": { + "API \u30ad\u30fc": { + "type": "apiKey", + "in": "header", + "name": "Authorization" + } + }, + "security": [ + { + "API \u30ad\u30fc": [] + } + ], + "tags": [] +} diff --git a/certified-connectors/Docurain/apiProperties.json b/certified-connectors/Docurain/apiProperties.json new file mode 100644 index 000000000..67ea84eb2 --- /dev/null +++ b/certified-connectors/Docurain/apiProperties.json @@ -0,0 +1,23 @@ +{ + "properties": { + "connectionParameters": { + "api_key": { + "type": "securestring", + "uiDefinition": { + "displayName": "API \u30ad\u30fc", + "description": "\u3053\u306e API \u306e API \u30ad\u30fc", + "tooltip": "\u81ea\u5206\u306e API \u30ad\u30fc \u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044", + "constraints": { + "tabIndex": 2, + "clearText": false, + "required": "true" + } + } + } + }, + "iconBrandColor": "#FFFFFF", + "capabilities": [], + "publisher": "root42 Inc.", + "stackOwner": "root42 Inc." + } +} \ No newline at end of file diff --git a/certified-connectors/Docurain/images/Download1-1.png b/certified-connectors/Docurain/images/Download1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5df17eec70dbb9504f91934b3781f367cf9a57b4 GIT binary patch literal 505464 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%0D9*-8%Z~$Jzd8 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

gJ<|%CLTNfm^#`&0VVN}hl2Sk_&f*? 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 A-v9sr literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/Download1-3.png b/certified-connectors/Docurain/images/Download1-3.png new file mode 100644 index 0000000000000000000000000000000000000000..ff647ed9110a7e246a340659a5d3da0fad332fa5 GIT binary patch literal 292119 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

fz&s0eJnBdmv;-iZ^QQOOFp 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

  • iq@Sn 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

    #~pWk0qwn{cgK#QGT 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 NkDob~eDw0o{{<;NY&QS^ literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/Download1-4.png b/certified-connectors/Docurain/images/Download1-4.png new file mode 100644 index 0000000000000000000000000000000000000000..219336883bb13e704b020c49e3fff22a8a337526 GIT binary patch literal 99352 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 literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/Download1-5.png b/certified-connectors/Docurain/images/Download1-5.png new file mode 100644 index 0000000000000000000000000000000000000000..dd746f24f22e4060d8e9201cde18fad4f00d7091 GIT binary patch literal 150349 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

    &@*a?+uXET6=_HPT;bwx+R@MBP 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 literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/PowerApp1-1.png b/certified-connectors/Docurain/images/PowerApp1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bbc2ea5601459d089476b1c0b7012046b83c4d65 GIT binary patch literal 348119 zcmbq)1yo$ivi2}c@ZbawE(tQY3^qV;Cjx|E!4K~41V|uwa1ELScXxLP!F@t-cmFr% z$~o`8d;a_0da!1(*}J=UcUM={S6|hdQ3t^rPX;^_F+yqh zBHKYUY2Vtkerr&F$35=aouMQ_LA=5U>fsU9OMBq!Og>(Y0nv(-xx(uxQqO#b;Tw+B zfduB%L$d>SWE~#nezV2vz#h>>Ij|0yCe^bwx%nt&n2BBNiQW?@UYa6mPu6IDnN_q zL+z*}pS^L)Q*ZK+X_~0l~-^hWI3Pw#!Q^aO#dQPXo5YO@wday-QL3h1doGYCbi> z4vSwah{NTT7e@%Svg;{`Q;MrQpO0q&>~RC=84^1h5^F{v8?qwmG<YD>O!-F`v9m13o{C{~O&u(a?c-_vxUy(JmN<8MW_ z6%)n~4bXRJpRO5Jtw`TNk3gpkL=ChERBkIYkA8chQK|?^jTBRivFnN_ML0)(C&1~t zp%F6bN~}S*Z57F&!hVb<;vvDNK~VkFWum#)K_CG7TTy9Njk;b%E@=RJg z>(>w7T2xL2r0p+Pu_HWp(yyda-<3pM&){qOQ?@7@GL@81;T7POlpr(-oRNgSwzXTV zk1mms9X{eGQNjKhb=^*-hj{){?wv)UMfDcyAW0ALV4sE+$FAeFWi7oz%J51{v2RFc z42E>X+uGW?T5!f?ZvI`aE*EMu5!%t5sm_58==wPd3QD-=gjB1S`~H);Un1#Fr)J|KG{#Hc} zVpa%4237%Nt3|qm$P%@_RkwtS$DeKqa!#6p8sEZeOJ0=DzK?b6Kbb)#j*BlLLlVOI z)^Cb-D1^LC8XT!gkMUkoJ<^dLGm2K;h`kK$iR3Ff@+d1=-a|Tj5<$NdDOjX-k5@MN z1*TiXTjqzn@Ih4}N31?+K{NU!UuE&~5mGanIuf1mR~awYA6FoW_@&7dXQr-mSKuHg zJnHIT7I7GuvXU#Z4pdCWl5!@k)|K3Q^p7A2)t*ocI=$F6>zlvbT6vxDIDR+el zTJ6aB9)q7R%3|LrvNKIaMnpkl(j%{))DdcbfHDNpW)I{RWNc^fJZD$0W4?JI@>S$V zdJ=pvmp%KH>Q;VUzDqu|vZA7(!n1<$H@S)r6;CTp%~MC~ici9GRUAIsnVa)4SP5DY z7rt{2J&jh*n;i{U|8nekY46T^Lx1!5rjSq4qk>OGJHHWLuU;>HRd(t?`60XzTgLRO za;9?a5K?L=Or(xbM@XlLUC*V-I%n5lp1jV>9jmd_ozvaTz5n>Phxe27q!Mw-mJ4OR)i{o z0`aozW0#APEdf)^dq!@hs)Q7-4N`NCF`I0Cqm7;$Iv-vsrBp?P;#z_=f2014sfqO? zYew!_edn=)?iBOKMrl?}6W0lD)eqWfTO{6=POQ{)?y*Wf3jWmpRll;-olS|2j`dUA zEbA=WRpE9ae&L70&BEQ+&kLs~5+^JQwF^D0SS=Z+1}eW)Ui^rA+h0XATU0G#b=5Vr zz&^dJT`ygqcPf1gYtd2Wj96lV0e6rDw7IR>GPcLQl{h6 z{aPyx)3t_#2C>7;8~I<=_}`eZQ^bSgU&mi%C1zzw6GvE6+<1l!CX91_>q>ci)cfN* z@1#@k)=ufAVRr=E<5}TTC_fXwpLWjdOP4y2ge&kF;~DYep~tkqLw*s`Gy>t~6U&q9 z_0=7Qv#&>+r&R~aXA3{Q0<2oXjiH9=2Q=r9E7pC%m7}4_e*Q(5=Dl=pc5gv%UT>A| z=?H?4vz)t`&7Z^;eUg1lK`hiFOIN-_@P4?r{>!BR>Md%6k)aGG3K?ZSQ=B!o5{nYy zbJczFBB;ybY6b`AB3i#)^J(XP*AT+dGZ(nviOe0lk z`S$B1{Oqxqji)v}8<(iP;m-i(JZ85SM-a!hb94*Fx%X8c?-agQ^4Hje-`l!S43BAJ>Sk7NV0eS+B-h?MJ8`U5uqX! zsVu9aTr79j60xjtaK+_Hn#|??;7zN0E4M+UZDEP_Pv~nl_vnrETG)|!oXlUe_Nxau0f*$PH~zla@+{7(EkG3!3Gg*rpC*$1@F6-q4*Hdi!4qltN; zeA;g+&X@U@7sunw;(HXVJ-5zwCK%4~d!tWtb`|(pZ(clQ718+h`jzgfL8AV2?OvC+ z#=(5c;lSz+OT#NmEx9*OblkjNE`6Q)ow6;au@)OV?rn;d8DUanPhaTu4u=A=DX6=&sj*ZA`)dA6;Z z_r>(fPc}@}(5YKjnX&NiVkJKL3+83zmTTQQV>+qz2o=RL+w z-^`GgReu@EvDOwTZ?dGC%9}g8ir5g-U8JgQJ^@|9=f!6OlCe3lKk-pNEGKs-@BEmm z^hAj=xSPt_>eNE?`1^XgGi9l;y4(2v`Uk^t!_bI_6j0%XNm`2y!6>H{gRP2*Sth2` zh8e!n!kZUAzi^8M-*_JKtQ{Y4-BJTy`GCOYZ3IJS1*} z^64Dbj?ZxxA*NPa`k9IX-&|Zg-P^pd7@dR_G3hqD(d|gDDJ>7?RomM%o>wkS-p)$7 zpt;EJZ7#4io4OZo@^>$83N^wa7I12Pmc_3FW^o?iq>HEvUyf9sbKclp5QH-QP?=AA zyn(&dbbR%5u|BOg?c^->I`gbMcMW?O=a%$%?cIW0qYm^Z6y^5y>Dc*dk;dcV*H>?^ zb{mI0=I?Tk3lC=J_onugn^nB;vVDG`js<^+2&YOGlk%?Pj^yW{M)Y3<$RJ_y@o*FP zHaoXENML}%6!xzhXP(E7{GdO9qRc!#}2c&M+3|S%RQ&~DoMUppt3*ST+ z2RXS=S(B+5)zyEgHQVo!bQR**AHxEvbAzZ>k&$nbQBg$Ogq}KM`o@uN*5}HH>|5`9 zMPlf1<3I8%e&&U9L)%^Kk@2Ag*>nC5lf3_ZFhM=RYar~1GuD(dQBndu1+LLR50LOd z$iNj6@C!mB13mct8U&I@BLC;LIui5W+kio!U~>@U?``f!yZ?y2=ELf{#;T{4*2`r(B9bC+QH1mk(fxE1-OB3E34%I0zG25 z{~*b!)9-^oU?=kznvR-EiZDYPD|Q1To43a7u2#19*=_7ip`3z(f=~`FC>IwS(1Oju&DznxmCf3L?r($qW1MHk4uT` zz?ww4xw!cL-tAu>{oAfue{|*K5fJ!u*FQb_Q`h@Nz*OwbftecI@1iKDF!aCO``7mB z#tt@?PWR1UTAMqHa{ax_zuf+NFJb7tVE!bizny~L?*hj_6hj#L&m$#@@z#X89Rz}d z3V#549Ms0!Uo>V+=5`NEDUAs~ZE>N?W{85hO$I{V6*e69oe=#d zhac$+p{GVdmxY7>;&Po6X-8KCWq0}CH@i$~$(D;*xlr2PDnI`D@7w%u?z&62z+=)f zPvL(to&PxBe>BMOK_5sJ;wLd1Yd-7dj`>f^{71LH+6NID4%49&4)Za3WF>cr*?_;^ zu>UmD-xlU4%E)22(g81d&z*F9pmaF?zuBaJ*A`xkhHJ^CQjGn}?%zHB->v^L22`F% zjgoY{c5_hhe;p1!jHZ~x^F%R$qZJS>-r4_Mv?}NvS?GR@1Xst`!fgMav->|3#bbhm zyzcHJ+kYH6$EcPH^Y3+<0!rtPMRRU{ZFJjsf$rNB{5S@!v&&_y7`Tboe!ZK4ivKWL;0p^80KM?^@iq3i)-} ze{9A2Lb?R~EQ%YQpP^4JgfrjH;E0Y5Ki?rX^83d+|3_zd-PhNTkrM7e{D0kNjyN>n z2+-&bb(A`)>4yFXv-7VT_}@1hZVLG|kVt^Vvk{i+A@^5$`#)T(AE)Hf#acQJARw%x zutb(aiT}Rk{}}2xvV|@}7=O3nXvp?zr#e{Mx|TtBzXjP~cdpjpJwqJY{c+K>D6DMz zrhD?W`DP(m$s07t+%gCZO)=fX5tMLtJuT=90|I;z?i(-IBqC2aa z@{mqnEsZk#h4b-KlLiI5f)&!-H^1z!XGL_0ffdw2eLlBG=^P%X+X4Z|vn6cUXDCTw zW#l^>*r9OuUx~|150VN>yU0q@I50%voXruK3ecPb+hMTmZ2BLjrizJVnLMCu zlOe|@!1nB~{2>VxVjIE~iX%=RA$IGUl1M|Y*ydtlNj>$mmnl80JURPGZZ{@f@pCXP z^_0=_J7R2>f)WW$yH28Zd6q)Lt&T8K?iE(Xam*@%393ycj1~EEq*822l=8IwFMlD? zKaRFzJm{3nk_RQpF}^(K-ZuSPEinuODIW;55j>0bm#gV;TT6A(e-%S$c3A9l!-A4s z60Su~h#tldhJ>)zEctT^Sj<$I8%z{vE$1d%W87V@i5cE#8AVCGr8Hp7cv1b>bH7!y znd2>M#fXH#mz=l{>4=Z1lYg@||Niy&ciokIpBX@s&8D|`-6EL&yYBwY`i1=l9x#!J z>?KeU#zUiT75Dag@F-;H*xV$@G~LTt{}n-1t5%v8DKJ|mFyw=(-eZsLQj!-E`j1Y6 zTD~#Fzu`iO)6aKZ@a{e|nNanE{weZQ$=Ju3Yng*lg_#oqWJxhG0Gx+g`a-NdGtO!xEN7|O9CHrld5q4a%BCci|E2E0o z4M3;9wys@m3nI5BnVh$6f5_PqNF7tZTgRf9ej8EJv4R;a=RhvbI4nkxb~Bv9u?U7f zRA9e3EZO|cBIsm78``jK3=Q>rijvgOGh_4DLiv3e8SLOG{WPCjH)N$v@Na_ut~Jm^ zpfqMjC(0KB-~gxCCA`~vEle0S1&murIUBB{ge|%sv%rMd^?tjZPzr+RUO?jyOt=lC z(-XN(yQUT5v`i99+AvrGD<^e@ICfx2%xCj1i$2KeCj9=&yJ!mRFdNrtb%Hk9k2M7s zzfwuke5{=loQ4Su+UC~U?EBd%k?YXr-aev{`imp}&uM4qf~Rb8O?ke=f6MuIKEN*= zyPyQ}8*y6n0>(h0emqXgRh?ebx4NYcL7y)9ON zHacp0U#woyJaS>Ra*`7v)#P$7d2Jo(09Fk@#@&*w(GdFys`3-QD2HtxUbT!o7MP>P@(6SC5b>DuFe zZr+~^NQN``UiDG?czTRL@AT+LG$3e%;-!78jOMxcDI1AeexynXg??6PZod+1wgH15 z%AL${gdTo65Ga8w-v=JoAYSX0&0quz->C>6Jgd38y+U^K)yFqEc3Wl9Bh|f{nGAaQ zN{e9v8Hj6tQ5ga5&&raYf1u%Pm%~n(4rHuO$HAfq91K1m*ItR3wnlEIperh$r^2^W z1^Y|L{Xs+;o{4_iyz|gd;8^}yAvxmEBS8jZ*>ZkH4?g^tC#oMoRg||_JYTxLZM@RZ zaeB$aZd2CFIO;p+h=~3~vhYaP)!^d*gXbI8e>G5@keS|)%T0}D7|g}G>EhQiQL(F( zogX_TC)nqrUvH(fdgixpctWT+Ku;bfc%+>DXP^C6R73$IE8R$-*1ahj)dUTluu7tF zEc0KAfnOxt06r)rx6o&&VQ=PX%}SREelgnDQqtke#kzZ_+@y9U2ZBimO!(fNOJsRr|wzg)JiB+cVi{7(hM;7qi*jr$nJHkMHaW_ z=5#iz5%5nMmTs;y0+uQF=;hj?Hh_FwT7Pr=%cnkjOHK3`^53TNA7b zdL4#Ei0@I5fU>sXN8Zm_bDH&Cx;i-TU#^RNCf2rXeSpwx*62PJ_|t)FWP;z}aE@f7 zoD%CeswIeexl@m1>$HwIU#!NX5`G|=JzenFa}Fh`oLvM)U#^<94n@Z05}bH~^@wvW zi$X6aiU!ARJu~?8GQOc`H{IA*>`bm4L}rbi^R)36^90un_5Sg9mEf(SdiLGY1^2DQ z_n#j+TR;6nz#L6zbN2mge$9*5zxe$!Vvw-~s7)5B^awA{egjh7bFTK})-?uqY1yWX zes;>fq;d&<%TY3q%?0X*!@HcKyBmHoK;J8;ddiG(l^I71#w3!DAhTDFtE)kI_Zp7E z9inw_HR*iA2`MR+nIMrFXQ{jvudte41L&=7OZTiUKaU}l^#s-H^6qBwt`p9>iH@X= z$yQ;T70x<8LJTD|8FFV9KG>h*u44G!aJ|`7wps z#VL(YK=YN(cU_vvtES$D!ZQfmSGkriRYWg-B2lh}3+<9DTnxFyS?QWz5NW)@JDD!= z7_`uRZcfDy1Rs|HEhm$DRLIKcfY*Uj>?mM3GK8?5@b(oQGl^Zu)m-h?x7&47634x< z?=2f#u^&1DB}of#lQe1Ejg$TY0?{7oI)ilsEmG zBqu1^oIV5jK{1?OZl{ShO&39L@Mj5l>c-?*Izdx3s`fP`b?Fan~^zlCSxzhbBu@@t0A> z^#ZU1{~o}Xbl@v=Y_ZN-^RSxYx=d)9I-R^Yn{ycUgA-t-EZ&}0*Sj}(olcv=N2h-v zYn@Zyn`tWn04*cR0G6g8E2CKa!KLJ%-5bIeggA-t+BRIy&kDD9juEX{BoT@!C?A4t zd`riVgs0=R2>!ag+KcevK(u3u_)!6;^IZR^h#JPKLDE1QpVn2}Nd14D;d_ zNdO~mwZFC~BubUen{RrN;5_?dc{dR!sPdJUd6qXD?k%r}dV-5zcbiX|7i^-C$3b=Z z{X+*DnCsBhS@WHjupZbkG{wx;U*zWayJ2K65XF!p_j{jw)9Z9^2BaDbYpH^XkSxmz z#hGSa?b!H`Uo>0{+U)jha0pUWzZHzzep*=c1y%L8!P+Um1WcAk7B+Z$+;g1 z3?Ia1K6^%@EBjUaIM#_a6h*Q+)|nDz>8)M7m5=+d*pH^~b2Bs9^s1^ZZq>$Pb{4$% z0-}8dgeudoYS%?eiV1$s$e#i@gvO5%z=%dEejl3@zluq%s&=dElk8O$RxiL%`byXk z0R^~W%6EAme8io_nj@fKx`PJ9GelaDd47V`k@%+LocxZ#r%`AL@G@~M<|qz(&tKf>=p+ia$9ZC%;+Xx>9In%j-<1r1 zp@5CP8tG-d33D7o5&d%Qeb)g$UB>YdI4p=>{&kLsz=3*9_oEQLH=c~2GHlUXZ7xqN zVN0}D|5f{{yM4-SBPYH~(T?1*M0`4P#Xc=G77w*OYs>>of)TIhec`(F<++d8SFn=z zc{^25vQ3j9nR@w-JkbX^t;WMXmS9P2!R$VEYq~!fVr;afl0+BT4%}x|)eVvK{)+Q@ zcbAh#->&Bk|K?@!?!D||s_AyX_3YrbEc^0(5^GvRR*Lq#$5Ccp+niuTFe;UosIZt_Z&#Q^M0Z&dgB2P3>`M(D z-WgKwv--t%=>S+-?$^7uKVO#-BMUH4pI(1gig^tj=uqzThP#`+h?C^4R4!wA`0#Zm zju*4Zn9|jY8%3{b%jWQ^0R6|85BDYX!UKrJzYdzb`QkpHYb{gX!|EY0bGt&^95UIm z%_hwKGNlU5?D7|XGpX~U*IC@^`dtGM&^y-btT}zQNagg z_N$*Xx||Uu?bx9=!P|A1>^0Qa7sEc*8<9iX^c4>Vz6S1ZGu0zobw9~ViDq+Nx)MjF z{=f6?>kylCyFyZkw$!0zqkWOMk5VT=;rlUY`F6+VuI z%4rvxJv98g9Q~Jkj3dVNJ5`}o`rFn6_+ zf^et1KEwr8&X?4Ki-m&Q>T^1cYEEJ^k>M*a5_*k}*U1l5qG6Jt8@IEUq~%yMZn1az zb3th=c6p*l*hYc~_df+3`j+@`F>aM=cD6wydmyf>bP8D})3oc6?Y7=(A>!)_k<5*0 zhz=9SKt@NIkPG=K?G}hTs@x?}mKxRg@e2v3I$QOey%l-v^Ss7ntw0Wayz$mj(TiRc zY&Eky3yNJPKPvMi#8YEC(Kq}-xyle@G@q9cI-;^czFCOBZ|p6DufZ?CH>2&j4STG} z-ENzTg+6zD-Ygw3Qj`&yODT6!zv=cpdV(ix{)aL>h zp*>o~{s-@kNCin(0I{e$8p`F6*yU(M+r7GpZ;`Cs9z^(H8O^?s4u@m#Oat+!%r3of z8H9c$8iaW6XnK7>iOPTMPcmzVuVAR(RGuP6(LaI{y&AQhDA3QDCPU2eM#rq5z!@3+ z*cVjCX0k}#6Bt&yZY#GS34#m>%cY02W2OpXr;nq9Rq}<_yVYr_DByOA?dGO~l@sAe zEG~0R5;Ye=Eba3yA|#JJt{0cTtUY>IzU#xmT6fNc+-q9rlsIlqp)uNga~R(oHf{U8 zw8n(%D*=7^PStGCS<_jg9np#VaF^oj`saHDXWM}%1K}#ovamKqc{D@nXdyQ&ce-HX zwWVzUK;I3*&q^zY{m=;P`hjEY;ZfR(7#TjUj_;^-mz&=Zrkgl;aERD8YDE@geR-hA z!C~4s{#|v`N#SUh#Qx*(Q2LY=EtZ&ZK9}!B>duz&@dVVIQ?jy9lb+9%OQdVl1M>DI zIUoCr0i~E-$*tfQp4E~I-`>y~D$1JA314ba5CUM75b7qb6^qk0Z?T(FMSAwBX((Hj z*=s%KWcN4+ltm!3}aIsw_>mUS3jCkGM<8kzM>7~Ly~YaTCXYzGDRCU zlx)bRKABQ3i}+Hai$f(Ed-}*1&%3sVX%;s^an01n#nyDvKBWVGfOGUGfT~40&;{!$ z7fCS*9|Yu{`f~b>>42RYZQKuTdtyl5ucbOBJM_$uyVQBn zyrO)&l>plF&igDpdfsYSt6Ulu|B#rDWc^wQHtR)8DRfWI-+s)sa{dsAY5y4r1KD3Xx%{xtY`Z0E?<}{;o1fZ97K7tB#;+aYK z&H`-G=pxhYVmV#^vaZJt?^4Lvt{k_osp_JQgtn~C*XL#m5wOjCGlAmrH~oL`^@w+% zX<<1=cCB7i))k)dYz)Y?m$XHU_j6^FwtC$B-#XZyBA zJju#7q~%MRN?(g0I4?Mxf4iCGG>l&LV~dWgU5cBwrZuDteTRIzh$EcM#+ zmC*JHZ5v9{#U7!kHS_PfBg(ee>suE?mRm-{o$P*D0^%gcR6P_*hioQqTJat=IiV|8 zSGc6$_)Ia?s2sDza4*}2ck*(SBl{f7pf9wVdjqum!Avyb<{q|_n6)_sIY6y8t`^Rk zY+H~}1BU?)*KXon1A*;ngS&x7@8jV;e7H>n-D4*{7Dx*1__u2q#R;zeK$)^9Yt}<} zw4~Sd=(&s+O)tm_?9Ar>0TghBNBifrl6?yu@vzg zP|OVcp2PNxplxIGr6?*{oSDo)s$OdU)5sM++}uHRP32zNTPgHfh~5HR@uI zc?lZ4YYjf{ZIJG?>$C;!~p2_zA zEaQk5bet`$;v`u4K1K7??jFKW^KYbdZeBZnpl;-DiYC)_rINQl8?k z^C3~393q~koW@4cMV7e;CHMBs2OPK?ZHoFl!Mt-_Rb8#KJAVd!7r;D}Nv{F7dB!-< zNvtPKHjPduXQw3%4 zO`~b;B^n2qrY0%^2^Nh`5c;vM9JGUXWRhW40A{@jR!&;?%xAGEsx?W$qhKQ1RJ#m4 zF>1PK7e3+zmp}3}ckLC%0vxK02)Il256&Yw~Xe%e$lIK0@=uRsv#Gnm!?{Y^rns!S&`3G zM0io&ZUgAd;JXq(<PCxhTs}Wst(3JdA{OQeh)Q0uzt2K z+aW&kvkSk0Za;m8>TK{FY*?GRnyRAnHaC-Yd8WVUF2OMT$qWN~`=dCb<5fsSlxL{( z5vJa`gk`boFLN8S=g-BUCu(N#>Zv_(pKihn*{#xbcF&@iN-lDfc}3nU+&Y?nKbhBk zpCvdMOUq(clu%A5uQ9tBR?x$}Dgdfb7FhzggtzitRNZ=ZlRSUdCUn#lxhi zqQts7AA>Hr)B+9A4!HG>UzbR{oHB2 zFKV2zBuU~KRnjO-p#~T(kN~m|IaXEEj3&C@RA0;{XNP<6e;oO;eH>Zg5Y4=4t9f~Q z)=b4+Q29ak4gguC4?h^O8Yao3xB>`lsD+x-$CB^}QvUP7suTuKD|Hawhk_`o^A=PT zs}BZGAC$#DIqf+NjMPHN0Qf88=17dh2!FjT;}No++ON86(c7X3(2%B){FFs84mROs zT(u>sbLyd54u)x9UyR!x^dk7W}so*K%rbnP)e^(Ye1d%FJ zzSV6Is}*jS+sgTvk}}+QeKeYm@-p*hWMsji?qgM!1kf zDqN;pkxU>yb1la^!)FlV1SyZ#Unw7R-R27p)U8*cjm)9|FI6vrCa^AglcJURY(c18 zZTJ@^OHqyeT>1&bTjb&=X6wwf;rKyn6aEfud0d8RE>6>4(^c1&B(X0xi5DMtRW{_w zI(Wot(G~IW;QAgJcRz0>B{GE_$3kM&A7L*;zVHytkVCpDDY6qb5c7N9XBpHn6=H8j z1MV3V8~UXS!zqJc%GWbY30mk?10nuO$lY_FS*v3Qy;gM(WRj(DvD|5IYrMO-0c@yk z9w`GG{+iBVv@I#YYT_THGx4fbk#S#OtDqc=eKBiYZ&d>%b`TCPoWpddUiO9W93IH& z1K>7nm}A)5-m)X^*;VJ>HuwAo+^c<=NI6kV{+)gx-$bSi+sO8f5edJlXkAP9@y1dX z0#Y=F9w{PS@0rpPZnQ2%dd^RMAuXg<^cDu1p0Ma$$bTP1%YKTmLj8W#gua!#~hEpb&#pVRVmD_GClQ{vpC1?&196ztXm z(v&63c%s}p6L$r|V=bC|24i0nL1c!$H#wYF;<_Y?pWg)PCDk%m#q_l>hqPjKZx-lt zKj1uf6UnmhDNaHZ>lNv=!jLTCYY=I==COD3Wqhgad zR!#pZEENTKv~HPB+v@VSxkm@(DWF8Tp8b&R#noqC}k+@o;gN-wI`t%^S+v0sJp+B{RDKQ8$JOeh``N=;!WXM+9NDo>z#|t_K$}O=XR7Tl_e$HU zlEhXbHDh7_@iS=X?WfCj&14WJg+SuGKXveZn#?52m>f)(uP~3>$K=4v2l6LH!=~{? zMy&%veFIhh_W<>3H}b@D*C9Q0?G7MN%tq|JGa?q=hO(_JMt-V&@MI)Vl&o8NGWAF1 z8efDvx4)BYq&O|}P-9}r!(P|2Hm^)9u$k=(8JUPIw?wZ1Qr-Mu`X}Nt&Ex6{54BYS zmD8vR@ZBk#rwll2WlkwB!gp^|_dHF{fk2poa%=P^`6MlXGe8MEE z&+t(#0GjwvjEO4o%!RrNo6kF;E0*H-MB~`Xm`a+(aU75e_Dpel4;L|c{kDt7Bw!eG zNA;U%k8!-tqbrdMuNyYMSCHt3PJq{kTDEVHBVv_<+`td|Ay<+M;mPxS(`7hU*F8VQ%k|5R0`1zr5Xu8YgTY5>ko5M11 z{kke1Zalv>VB=(73;&Ga1nn__K_yw!OyvIg7MNclcg8pizg^wumU^uhPWFWP*OjC0 zbLh8~FlK~Ipi!kUV$8%CmnX!r%%Wc~6cmr8Pgrx;Z2Pta>-90)Tc*SisQ?XvN$SR~w7WlI`*szVAg#-Fp zne>Tl;Lh_zX82+BM3j^0aN>Y6Gh08`dPX)tu<`~gI)%5TV~Kp(zUI7{rv#64#_BLz zln>*a5Flgt>5W(OAXH(PT-21VOGu+F(HhwL*R85qg(_cmACb>+WlB$@@MG!+w?sc2(%MKJJqeNqc?RVb~l)?6LNTeLj7FG!Xxw2 zz1;`$r*F#1r|Ghn$QKAmzPL^<|7^WNm9Yb>G#`Al3EP%)cSJuXMdBhuTn8Xte$!g% zQ}!B`_T{``E!$qvulG|^)g|1eS!=AWi1a1lO~mnN6Kos;Z4P3 zL*d!|B2&^Ub(H=mF$YjDztT(WV#H%jX&->Oz=av5bh!?VPA^aODpEkw2+`|=Q@qdn zF;4vIVok8Sd*45!A16=YvkUu$L&=G72%lCGZw{lQm>!QQ=j#WsNsy~&)7ln0>k=GS zTGtG@M)Vw4c2uz^Hry8L5@Vg=u)A+B!U~*tb(Qy}CP<@9>wUVzGMk%7wt?eB8>SHTc`bdd z$x`PHr}SNpH;p0hpZUjYTz%H=sS$V#->x93e6DgT%nZk5w+AC&eH)&{D$yd%Zf->L z8v|Cy5fbjS*H{MQlg+ZN&FgS3Y-1|<((LP^*P=KR^@}&V32xi*&DX|L0JWDT(P-uq zyD0lgT)jd^s9#-6O8(p$wv=aKzV>Fm$^ody@o!jVvmsUQiPLUkKuO~G)(cQayk&rBX<@rWAe9$(P=@Zj_B`~k{J$M}%6u;1 z9ulB~?HQJIQRh0QgZ7?sIjls&;g3j#j!r`B+7|)O{HRAZD2oT1cmS6tt~}#Nv||)$ zd3p}8m?+k0;k8C1t#Ac>Wpxg0%Ozs;Fhej&n4O8r-n?^w(&@ELB)V}}4mClF4BF>s zw(Nqx5)9wQ{lbJcl&pS_j=k7cL0Lbb7gaf#w^}fV#G5==Lraq}HbTpW69jlk2i>^} zJS`^?IbRCkRIPidqcXcfGNGt0DYueW}ZV%S0(# ze|V|;m|zKxGR}3^0g@MFYr2~K27Wr_9S?`1;l5Gs0?>OSAM6!@t#1I?dwny9!y&V)&h^6FrwP^_X=U z+p&cLQ=MnNIEt_UPPdhhevAf5okdPr%zSRd(xVT^UN@5xg!0T5^})D$7M*9U4sMU8 z`|N586t|z+O0A7=dPyZ~@%98FPWk|<(uy6*7->SJ!u{gp(&a$wM>*k**p5MzzQ(}p zqeQ9o9=eFIWTq><`cqa*H%MfpZz$<==HSFoG>P^v)jEyFWmb=L0{Vl1tZJ`j>~We( zdSgx3@zB6&cW5}krqer3MZ~ZPdU%H=Mw$%Y-V;1EX{S%ARQqqox&3WF-O_VB+SI8A zyw$#3`r;%-tB()TaC06R9eKo^w(i)F(1pEo+WA#ydVLndOA}*rfGL#3O9Mgrr-HZ&NncR` zF9)FBB_oL7$@fks2Adh8PP~AJ6b>;QuC2^%1r%7mkpR+SQeI51qB$b%GclQLkt3FL z;0sloVZTb`vT^cI4X|ew((g%={Io|BqZ$_DmGq?Q+f(|lu_7r}9|%L+pFrzvKKWTW zUmd3os2VkqhL5Xt*@iD}d3`|@Nc~Jvv+{w3%tvwtI4NEi)?xJ1#dp2g(pyw3LEpnP z;ac`mAvIL$X?S-uP7_Rl-;H~$^%d;~9N02_z$~irV-IFn`x7#xOOknUGueF03$rv) zfC2Tdvq^*5;i77k#zw^kJU&b;R0tEUV$7-!6-)RGn5@O9T}Mb0|TxuP;^Sm)@f zfvt+6N7uUSDgP|MEPpi5vx}o12`nQGUhVF4s`v!J;J965%1L$9@36jn#Ouwc0WCZ! zO0H?>xHPzdbx~YLM~OBLhutO~UGtFqjBoXbaG|&Q#7@YR5bw>0(r=(Be-&_go?afFdta_&NbVQof?xD789XURuF4RZ=7kI9FQIx7 z^}?ErpJz6h55vol5{zjgOXGT4)TPLtijq_Um5_+2V>l>~9G=>!{h@ZY#hms1$ffxd zEzk^5}A!o?Xsw#;gT+lf7RWW6iJ7f*eLJ zvHw7h#>sYg%0h5uvhe72mDT7WEbRxZj~T`ve-Z?;g5AtFjGRfWKR;?JmQ?peyDWR< zm(if%b{o10+B4tONi0kg#o!|ZQ@ZV~zT+es`v#AJZOT#_{}ep0uZPs#G%yJfJH4}G zZyh>z`%>NvWav@AmH8~fVrZ?)F-$6t?U#GK2d_+la=Q0>xi4-bKWek)BeV*$!XD*q zY$l=Y58(DZ^HB6q8Y}#IgAZ1UR5s-{Sj;|pLMB8%uUvn_(??m@rs#!+=yr}FB-Y`s z3)m*9GfRHezsa2SgYymak0kLv7^%w+C8^?oCsu0D=RO>muH)z-miw^V#Vnm$LhrKZ z<#PQ2iMd|55PI2x`|bs$EYT-5W6}UfEZDfO;;HdcSZFy=z5IrwgERBTEl?q0BXG4{ zj%wBAi!W*HEx7i+tO;9OE_#^$Q=e3;X0?6@y#qxTKR6187ZyLMi6%yIV^9^MpOviRn6@H!qg+J#J1WySKJp_{EDok|)&sOyb!sv=F5y zvd(`(D#?9 zWuanu;!;SiY=$)$$f7D_6xmeIJCF7zw-C&rq)6u9Y26n=v;zj?G`~CZPL>*GXqwU< zLq{*pC?HctX}q$e1kz?fJ>0gFMz~O5jYM$f8ocRGpcVx9rIz|cu_o?ULoo7e}IbCc}|WC}yK8G@P2 zS33}QJ#g)Mdt^ljso;px$WRFswk&qD@j>&>b~jsWK=cBpVe8(m`|RcpNP7^UL;~!Z z9;;2jL%xvoH*|HsnFLGf`DGLvDW;_~kS1s0oOdvZ;>GDWPuD1Y^7)b~9$y9Iyk1Tl zQ)^*bDHK1rLb)O9f~8`}HARZuT?}VV54_%Iv%mb!c}{owW#3S%b7O*HQZIes&dHwR zoVDj8hQS1&>}*>hDr5Jfji(`7u#`*Rk<{YK&lr_(KOcyN!P;k?9Oc7nJ*OWpN9AI? zDe9CinXgB?4BE4>^F;MFi%W`PoF~>AFA4|6)&{E|H(IC&uEypvMG#y8Kyo#A_JvNb z!;lA(Hu5Pm{VbEpYPJh1H?(0*WKS*>)$4E|&&AgHfq2R}k}A8G`sKUznesgruyvH~ zfP|$;|3d1-Vz+wZR_776nn_2Jpo7UcCWmfk5l~lg!+v^JF5ddBpiCYMjkzB4SOJ}J zZ9e|8+jusP?aU2I$ITb-&`e6qwV)u*XzcyK4SXEBKlr&(Mg082>g%=gt&WuV`B3p}u0tmCv<$Ui^{dSqc`GBb?L636Rw!}0DyX@GIwe9`K zfm|RJF&K$ua{rx=7Old3c6+oG1ps1J+XAp33&s?dNs=jgS{m_?i)1v22^nu#MA?xk z#kMWOOO5@$*y~|1mG^nZ>Y#T)^X=t$H{^j{a_q6qW3_cAUWbdsPdE$XaZdK(f_{52r;B z@XfKejc_qPZnF0VCWCd*IsT)&HiC!+%4(m}jp>i>=Zc7{Q0@mr>C^l1>Ke@_g*H;D z=sRy;p?(a%4C5XOLE;?5cOG$(VuF{29ai#9Udu}Ys~K|x3A>(n8^Craxoo1@JY%dpc26gJ$3c$mW-fvEF|xP zAN8n?+D@Ww!M>-J&_Ew}cmwaoR(?P%M)$QykwQzK zjQw#@m8jdc8RBy8$i~IZlrD@s_vPihjnKB|XWAI%DqZ|fqaK$Z!AnPAyqcroH~!|t zeCP*vsC@e|IA}K%v4(0Lhi^oAZr7#FC1T9IC6=wc=wGK>D+|l~2zKZh5k97V3Z0_8 zecHSP1W#(w{~PigIqX*WWpFm7^^blK^6o)T~tbh}L) z?FQ$&Yn#u_rtOqX;7rB##nkzlfQK+8<_<2|Q~>`Gxk$GpKGyVi>VV&8IbT7IsYLKb zL^|`Nf@=h0Qp@U5`gEJZk@P$Wxf8FP1rPzxA=c74A=72W7*ZQKr9Ol%O5n z$1@S02aJ*snt>X=0*iBY6eDK(KrY-~oJJsqTUsrT+{- z<$FbXf!pR}zi@o#WtS(R|0$E{#b|QKq$5{ghYEEE)f`E@GrYktd<|= zoJsry3D!u^Z5==o<3NsQ8Y1x}gIUpfGoH?+T7wFUj!JY-QG&Xeh<=c<)`M?DV9wTO zM)$$|*IgYA*0tHCLr&fyS1amnS+JeV^Xx*tq z;R8F4sTbuuU)jY44jiXb<~*xj*7(OV1bUa zY08&S2hxalv9%tAxW0Di-CqM;?hl)eh`xT#xUyp_uoyo9yc=G`S|n6lCK0MkR(UU& zAA&W#ER4(d5>yQzanX4NM)eN1&e-`Ua2uKB&LqdE;a0f-i#HMJi@qA7N5cE}a-y_rz=J z=l zIq%b_mA8=}6SbtqTXa27zOl>(D#mG}7Y8dmksfuouj$YNg}iliU@j!UOyEBsyI&dA z(8VFjx`?hmwZ{UoKe8d;aP&!r*h-WDjjdhz`oJ3C1R<6ngj?HZk3hV)-G9PumM1B~ z6#M;q9@AhQybc>%E-|nXPtXKw%WgpQH+xd1wRuI-epFrKLWZ%<2q8=5?-g#dRR8H)_u@Xuf$J5>$ z6Pc(?><5hI*_4v|&d%>cISGNEg+}>Mp{8rzW-Jn0G7ARy57mT*&vO__RSM<8>V`e_ z$q7Rg9Z`YIF>&=827BlOR>w-4Zf5SN$D5hywgW{EQUeRXWc<*$WcZvUz0~-=IyiS(Sk|$Y}vVZ}d(SA(`y#?q5_z{$!UR}K4gS$vD zQPa_8f<37)cUo8(S5aWfx_Sdk$R2l_U-By|G7Il*8PXOw-@f!Pd1+)zK+$CX!7QV8 zx3sM1Nj%+yR2XOtqsItTh-|KocFvIyknbK7)nWdfg$Clux@lORf-**;8T;_A6szQ; zY4rHWRR?K#=YMGdI0|OCG~Itu?_IeMCVVP#rIw6dJ0V>y&DlrstmC_rLed{#vTx;l zz0GQWVOKd@VmyVTeq>GPBpw_Wjqqs^#pj#K`9z8)iJ;Hn1i!{zieW#tC~95@fgzUD z*J`Q~$`34*?_)C@C#01uX9mU+VdQPu7l9lG95__m^sTwsuvK))qLBBd|bsNMbu&}@AG$0PK$&cXNb!?Ey z#+|`y&O^r=Sq8Mqe8?GSf)N-yl(L;eQ$15q0!ZT7+``2F>n`>>h=q4lfGw>W>`gC? zJH~YeR&lYNHFQSG`UOzaxGHgA(9nd=4H}NJd;)nCN0DWl*ZZq`246mp zVEC-*YDN}ci)Ap;0$ds>ULd@bN!PS8s<-sRwxTg0KUAIPQH9$$cKa)hXZ`F5RK{>~ z0R4t*Wcs8?=$@7tZUFwBEtsOeq%`qCzM=2k~sfe;ya z0ZKRlG~==XqaN7Z?ZPds2jq8Ho`70-5PeQNXPK%rDEcT~&q}*q z0x+unVuV&B{Q>b5fw1c}BeE*C6flY6d=sA09nP=T*4ICQvO?Xaa*d=es~Vz42Mn`Rv!P z1GchQ(6(aHLfg&DQQH8z;mnteR(fOYz!TGjt)CyO!$hc@7PJQcMr6yxXs63lrSPr6 z>76cDenCC~L=*62+e7UErjx`s7FcB7C7K{5K|=%l5nrlIqgM@%$~anB7-n1+lqMb` zeFh0H6W{>?px4mi#QR+%WHFj~=3K1e02pCfs<&!9tXTna%(XEmsCiC{2HJ0&9+NMr z&5VHcAH3pnrHRG`So^{8H<2r|#?g^%$T`LB{ocD%OI$VD^jK_C`SdS3!!3jA0?#A|9>?M1-mYnKca4${v6*^(?cQ@%29!k!ud9 ziOXWk;$Us4C#S(4FX%yz*+%wB7 z-oy7pi~-osma6$b{M@W3^NS^kK|{^)f$r)5;$=3**h?^i;SONld)Z-KD~+pIe1;3T z$%`J{Hz2<0lMH{3ndX+Gz9>ezS>eMWDFVE1AHIkchPLbUi;^QM71@`A@`*) zG}er_0QMjA%0L1n4&#I&_4MbI6M++#4Pb(G8DJ6=rS33VOM0}+QSG?=h*IpaJ}NTW6>ZKD%4_*}wG2i2h|O z3UK43fS5!v_>T2R_C{biwMeLA2ymvbG^JPJ949H%M6Se+K~cgW!fK)g7G9GEOpDX* z{oYr%TV-8s#OXxS+8!&_cM}nT&o(o$v)sHpnD_Ltx-zy>t?Tayb~VLds76Ax>Qo4~ z+_!yNb6Fhh)qA7PTxu|m^?HM2UiRz&XRP8>!19nh8Q9GK0ZTy*axzgEV+$)n{p0ng zObS}~HC{)KX09|uM00c)SIn8a%W6_K0k-cGk^;NMd8@dg2NsG;07Cm2ra$uImd$y{ z`Czf}P>Nj42R*6afUFlG*A)C$6xXD4Xx8*=EhbC(EmB&Wb6L*&kNl&ldQ5CdeM~Rv zUV^CWX0#B!Gq1CY{F`Z}O8JZZZn=V`x)RrQ=GaAZuDJ7f4!;f%ESMN2xg-TvQ;)uA0-p3yZEG!~+cC~U zvHl$S`KsF}QPnozs9WqprG<79MuU8I8{>&vRmA!%ZHNm9@hN&7evSuTR1Q=mjS|nq z>mjqfh9U#)o_VBbK$G%dhAF#w@Uy^)cM$d3@<#+yjnuhrlK78f^>V+b-2p1={kwBw zxHQ$Z7xe?LOKcU)ZHE%3Xw2=>dX`(w$?@@EpVz$jL_xkQknU6#DTX@7PWvq`_hTO% z<#T3mtXo970%w7`Xh@a_njaO-NsR(XhpX4dlwGFRfDatR%^Dr(&yXpZsED0m5=s|m z0;YSXF;k;H5PL#k0<#800m$G|t*Se2gHRW4puz&{ZoM&H-(L72&0C#KUq2G8PylzP z>J_hW&{!aF^BCwt>Ezxcr&((vG>JQm zy`YbEJz=9=u)VX;uyvGBZkP7<@fQwfZLKDRc(Y8RXz3!eQ4t;aCYQ$QY-YrkiI&&}1fv2o=^3)A znK^PlTB1~=E!JGkm%AtA=Cqu3l4Wz|L8l#0;ZkdDb~o=+H>%V$$Wj*IpEJN(2}olx*xXDM*cm*xk540-S^pT%Vu^j8i!q0O$m+Rc8~Lz>_rte+8*`BG4!Yx(@t141<%g07z$f>MvxhtQMy7 zhW%2*FNrTLhu+@Fxo)2zqL?T5(2GQVcH(mSG9}(~i?Edx*eDkxrrrQ|tGZ45$RRb; zc;PL{6zhl;gn#Ek3c=kpXSJ#mK>T1KSuLiTxsj*krZ#N|B|#5_%6QDmMaK`w`cX;y z#3pSCrIsXKp*Ip|EFv~4cDjZ5nqgk+x&sq6=2xq40 zW`VuTOQRk9JN$Gzq+wrgA(#>Zohe*|Ejyf#(Cs3Z(B zw5O@6K?}D7M{2G3F}%~;+Q&jBXuChKF-My}J2C~fG?7VXtZ$`M4hjG@|fo52WsM4nLKPNwfScHzapL8IFqRdOA{VLXp3? zQvRl=m$g6+Qp2ldE`TqG0xJLsUyl?CsHb~Kgb`qVgCqTV3lT>3W8+RC?rcLpReCoW z0{Be|B{(OatiugP#7~ogrZt>`7H@K@SA4$qUGT)-qb0^Z#+r_(@Z!R_ zx}slzMO))(xOZ}&y$qkF_M>4c`9reQE?eaU*`RyVMpW+udVk z71(y1&5Fy3w|SnY=^NnrxU5hErKF;RQ`6|nC6IqkfXUA^82OZbldl^|5fEew0o}yC zZp8F^1XdBr9_kGhP9JdmAORlD(xo%a#z%9i%DC8BDC>D^K4t9-km*Tf-o3;O#|J=t z6SmVbsQbkfDemeUd1sTJim3AI<6~0c6Gtn zQgI7HP=PNq3w32C(Q~^^2fYz&DeGE^U)r1)Mv1EqmuAaR0gx@FPC2m`0lkVKtBh9{!u`a(N2^ufBw9uU>& z_3i-FZC=6B4)*vL0b(Y??Wzx&B_kWjTu}KOo+C9gmJ+gA$&_KxJwXSvxM=#=u7Fyt ze$!yNc}1971yhCWt7dVoJ&j8#^8027#^#ygJvCGAx(2h}V>enF$QCzf+=+quYy7*zp!k(QIrAp9nsZ$4LT)HchMzo`_A?uov(J zq!~x?P>rm1jF;l3m1d}gyW3D>@uA`&6R?DCuvK#KQB7JIKWSd}f4-V9PlL+bo%5uZ zTkrb~;RYE}Z7FIc%}-`kLhtJpF@Zz#$wnw+$!!B66=PW; ziEf(q0)2a?M5e^tJi|_+St=o3ZBIc!)m;M#l|6*OUg{c%^$|pxa0?s&3^xJ3r+ae| z#qlfXy$C6r-iH%~TH12kfx?Ez_i%W;$BP zEf4~_W`H2!EE>;#br;ML^MmbOal8n`!6g%5hBCM3BNa@~=kIrL8)7wc>3!QOY2nMx z{7Q1r&o&h{TlGHsUD_Pj;6nk=Q`}E8%T<%9>dep%rp`=9A3L`V@p=1-9i&goz znVraC#4v&zoc*XMI(W`#vl@{5H4VykB`J>mCzdCPs5BCtkMOp?yM~lt2$v zpXxCQV0hyvf&10SMB_w&FAHgADb7fZz%1NPA$OtxTv`I(RsG zS=h?|oHC*ZJXbS+e|WaY_<0=Sj&T&suKo5w^IRaV z%f?%G&gPaz|GM*KC*R^p6!)IuoHKpVVjKl}3lL{N5_&rWfsR#?cBof5o=!vP?>}F8 zQDk48ACi9kndNb)g?9*$ykFd_PCO*Klve|pj%QNFj#w}$xEd2Z6HB@J96D`iw{I-r zh~fehq~{0Z0!C!3EF&-1NSsC!NFj`9#&iOyXQ>Ys5p}cHodxq2?w=EmY2oJ8GietU9J9maTvfZp-8FE48z0e_c=l z&vKndD=izpAFhd@RnksOO@FREpupDC74x+G`{mr3me2h~p3y5x4h1}b5~=dYBFI&; z0xaUlnbd{Wedq_hv$Snj?M>v21+*l9xzJ=hrv}f6OrqpJLrMdyB!ewo$}Yaw_?fo4gcx8XZ6J*nV;CwyC=L-rRFVje**44wCB4rK5x$p^qU7`bWwhgQu$Y zmr={QGHh27(w{FE>-k@5k*lpdy)_`+3hmf?Bs~FP>j!3Z3sFwCj5B77N3`uq0P&px zJ4KPoh#8~Y;O_Ohmw3w$KqxHNcmbf!;j}<$OKkt;WV1Ff*LOLjFn&@g2jS7|Not=Px5q-v9yyyCKlzq3hFL{R|_! zgbyxD;|ktYEtlc2;)A(nC5w`L4iEXPt5p(gNV=p*7>#u@uOBZ z{ctU6FFGKBI#Y|!{chDHGV2vQ!TADr?ka!hCAUmf&F<^2A6HdaAKMrLWvjAq9xl4c zQK)kf4d*tto>yu6e6Cg{M|ei)$&|r41H@U1p+yfxd;NM0PAM#0eyq|i*}B=Sd0jn) zV+y|Se$?+{!IvEY08N(J4DV79w{9@Yw!6|kAUA{PWv@;rlI=qPa4~4Xwyakh z$L_&)6lt|gbK#n9U5Do?X*$@k83#iG8Ju*%JO><=ee?<#`H7aDAYIB#{qKtN(WUtk zqs~*&Q|1F%97i6vkZmLBcave*bHlj$B;pG9mRb`XaoFYn;|OK;x+ZS-5>WYg*hZK0 zZz0E*{;+$vchhWM0&PKs0Zmr5-tGp88`^aBw-Bzh1jv)~;3pppLQetJm~cP(?R&Sn zh(O-KTfOj$^5j|%kMdae#jgYBSvgGNzaXW|SrQWuYFA~AnWG*Sc*mJ$tfVJ>n&>~A zZv|_+woS)eUR*@~_^RGR2+A*FExYC@_)Pkg?)(HH${ep1jaJKuZ;M%Z{&dl}IoXWZ zsC^fkU!ryUCG4y9K#+2qDp zl;Lw0v+84eU9&RRREaps{!qi}L*5rC9A9*lmIjbZn5qZVPtIOy=(CzEn7hn6^wsDw z=0x%UdNp}0$s+t6R$Xe~^V2&%0i4v?K2#33)AbZQAQ8#x>-5fy52`gPI;36?#6WsI zjvuLCyojoHa@PQ^kSLSk?Z;%EH}dJ673a=5F`K$!Cb06?BTy{r`f*@++{DYr2*PMB!1lxBPeWM1xTFbm^*0 zkMOGeD_OhUkJR{1->u6Q0~Yn|S|l?BJe(bo71>x;r=lP{B4l@8*49Vrz>wK!Rs{YI zQokC!mtTy#fnmN9oKZ`=DoCLir+ z3l)F0F|RFB<11uDcQ>+Gc5HQaOFw5fW7p!Adv7(P&_XNNG%b4t1XK(0S3+fS5dDx3 zhNu>6$8cWTO*H{Z1I9JzKrT+y>pYJ*65>-k`(@+(4+=*FliK0u&7T#mYR4s5T-iL9 zPUp>h;!iTQG|=PZ?4mJ#2%0UDX-!KCp2luVVQbu75wq2u4xumi?o+uLUOvlW=n=Iw zxQu7rDFBlG1ZfQQ_ZAZ7`&D_ZEVAg?+b2I>zMD$R$!gD5M(nil81O~hPbn#p zyOM2Lgv6F)d2`LP;X62Ue)7D@yt{Ne3QU8ZhYQzeu*?3GB0=JGx4M`W=d>Auo3jDZ z_4Rxc*;^_bZi?m##Ic~TW<{yEw_k`Agc5zvYOWOMe7Lg(kGei_xnG*f`Jr$M)Po#s zkIDoiOf|xfUIN-j3}f@PyI0i${(>Q&4<1z#VO3|7Nw7RiBm&S4MD0akT+q2$H|f$y ztCDBp{pGo-mR|fG5F-I(M12|jTMvs7**mJW#T!%m4*@8d!@fa$W`>+uMWEcfH)qTI ztUsSBTxvd^czF(VsEyn=n8*GqoNzCZwUMjeezc2c`EdXQj0kCqc&LzI!Tj82%(EmO z7~vZ$CXK^-vX>sO5=@hwP6;=SrEy7K8z(=J2?gL!Om;Y+1YCrx40lPKs1veU72Ixv zc6uEByVaK-uS|>up05Bp3=$37xe==Zvo>w_xt~BmcBuqDcPEAe3A9Q)o~vQhN!B<4 zOexZNG#24G@PWuFT4LMji|2*7^lm^Rs>cO&#EzU6*Dd+o`;x*U0JhK7eW4XHoSp51)-H1aiJ+ONmU~okq)18`6AeeNR7UI5EKLA*o zVu)3eS2T*2mYv^y>2%KaFLG{A+V2SHcfO2pAzc1uH;cP&lsO>>Zi{o?%^(R?@?CW` z#Qny-N;NL)uewO=A~QWpw%;zD8$eBvHeiFiZnX1%ZV^#d+soYmnB1r*RSn%I_1L<< zbR+S^$Fg;Su=)5WL?nt<5)uew2o=oAB0zwaXhHVFzbnWgS?sMiCl_~tYZ2;)jK!Nk zg|@?8v*WFabV)=c0o7dfsW2m`6e91V>WwHAX)9bsF!f{lv($Wt-2z=oLP+N5$*lLI zs3YB*gnds-uLl?JqPyF>qnd-W!KQn@;X659sugS}e<3q8QC?{R5&bIwSO`{V7I&5+ zIJZ!IMBIGS`XQy4EPt)yI6O;$hy(>xa)_b?Z?{v9E5qe$i_2?F*G}A+jAQk^`?DE` znO>bkt2t(H&pn!dN%3Bjq4wkPv{j}G@Xqao!w}Ghu$Cx-LMkTua+gLCQOeD4_=qLE zY6byjvz9+d-)mPTdw_Ab>`3s)%Zcy303J*_fKO=k^F`=M1Wh=zGWKWV9tG@77NLQv zjtLS0sixNcm$ZCmFN|4wc<(?g(sNBs-1#1<5;)cP zHq9(%cLO%PPa?EnQoKDH*kBFzKhfvTL897kjGa&MVewAqM!oCe7t#+^x;aqp9*#qV zkXIy_v0zIcIce2884mqXN&1TF92AMV4Up%QZ$*7mL;6NSm|d65(yfhbHDgu0r7?_+ zSZ104^II~H6>jy!`TpJ(%kG@J1|!rr_xd-;Q-n!61)s^ZR9Gj9WXmIQIg9haWp3)+ zO87|+AX0=4t5t(U2NTYXdiscO^Dgu;S?Q)lFW^ZP^EnP6Mou+LX$&xamU_|1fa~q^ zC^oh{^60$4rgHHx9>EnNDxxkcjxfDW>w@RJ32NW!wol#HafnJy?~GFN!SFloO57AfXF!%oI^sQ)f>bV(ZD?Y&8zcFRx|Si2!jVb9)-CS* zadKccIVi*m2*Fv7$0*{eChEy=h9fK^MvyR!ZLE6Hc`3X5iBky6u+UiYC9;LyfnoQ)aUR3g~PMRf6Vh8ei zt=bT8;9)##kBU)wcgN@@V*VDVR~?<-!Ngfw-8a2Khs-as`A$1nE&Op-$d+#7<~8C) zf$EO{>sqd3Ijq{g&vE2zjhj^tUEl#1$bbm1_8ROCB?__HEL zGPS{CdxCnr^hcd2MG7}~_Ob}eCc11L_=_imD6Q1tpm!MUToLPTJDI|^h$2)KJr)%M z@_Um|za?;0+OS#TOZbLGJTJ=FG`5$Cvwu^ob(gMx{=2J&b z@W!U}^WBFx9saPgS~22Hy|N=I@DJy(K~0;Ubi8ikgI(Px3A~`G zdn;oIqD|LhrhRq_-5g}P9VQ7uK6#VQ*072uhBEn%t-TYmLao+I>8t4=ZuxgYlg`hW zu&fl{3-YO6Pd&n_m7R;Ch-o`f=|SJt&B{z$RlteygBVeRsMFF zTC5WBtY+m4Ws2UX@hldBImBQpTp||kLa@_N(gnci=^ot7Y(GCXssBJVY$N-r>=WK=o# z>4UDMFPTqsneFN30&2vg*2<$~^oiypK~HR;w$C4+D$$w&mFz?|M=I)m&^^jT)+k9TywhJwUz8e|dhn8U$E5WX)Y z>~Ray!e+5O1M-ifhXX?a6{8~zw~@CmE{ILY_Y$5`?kw6r53zRWtY@dz*xyL8w zpsdM9tq$I8KtYlCHA7$>X3?}2iOfz~Aa zie`V5kt?S?L=S5X+D5(P7O5PyrZoNRU-w4ROrC>PqrXOMmMWG&mspx{AnG^!O8C~b zN}6sPiEH3ZZt2a;y~#^jn%7>18{*kRaT1u>*!i8Dpil}ZNtllya2!d7bS9+0wNTve zlwdk41gAW+&44y!g4LmY(Ew~Q^ z>;f>AQD|xEeMzQseN{(jpS7<$pO{C2BzC>t&QPA;x@|R2vPf?#B`;%j@s(QDeQJy{ z=2;;1{iRg(EFIn$w1`%F;RL@q-fKAI=M{9>7C!dTf#}-w`-@}cjRq&{t`zVC%@Gl- z+-~k46sHaLF%1YL+v-2~Q9Y8}e-kn#6zOH`d0B}puBNvl+vDIb>;dH{TAEy8DZu0wH?4 z9exWus{DEVU`EG01250aih*QJaj8FP$XxR&8>;GpPpuVvymJHcR-;6dt||A-Ve105 zus!WAPY2~);xnzpOhise3a=!9fx8u7YFIWvWi&WaGbA`P?D5iEX3Vs_ZGfG`Ze9p(#-I>C!#?O@C0n~O zh6^~^#g<@34d+M*z1e3r{rQd|gl`fhFMrTHXiYCxI^08?s*pEuh*t-GMp!-QgoM@u z5e@<1^lmf3m`sa?*Ni#Y7vlaVDP7!6uKDS`GXv{9GvVDMyZQLCzD^yktj9n)<)6CVSCuAkg#>S^dX-F;{d})<-p!-$(52Q*!-AoN}`DcUzjsShs(SeLi zgSuMu{Kp$(C+N7@m5jS@iAs@rBjr$Cq@xG@z*$6Q-F)f<;-=`;uoa)UA8BGv!*~jL z^}Xd%^bEVY8G;O#1x1$2zCAbg4WqQnr(c3q02N7uT3lE=_EBS6JmNKzEL*CofZm4x z!rR|-B9Hp~+a566I-xt;KfqL8ia9-4^v^LZ3ucYz_Vyj8IkF~-X~TyMou2=+Yj}-$ zs5W;`_oH=yHKSnOE~QeraQ?RjUc!LHrW4inOqo2imaBA0_wStY|>~26u&KD;@*Rb=Rte4nA-_Yj;1u4S6}!&!CI{F)Nq&do#R3`Bl*XQ z0@xVsc3Eu-;zi2}{a^J7LBVJHbq=0p1Z#@1?XDz%%CSci#4a)fy38T-2NibUM_e0_ zROK*zHBi{1p6}@5AO0KDomN-!ggWntX7({xtFZ`KXq&ZouZYxJJ|QI;D}0-q&qx1t)-`H<5;`?W|f?2nev zUxkysq<*t+&A%Kr?xA{K{Tmfrwy9x&!Ybe*wq02H*0V*n+pw~&KZM1BUOvtWa8JWw zJl>N5Y?jEP$~PfD>GJHmP!Z^B`p5|PIqaK;vIIQVQ4eE#1^ft6GkHsK?{2#*B);Fc z*ZgI3`#B?UE4&X$nvZ(<+dbK=Q#wQISN(9icanHoG_S z1jq7^cXj@)iax*h`46(v6mL`80}-)cd;p-1#Afh+y-Sty5mKwZFm>?9XaDxC|Mai7 zzU@E1I;?5Q?FTrVVE^gkfBJw#3{caD9AQc9?|1iq_4lun@u$rIcAGcZV-+iA!_L5E zFx9=I2LFFvCP?(RvOb%5pNu^;|7%_R54!SC=Yzyg@Nrp(`cZk=i}9oUr_C`dgR*=c zZd@&3cEeZ`3J&p%XFUBqxDY*m=HaM+s^3cUeGT>>}AG3 zef&=!FpdBw+IY{~o#Rg*{gVfB$bTzf1()U+IFk9lo{qmx5^&i3wVGN!^XTkXimLyr zw&V9^8So9{_3we|Rlw?E#H?;PAk&FR`kj{dC%yd3DdH|;u-YBwXMknSzC-JbM)l8^ z#{c}UKoyh@su7Ec?5iHgUxh#&-xvTIO-B|&F2DW3?-F5lv95Qp;$M|B`sXk6d!YWy z>b&=<;urf@tLg7A2;h|b7sEfM1`|&ukAy`f$2^u_mcXF%cbDeB{@lMjh`=x~Ll&Yr z{oP8om07v}>b3v!j-9jl0c-@`JZYgNl2Q5pxV7;1?l1rr z%j4h=)Zz(3Tdk*+`aqBticW_hksTj z>i-|O-#hx3HQ$5p_sHFcOXJS#cWpY;tNKsZU>}A7XFMRZ#3<)_y%Hj8&Ti=v9Oqm= znyGT9C5b1#(J1$y4vADw$`e1TlPcFQvj5&$@Xt<&p68G29F7Vtm0OQ-_OYbjKMvXQ zFNh1#u@bgEfzJfrCoz)RF(7$}ZAnI_{N|a6IJ%P3(_g9ubNI>y(pdX6ggY(uPyC*c z`ccHdeY*N}x5=8`($q4zxPi&IA|Tj%I5ILc;>}bKVLL;@GJuiuMPzY=i-Fd7O`N&PoI_-8LWo<(;(UVbXc?q=0$-Kz9&cI&@wotyNy8%uHQ9(qL^ z5YO)!{_lV5|EBq67Lpi7U0%0jD~nTH&pFSC|K{0$d%SHWmOBFAPucN-{n5Sk@66Mm z_2L*8-4)1EArN!2yCJt)wTl0r4mkPo@rsxmZze>}GwT0zv`G%I-Ud?w&VTDH z_`3%G$uG;aFjq%Q$!e78pTe4m;u4>Mi#{go8UF3uXZI zsMUSiR#w0x^dC0%_X8@NM&2GwWqJ5|1K;Rx-TseHJ>NYLk)WrPmBlJA7h}i&;h6ie zi$AWR1fc2`C%d%D65SH=|K)i6{Ozdo|11s1HDHhNhvoT~YeYDW+7^0g{iEI{yLt5e z_fn-O0-lLGfio1=r)(fb-NrW}A|iodL2xLqQfOD1M<4E?JJ%;`jwh?);b3t7D~|VX z>pw0KY;Ixw(`o+unR$YB3>36`fHGMxG$x*IjVcBqy~wRG9i+09-xx||!^Xf6`D(wB zOQ%-a;04Vp?LC0A75TlxB;V0}6%g>#^3$p!@CW{3{DoyOuYvLrmffKks=03vfuOF5 zj9yyRH&An0J5V<8&E9lH-r+)1Qwt3yI=ZkI^s+#=$ysaRL$;vT>{xd=0`dRkPA!RS z-yBZg0i?XD-#cIIezyejimFw50%eYD@S0^-GnIs9yzh(UG zaLK2I2{nT;6pLrS_;Nb@_iyw|Ah$ic6hMk>5WOPe&-WLcqp4Ck-D#DROpJ{X?J$9!oA_`F6r?x>3G5Ho+Ha9@5V@0 zD$-`ZgciiaaStxH>Suo6EdIJaJ(}rI%t!?BdAKh1cylyV($Kec91cTbr2) zjB#a8B)&?A|FaUMJc*Ap{m=epFw7wSZ1G4I6&1~wloJvX>f8!rKUFy5MFF-$Ty%R2 z-xUofe^ODxp9uQ&Bco(*5kn5b>HMhNGQ0z*Pnf|2oxfmnP3pUX!k8xF2$ z#C$=R87BSYd(^r)2lG5n@iV2Kp~GRNg4U)j9Jaq2Ids8JU zj@x6TJAr$^#tC%7(O3s4LP;NJ=Id>WK8b})OccoK(pGLslN>%Ey7rP^dIpQjQn z{$uzrNtj6}war6@&$qplYuZ{_>BCOFlj5f4_bE9+u)(@Bb zw=UmGDbxgvchOXHgdcu;W0h_bfL(UY~b^2(YnD^$bU*+a6=^sfo+vTNX>Zu#T?x7~vQaRA`2Y zL`?tz-OKFCs1TVg|)zxD0 z2pq?oQ&TrgD8ziUZge|{_UdRQ^%hS6UE8HVG~jf~cs=4TV;ALRh41dVrgVEBA@pT^ zb0J;1ELq#4x7j$V{cypm~m0Lp3Y@6-U7Wc$+O?=TTuo` zs@uZX!eebNyHjE6<(eXr(L@E-^L0uPvtgZ5wA9`xLRp|{BE>x*hhKxrePS;OoTq#< zo2}SJCktfMSa{KZN~OzFmFeKdc9~^jANfsIv~+VLB@gGulu?BGt?sGE~5=wlKA|+K>~x;1aE6w!pFr%*)OkgKGBM0D@F6iiR~G6zTmnS{$^9y4uX(h0mKch1pjI?1od)Yy z7u4(K!|PcId?BCh&r4!(-M7j(u*u0%x1Y6DM z-FH4yD7<^3YU;(I4qX}7_`-TohW&+iYujL@GstnZ8_~_ZFNQR#hBD3jP{+ShB$`NI zw(kvkll=ygd@5^D>;0v6qvKB8i>@+_s&|A%!2!!%TY)e>a&c*Cqg*y|14Sk)zQes1 zw@r|BN{^^riO4LrnO`Dv=hsnKj?a6rs3?6tdr~o%s8>m-k zgNdY$)#N2&7i$-6>N$ul%}I`>!_0U{7ZenPr#El4dJm0)l0lsERa>Jnvy+1z0Bbj& zR>(75IeB9*g`(POj@2Eg)mMSNcp+|h-e9*TVTt^sN?#}qFndbF8f`tHh>dRFZv|w0 zY{CwpGxV97I8{8^3Fc&AVx66$=gD;I99Q==uWI(8K9=|X@~0Dd$@kGn*j(o4TwceD zjwUL;T~te7okBS8Yl1GzXC;Y8e3Fq8XqK6)_^63O`|_j@JQ7w5_+}J$SON7bcrPKh z@aFwm+9j3YS0#gQ`3l?w!uJgM!&sup!@|RJnOd(!UoHLu6qcq+)m}?#wb0%FWg8;% z5h}!zDiyZz;a+ag?i)WI5!;8jXH!`!fk%C@2FOUT3B-#jGEAORLGR8TbpcVy1v&v% zR#xfz=tUZp?>ocVL{QhW`n6_jO(tI3W#6O{(IBKBt@THN*-<%t4zbej%_=>4;#CDH zpHrLe=h;waF%1@#*S>o0M;WmP`iKbsL7MQxPjm;g5^)JIfvk4W_&JtheqQE0XT!q2 z9WI@AhSk8Dfgd=M*!H z<4Bf2Miug(!2q{fESBTjKwlT!0(8Hy#xN{uq$iU(ajKXb%c zO4RE}1eQu+Uc63;U_}bLf?#ND?*|RmI?v!W+R|Roitl|INnsIl#~Fwrg%v>*q+N~Y z<8s;`Q&3l`EB8?@U9IVVlar(9ygOT7u6w|oW^bZeFv{<0_!zqM?FFy>EoQ|M7X3pdfo5*##P$7oc0*j{LNoc^d)+FEFQqDR=qRR3 zVFSivg;4JPcjxtSghhS}*C$RCaDk^+rk6C?a^|W&27<>kf%&j$7wR<$0rq}8m z^la5-B)`$6Y#}SqlyR|kbbhS+skQTN-zkjc>#s#RjmqK{v{`Q(kE_F?(1@3&_ATyC z#RgA}#f_tojbx*u7btyc;CJg)OOz>BL~1G3N|b{DBrEv~af8}6#~tNVbD-iAD5&ge z$!BR{ut1ZChFHx;?fbDiiy@1nyV)MnXxH~& zZk(Ka0_@FKi!zbB(?_(ysob%M4Z=^33_{-{l4EiQ)4r=M-na4h_eXGGIo>D0$Cq7b za!DR&<32htg35ib=aP@|`sqsL-!HJz-sKE-J#Ont8~3UxdjGbtJeA$kEojY;`pwj8 zui8&SGJ7lUD~{g5-( z;WW-q_8a?KbGGAZWi#U~9xfXf^Fj;L%rYs8hrKiHQvNHylmnmSS^>Bn`3Jr8aYB{# zRiXw!^?FWFMePeST{O3Gsxggj9`*}IgCU&~OG>rwy?SXp=(f#aOem}CO8z%Q1mssX zOAYd$F_JH|T$d>PM1!955PZlGz><5~8$FnIcQ32*4XHk#|eXkU5?ua+2kv zF&dUBcCQlC9(LJQ0}w`sJ9kp)mzOhzDBGU1L?YDgKe5brTSlKoQh-|S8mGK zZN3?@pmV7wXf_@;n3+tp+Tp#rcUP&%8Yp=FcJLkL_7}xpFWM^R&zBAjcxN_{5^3VJ z2aTJs@H_(4t)AzO3=hs_+3(>JJvblypd2(hA*F?Rra?JZW2({=y}`-M{Pq=4cq}B2 ziJz`B;HXrs%!IXbypXeGsf2OG_%&M4=kI=Bx=dNIX+0D@=kkye>t zUm)e1QGOUHpZZ{hRA_C$ZAM3XmH&resbnU-BtUDwED2pk zgR3=Xv9>th*zFfMh}QzCI@i5 zYT9;YKj-Pz#sL!iL4b3v*y3@OH1nqIyz@Cz-{&Mr{FRk~8YJ>3^X8?E-Hl)OIK<-J z3E!(gAEYCEi+8;e=JWZn@cC7ukCp6i+wq3SK=)DPQFOo7YQKs8xM_cWniP?A@det# zZG`dSmAqglmQQlla7pEL`d|uAo|-z1YS*k?Txgxs&BTk6V;nN@|D)=yqpE7dEncM? z=?+1_nGrI=R=_o zB|N5<2(*Gmn9U}Y26IYa85tQxJPI!0)}oKEHu|zr4LaGq6cl9!;jgy34t3P}je_zYr*1 zDTR1zjeP%NK2xFPI+i-_RRcTA({u7fnSas4lJy7g4lbNW_jY68q}UbnR5&$ebj(`{9$Z-5Vpo99 zbtUk(YBPZ*3bad-ADf-F-So=m^M4Br4q)^G3)Xokx})J0Gm*hyQme zy$pb2We;-hKG4tfc@uI){-2>55IE+@gR1pfZ4=}-9mu4qKb#I+O3KZbAj+@O$F}Yx zo}$%x`Oq^KFx&=qrw#=Rq56ob=J%K;SYy=W^{NA+c3Y;+1IBWSwv;yx8ir!C7hVO!rCE z2N{Of>+@aFl4HC-fulOMPk+Hz-8Q$6W8dg(gbk7pbQRZdm>&L0v#>!3v8}RPxeDY4 zm{AY!YK;nMo|;nSaWD04ipx|+xdw0w@0|&;WSL-c{O@&ES{#VnkAIEkvo8R9@8y|v zo4&QWJ)9e?w7Xi_whIk-R9G=6{iytIu6;$Rs5r(k+p?@VJ)n*anz$EE+~I}zaemZA z8%#OW@(xWHeG4FxS2=9vVh5c`7A5IA*i}d%p~^-=N~wU0kgNpE2b}qY1Vl%yiyj|X zzP&^8W(wIDGcwQIDCrH8zXWW#E(bY+dwMMhMCrdpRbM(Q%_dCuV)!}P`=~AjLf#i8 zMmDCF!5@EbRorwYzg)J;1&NBj}{5^*82Kn~bEo}}^a|{^E~*YF z&3W2Q{XZvpkr-5@>h+ug%c#IW|2tuMV{<4zX%FuY?tUPB4^2!I8Q(%8-7$RB;SM#oIa7k}F2-oH!ko$ZKm(V}-yNbgV&e z{-=@lNd~F5uE&WtKe5^2zAF9j2(Gx_ejI16;UTj3fwO<~X| zy55_VNoxx!uU(*wUg@GQz=z1%FLKQk@wEFP9I>&_++-k zFp`&e&~Y%LItoYbyrXgXxpY71BVuIuzTwWi@`40jyVfvg5oA%75j$^c4QX_404 zRV}M$@`(2y#+A!X2IEBeKMMX@@AOGRN@0|p{K1tkUW~+F#V$_k3wzdx-=*QGD|b1; zq@9bq?x;MU4sAu}de5ld)XBo-pO3NkGiks?=;Me4-EP_5MfZ=(vP_Oz=k?w{G<4Vc z$yKE$X%LtI`QF>ZeY0Z~$5}Ml)YJ5^gO?B&qqp4j3(Z_3I{M94ttS2c8;x8VuG4{} znVLVohr4nLB4k)Z60h6K8r}MQwku8b1D;`xRv|~deG=EWFTjQB&Q^nD{hXv;yUX;E z-skf2y~V`$1pcN#U0-U$whz>`wJazXKfnF_NekJT?zt=74Y)sDEYFg-sMgIBIyZ`yDn_BP*Op)mPdsNPq!sbX`}I2|?T&(%W&WK#-nc3`uQ zHoO}Z*Qi%LZiB8l~Jbw zU&AIXyo`p3$1(Zn>EWUj&&Y3s(ercV#Hd%^Mc^8!<%jPR z=~jA}@Vl4kmyU7QHVpTcp%PB9M)E!p$AMSkXenImJd>Obesco4qak*(zTc z5}e)4cR=Zy4Z4WI1=R_n`P{O%4&UTs8O9zE{JRH;;#Bm1X)w{9y0x_gGTmpGh&bK; z$>0)PK(B6$EE6o3W0n5X`u6T4|Jc#I6|HBDzPgeZca32e{X*5&U(b5eJ=-6^Yw)|4 zEKLDTv%9Ua|E~2{;*ns5y|EO@4NXmnrt=7ZrGmz$o@RwRg%&3z=yf)OwU1HdVvLNvlp=9 z6k7?%_x47%eds$2*C-&X3_X?LKN-i}{Ial$gdbnkbg{u#i3- z+VE~X4A)QBn~m)1lMf4DzQ*(Ug8K+Lt;vV`Xlwu%@w!B}*;WcLU|f7czF!cD1av;@ zr3-pD5DV}zZEhB|#`#|=Rjpgx;7lq+LJli7v$eXX$%JG+_J1IB$Hv&f?<}PhucEx# zua5^?vJYTReo{^lRB!cnh>nd+X?0PMM2|3OC(s0>eY}JWrW@LTeiONaR1k5LS&0HDs%tfWHs$j8U5ml9iM~d+dzCt3fsbP!_fI$R`_k)wbdxrb+yq&n zWv93%X)zDU!SjA+kXrrVK6%s`Kk`iTN*^0q?j5Jk5L*#Grju0o`Jf#v3` z-|v_CPn-N_HU7KDVC`~vi9z^u1d}gIW~q+za<#M}-p3&{ znZ>O``$3a^B4lvW_2cc;oAm4vhgJ2p{YJY2sl=#df2mo~R+L8g-;m$G$8VSMjK&Ld z{um`oGrz3ki-N?rR7YQ5;E!s1-ts?-r&~>w#gA597trTsv}z5S#wC7j1gQ_R)bhL8 zbO^j&kcJ&=co6sXwu&nCZ?J=_|2a^NCTXa(%QXoilg~Hr48ZM5u5Ut;4#z3-b57iX zg8Gb`xrqD&)gVtuw!j44FNAcOh-VvG4G!Y6^;_6?AiHr-r;t4 ztg);NG*NPdHW&puJo;+kZ2wTv_W`;zi{3}ekKjIB0revDK=pU2atUx+s{ukTA{=cQ zdibXgw1+G7LdmqC;LEF~PGGI4YLN266QDKwN(Gi_nY%9(3VPLMb%$$C>oY7@`Xb{Z zZ#3iFUyaQAqMQ}Gcj0yZBp>fn?f2z*g-;jLSQ7^2q*Nb03J76usI zmdtU<6KF_e;yQe!MU}{+GiG^mEjNnzN5EFeb2gJvC^o7@ z+0Og2)!$@(B>PzNPU7pMYar$@)^PN4QeYPKwQhHOUkIG7G<6vV>t)e>jj?a+w{I!~ zu2M0O5<-b2;6xoe;6)*FumB7XcEk&C&&z!#o!JPTT8S()2KHd%BOp|z$#<#zSOlsK zpDCWw=1ZB7t{|=vXe5c!-&lP>!QCHnyiG#mUln6xrNQ_nR@Mb$pIX8|37EHbQHWq? zR^fStr~5Oq_IyO3Ct5yCv>hvfS|5W}agyM^k<;;4nm{{EB%lvV;ft#0r475$q;LAUh+zFW3N%*X z4*W%7Gl&=xi*z?W`%8?YI1ziL%KYsZy2*9f(Z^|uywX?ozzMOq2DT74hHYP>V!j5~ z0%Hm;fRJ5_u&zwdxXXK#+jgd%^p5z?f&_G8@GLOwb%Lb)a`nQ6A@uTFTQRpn{qVUunbwZ({C62hR&zg2=Vu~{5ZJs zg~$Op7Aa1PS>FAB*L<=n*%=`gL%9PNA=3GvIr)A@5FlEL1W;rFqnzM zBEr3hy#A%^qXZZfa_2!VRbOP9232FDt-KoVyGhPi6WADE#HS;oiKSsGnJd zLy}Mtz}Fc5AKA9*eCk0fm=~|tiDKAM(%1(%Y+YJT(CiF#&QMiSm+>j#PsKl(HxWbYSbTsN zysxJ+^*fC`oy61jhS`aau7~|{CtSq5bYCem z`Wn|u8v6Nys(XzsW@!|PoTFdYmIwMmuaJh*Sprv*041qh#GzT_B&6L<8+g_-WSTTX zefJ_BbJ0hY<bFQoDA<`LLo(5gfV=cdd);}E2D^|nem07aXJq7Wm+a%{ zr(3L?&glq)4>^fw2=@;*1H+%$w?`F(I{2z-n6eplKDBxXRC;8UOihm2jMSV;8g-Xj zuOslh*2EQ2>Yw z?fUC2?*i=P^90SM`}_MjDX}EWDzxhhZrd^yyp*H^zYdw>1BD@bY3vO@fg38Kq4(q% zO|D-7L3*B&SKvqyV&`E$<#$z&xuvB_EfyQ~U{2c27VBAYX|y02AJz~nBd<;?IdbDY zPMkZo5aBCx#SK}#~-wUNtD;Ho#@QOH!|w|n&rCf{d@V*vO;SfruEfum`qa!sYo<} z!SEK1ccqfT_(>=v!s0PS;bosR!df3rO-)|FmyA8W7Xd%q=n^65#EQ9}|AuC8DMUU; z+*?d$gi(Wu6#OAwR9*dX_*|)$N^c-(#@W`ula{lL1iAU)*fN=i8pwQdk7$7H;;$d) z)vF#qJ)y~R*VHGeGvJU8unecwVtN@U!HUMRG2QRi*D=nJau&CA@Z?(}8^R9B03o6X z;HIZ;tMlyvE7&|RiB64rxwVf{u=AS2HVw1^?bO9285mMV^`Qw7smqJz`J(5|oanOq z5HV=Pn5ul)>#ctjc`ow(gKAZ$-3vR)Nx<7Ri;ZH?fol5?i#-m6VGOU9?MHOz2tJ9x z5>Klh2P?@$hCrp@`j6oE`6?ZrL&6oS`EmX9t&#j(kJUE1M%UYQ2gQA1!fGzUSQyn* z&rN%OP%yZzpZ4aBR<;5L(_<2m+0Cc3W4q5^gbboODNq?OOitS(D~c%swjR4|u5fMd zT#!2;QzzYIms#w_;m_T9C}BT8;f1iwf=v7nhD2!%9+wy$tko+Zr24(ft_FAM1RPdP zG1st#pY$wh)Si?S3h{0;Q$j%r3D~tjB?5Qns?1=cOcAT3(^cJ8p>+}~{a4Y1 z3Z?3d?RM?Nf`Wn}-kV6b)ORBYK{U#<${Ybr9N1nZYVa6{dwJ^bo(v?rD)d^>n(b#% z7HonK&VPb(Whs+T2-q=`2klYUzx*+k!dj=9jyWh{7Yu4(BaZ(qpD%vz3ftn{xy9Q) zA`G-sR9Tt_AI9P9^@RvQ$RypH&H{~}-xqUbMPTEs&ElCbM#%ObX8r>rJf&coijYu% zmi!1{Wf67xg3#Rc@gKri+Ek7rS8LI==89g*J~-I7`O zM!sJc{CK-uFUW%GRq1iTay8R1z==2a-0C;7zWznv0=^23jMS*qbf-Ttl9qJoQn>UX z`=T$2#p@U9(*+@X5j>zV(Kh{4di{H3ZE4@Zj0`{V_F}_`n>0>u)0xcmzOSzjM#2}L zkfI?|Kw8ouQW$b>;T%6zpgab(Eh4m`sKYUT zz~WEY-m4?pw+$P5^PVhPkc#Y<+%w8^pn>2PVT9!U(RH9IY6l^B+cWQvzpB z5hGDcy5>Oc75OeooJtwVUnN4TLQc@fyJ0tQR^ptA!B(3ydsUHNf}Kfg-c!DsCUGWyA@WE1+aF?|fB)dqd(QG}+D;TZhOKO2m+*=ORO&aYm z913Z3CIl%CP_RqLXVx%~LgA zTD0wPxm}+L)6FNo;QM44}v@%n~9tZ0Ezic?TD3j8BJW9o&pY-T@CNqTMEh7;aJ-#?Ag@qndSat9NM567u=`1O@W82!KJ8o$jSa?|koh zG#6&<)}JUU>RmkqWnb@t7#)Pj2Y%R(*Z&l&m}kAZRb5*C`9f0@4h@h!kDiuFKVSz2 z61)+`KAU~l&im}7p`(d0RP={PdDbcSjV=Xfck2$x=>Dxe4qY1?6SgER+g;#oGxO^; zTpAPLOQaY=vU5Y9C zBc>5Lri_M9_J~QnX|^k2?-mt0hznPl2L0KE>b!39Jjq_YHRu_IDXuHKnQgLq6h1OA zG{V4b$oE5GVd}kDJL$Xk*HNt$14^|8BO1fI9hFSNP2-2JfcWMNcOxEWTlLZ4lDbZ8~DnHiqG0hPlyMJ zmrG(iy>pKx=2PWhC*XH0(;#hn?@uKtN3CIO-tPb8p@Ryx7c{ZX_{H6>XGm96(8)oi zvI@z6*W|W+p(=*3=M#Hoa(DU<#bY9ERVNf7zfdx%vfdr-Y-X+bP2IWNZ|$X=Y}(%>o>ys1hB_wv}fCZGKCjqw*XaS7Td+dSD_Drw~@4K;+jk6cdr0m zlCo4lU=45YLwL1(UX_5)t+o5%H7@evKfDuIUKj+lPBV^Ej-3Mhn10Q8CQ{jfsx8UW zr+-fskG1=25uR&E_v<23-c+~D9q9!s@Cs9)cjmqa1tR~nyJh}2N9to;FeV%nnw!gm zL;A>+-W$FaMH~f?-3ihoq6q^%eBJ#RHdh`IiB;J%$un&(kY zo9$A~1Ls~dGJ#JXi0hp9eS%~KU&Qh{V;_aV&B?vLi-7m*+;78TzSVxdNuY`NQ=>83 z%*aSHZN${^eTl24SuWC$A`j}t>DbSr`+2VNlbM6TCogfMcm%N8U>mI2S9ez)l`b^* zGjNMDn-lTVVPSgH;c_y&Mg2tA!OzSufsxjx(o-={S`CoW=6|e>?SrMBPlG4JSW)JD zkJo+T7nd9Ky}QZ6hVipl2A<$Oq!Dcy}0o`IbvIX%lB@1``q7QXI3E?7M z^@}3$t;iXy894aQFAw@9^Un3~Ith|7#bo(^;~nNWi=BX|4gQpl==Zzwy~UI{XeDeL zav*Y%*K)y_3X&;#ZHbSAF~Gzsh~hDwJ$}bTIPkTm`3$V60$q^lw^o`^by^T<-(b8q zJIHV^iq`dDMJXkYuHUbY6BJZxE*$zku*FqofE@_`6=)e9S@0y(u#@q-h2Ee3p+UD> zDErtYu&ku{;D4qu$uZA{(QJ}=DV*~i<>gX{ff8%iNu`IB%f=oA7xy8?!^8xTS(7ZM z1`f;BZd_Jg?AOV}{fA#Ave%8o%`ELpdU&#n7?vFE4oJ=h4^gB)ERUogqJpvrGBzJp z3LPwTZ~}6llqGp97lF>^S8n61e2OAtF?>?DNm&3yM}#Ab6U4C`PmRrc7sg}`*jJVn zDc;8B;V$s#q)i;`V&Q!PmKb37~VIDjPFg&)%zf<*}1KqU2`k!E< zf~kUIw|8*xL2KzgLPf=Wjw%OK2H51Rhz`@!Lf=!vyI7nNWi6v&lwnFrP%0 zT|J_q8>r^#?Z*n;rs>rW%S;%H@wPHv^X9}um14*65oIub6QnxF-7n&e4rtKE49 zf=ZXI;4W3|d)MuDo!V!WiO}niSKX=PHgy5a)#DWCXf5_yzXa_rI`@F9?czBz!5W^; z>ZQ@epD;%n73u}?5dmKfFs_a;#ojN;@{7zT?<)99{1* z^nc}qj(u|DTxRYjT1Z=*GnPdNL6f-%zpQuy3fD$g!xI?`lE357LTa?@gV((eNIoBl zrBv%QQZwn8zGV0Pl_W^uv|F4Q`w6pW{GkEh@)-7vG;%BTXx+=p=p@2X5`mXzl0=a8d@yQN(9NtRcz!beF?vxi$*A>MfbHITt~p^b9{*0L zP0D{Gt+Wmu_3swyzyHhf`I^*y6MU2{F+-NWIm!JlY$j#fvZno}h+_sHD5Z>6T_ASt zrtfU^;?LMnn5_JHwR~CVwOYaIn2nPM4kJsoMy2KRfr*pBS6gXDicRe7eNl@2Ugsen zFI4yBQ_O|&!J>WRnja7?w*S_PJ9EaUUla0OV-W};J>Ex0>Wi>wGsbXY%oh0Ed(F0Z zWr!$E)uTg5!2_(+^F->TSa6! z6GfUaqjuXDljXn^CcV_|w^!fCwJ}LcdivxKZa2O)g|to560X~R>e73YAY8IY1T(`Opxy~A6z9i; zN3z+QP)-=8-N&*Lw+FuE5GN^ST$X1iAQGAbg@;Wt(7^LsZ z92VxVocN}MH6schxs|4tWzcCTQg96nfk#iph%vE#Jg%%Qh~}g_*om!hcC|c6F~+X9 z-Pav0TvX#Kdl*auK4@Pkth%%2XrZ1W12F6E@IB530mBfVrYfsmw}k_UQT(dX!>XR- z^9Sy}o7lbJ&@5S2&LHU2k0R))XwJZ|EGtzh4-S_;?g_k01E7`XExn|TI^Yn{;Uy3? zH~Ev#>!o8h{lpFVD5osik@%r%Ktz`X83O=?-IT?sBm%#C~8n zd6F@W`hS9aURj8t2(@VdWHJAN(T+pQTkX4)14DtdF1tD41t#we1I43bXAMW6O?gKTJ2s zP`UUh98I{<87ii(LTv=~nvtpd#Nqz4Q2 z8qbUM442~B$6ZAUH{6#IB0;X>6uSvRBy!9VGNTtJ(1Nu=Y=*n%+D2M=(qA_%Fy9yW^=9TL9Cp!KPMd+E7Z2tGMJ}(`&+kfaOPl>S8W52>LH!Ih z)rTj}_d+Ll?b&;3ca_hVotb||x?kvXm#Zt#A1C!U?7QevoL+;au2o@?cJYuj3`h)H z>RDl!NXWwMpU`67M}hWDBqCH0F|v=g2H$-E^9Gl{hSJhMQ$Q?>V7O~soe;|WW`QSqPX-Bu^7YFk)q0H z6!!c3MQs5{C(c(~h>0W%cMYlhQHLE(mV48uckHi2oz&)YjRn8Lm_-E`-BU}BvSQLQ z&_Rb@{F*`Q?Lr&N_ zhP`PpU^;+_B{^Z(fkw6 z7+nsJbnwuKp-{)DnpUkrVc}JRoc)dX`_mUs_|e?~@jfJJI#x&Gmr<{BUd=KUF+!m+ z;lxx2q4*PL)nQ@Q0-0af91R|4x+Zl#Aj`AaLijBmr%#cud(p=0loS-=i?KttRQNRF z?f6K8mQo_;eZuknjJtwD_gA|dvwylrPKJfAkVd?WzTnoY)!$%%dNyHt)4goL-nLHP zh>c9wVi2f5(0=tieB*Q{x$n#dl{Rt^cS1vmIUG1D;9ax+W=42zJFOoQ<|t;0Y?xZd@x!ANZq^+?Ki+^kT2lGO zq2bZ6zy+}|;b9KB_LRy@AL6tChM6);k)&kVm1!E+W`#>Wn&G^`v8;EAz_utiXbzXc*W6 z*KDVqv3Sa_@D{Zptx{$ILg(>U#y58mam(=_K`rF@@vCT^1Pko)7b^tL-8fcS;>33)Sh0346f6FbDvhycxCL<=U zGJua+iNiesD7u3K8P+&O8?j_uC#+)q5RY`wxny@w&x_2B;5uX>Rn~=;&xHn`Y|zl{ zH0s0p>)7IbDIjnIr>Ij=Y)tD+ww@=#SU+?qkJtt~VssT63vQq|ljhFMsSsawSqsCa*H)37`CY_i zw82nzkRPw?=q-GBt24VHID?JaByI|yvqu9ak^t-vsrv25$MbLbZu^RL6LW1K36oFO zApBIs_^UvzTEi57bV%;up>;Kj=qD_ynp=_Dp4T7rmbR5WN-?-h#HltbO>~p#93xxa zRy1*BB1->Ac%3}juhyoQxVF-8DEOj(y^_|t{L?75QAIzb&;?!%ZiHNR>hoB2b;cs0 zj)6egLD{oidyzZ=t|jk6J;M&d1r;`WUJJpbcRCL&a^92G3oRvJX$$pMP)2EP)Uh|% zj*nw*rWF>c@<2I!^b@{SYK_UWA-tI)&R&IzoNtKX%LBATGW{g|5sO)K?rg=IcmJ`z zbsj$Fa18r1XasWRoegg)f;C&UW>VObb0(ZK-UEKphzWq+>*?cwQ++j^dJ$??q_UO^L?2g^vV$ySv-79dB z#rWvFS?=*drCOKI@J7U0v-7F^hMD?0h!8u)_ms z_&nUy4Rfc=a+3+3ysp#B$b8$b18SW@cw+r81A?4m6Y@6D;ypu+OLFf9@v&Yw3xZ61 zcBdu%0}#@1Hns*N)&E*h_}F7MsacDyG%wj^eg>g-gi(maHt);Ii3=vT*HF_Rhy`k z2xSFh!3oGo-wxp!{d~*>>f-0)NCdVo;uU+~ z3%>?1VZp5tNF~d8e)|7TVG_9i6$q%K`TC&Hxl_t7frSDGsLr%ivFNtB`t2^Dvz6vO z_>fVcMd0^_GkekLa-)pTVo)i+Vhb*IOvgX!*vrRmwS{S+N@t!@YbX?<6YgU&4f21N z=Uy0687RG0$6_=Re%?;^PUvIUkxO;hJwwGsv2T`{=tqE7-GxHL4R$$bq21XcjuCn< z>0k}&2z_4bdiV-8Ej6EGX3}I6h(LlTfBH@BBirrOuUJkeMH+b;I1+hrW@;}#enM=y z0U9Tj(kw@(KNv9${gK7ieS=+J_^N3Wk|5S_Y;0^%yGq^jz>1I3K&>j=v71)w@s_iu zm-avE-Sz|(pu!A%JM|)6F1tw9Mel5Ga>4Z-T5LDJtmn^Wa|AndlGX@4-;J|O)%lWj zNaXe>5M%zeOn4+SeJ-Uup0=A-Pb0(EAQ5y=XhA5fa@dB3W{`ZB0a+EM-#d|*w8L4_ z-sFKQtoY8rW3h6V={ZVMS|1F>u8$`VC4ar|k)^zM#7qItWQZl&da+jOO#zv)3ehcB zD`}N`bm%pK!YwuV(BQNo94u1{_Kap zP^>(jM1#I%rg@9e9F0x4-GmReBMr-snwJ(TNXj3XveV)&G!6+{4|yX=wAhUG+$os6 zF4Qn>3>i|V(rFNQb8vgiBJrsvs8JvQsqzmI7v!QJ|PWRK1T8wuSxO>Obs%W_H7h(p{lS3!-w zzlcQm$0J-VJ1>q;R9?^nF1|;2d^+@9OQ@@3wOy*o=3E>Upa3h|;aIJGK$fR5k#HVDaaaUWM%z|}x7bWcf;+oQ%gTDW4d z0f}T8(!Lha9fLKgf}-+~ z?LuoteCeW$LRDtfr&XC)G5$IBbx=+ncR^;0zx#D+V`~O2h3o<`Od->3r|hL|TFNYS zX3C<&BJ~rUKFj~#1>o21ZPS~~Q?4R6(qkdxE>z*>|8{fsAd=xYtYcDirg)2FEYId8 z`WB#GU9r={WOWBb2S&N>om(&7Ygw6*X+7ltqZ)>=PoEbC+Pk_}0nA{KNBeTI`vw{9Q8$+x+ zzx`sp=WC!7jj>eiQ8O6etH|HzgT^7JxEZ{Ng=j8@K0P3~JO5f*+4gy!7vH z4o0N`_%<=uuK(xm&7*+zT^z^teb18x4_Bp*z8?!B=k+nlXZ2sXp^b~akef#rn(i;( zWPbf=_x9HPasQnaK|sceMZZKJUaA6M*k_485QVRW~B%|i4`+a(HqVSza#pU)8#DtCw`7p-CMyJzYZmLr?HDE0r z#UW+1JKLycLAq4EZs$;sbU#+oqOU~8E74k`hq7dBUgxy%ew7g|9;3KFeHRmXRL9j~ zp`cjst*=qN#!$yf3T3+7w_iUw0jk>MBYc$4bhG8(GFx?`ym!d8kJg#j%#@H(a%2lo(YjEF8RN4c3q{L+CChcIePTN-Bb|*8Jww?%?50o~brI>k@ z`rDAFn*f<}Hc1&+MtoPklPu8l@Rez#DRZDv=gn_X3IBALYm2G{kofv%237IH;a<9r zlMXND?o~A(k_W9!2bW{q9`1#_5jWVolc#pSD{O?%EhwyTg9J4Fu`$6AZlTp{3Lh{> z6b7l!$4K!MuF^Y!y5j+Mi%CgX1?(@{pJn|dlYnTq!o?68$8fI7BgPqH{XuEtk4+1F zIE9Esy?vVA?P{`hS)82Ry9b;CU-%kJ4*0@ps}3Xe&RPL1T8XZe6Do*X|EF}+^}~*? zzrl?ZHm~}QYG;poZGe{guQ^??-Qmj;joKdz{oqU2k!%NN_E!JNRBha|#b;T#|8 z?R5!gri(__NLt;gM-K66dFQ+E`e|6U^PmWy$j18k?rAs6Zw2RSe+p@azgH;Pvkm*Y z`>_ztdQ=@gUCgcHJe41mInEsg3+J|;nHj1_^#t0CwGFZ#k1{1PttkAUXSGzTAGU6u9K z_K>4Up>ZCX^Sxj)0p{bh+TAA?0^!O34$LBUDD9izSC#NzGmiM&a1&Se5 zfh}Z*VO@FbjNeUF@kqmf&A?17))+iN|7Bpk^btC5=M+NYG5vpG;J+Ifs53MU4Ibs| zL_RLeXVh;~;ouCy80!s!E*>$|SX?xgD!y4H4hq+Znay)_w^^&IZs>iFF)QX|ooL`? zrwT>ow|hrTr&;xVkr>QETC9#2{z(CEx^y5Seohl(VfQkj(CyTV{7;v!jMqz-@>5vE zw6Oov{KQdGxnFyO$7kS7LhciNoyrb9#Pdks#&X)FC#{ehOO($lEm|G)w<8cNH)XHt zoYrU7Snq)q*Q)M-LVx8KZkOGkVy*{M#Y}oFGg27tRzMD6&MqxJ-gN-)nM4HG_?Pj1 z6bKb5Uvxc?9<3Iypi(UZTuGUP+Un`@BprR(*zK&canYV)p5KJHn-pV#VQfp?SJP_B z5Coyh$VS`&gd(m})!gW0rL~(jdZU7do%TGtet{SCmr`9ORw7b}}UF>A>i%rjQ{7H}PXF_Ny26!lAKRhqNi zjd>1}N_v;|M;yJido6WAtM;C9fhyNZUNUsuMO8NMMQoywUU0B`=3=$=%<7BK;zaum zt~KC3xZSTk{%Wvr4Hg^Up#_>(DlN@{8WBDSz>V)^HLs1IYGUx#s$>3-Di(O#~dNrVND5KkH6)3F` zlib$@=KWM+EK&v5Th>)(jhUqB!6KhznanI984W!S%PDJo49T~b&6nPUUKQw0@)qeh zSv8E$(TElnw7LX{$yM9iLaYLIjr1qB0UA>tzE8sr8CU1_NNfJ8IpWxvOTvLE>{jFU znF}ZJjmVTx3MgucaTpEequUAG12YcCx9PeDX)H$h<@1(v0wHkLHu3XH0GZHh1G`V2 zNU!bWzZHgO4fMq|^Z=6?i929zlrNN6d%twJ>jDG$ae5>RRQL%`jW$Xm64H=%IoZ)Sitpyhy3ysZ%H7{KsmTf;`9O&9SF4ke_wP1m zvwv}!U*+oc3q5+71ZIPgR`1puKU&y5#T>@$$I^@~-g%Dgg5v$rVrUb`%19svM%~ZV z^Y{G(NRad@KH{E@aMD&uZTe3IqWjF7Yi)h^rVzd(NL(gBDk<}KcLBLwUvt;aM@ zQQY*DSokwdzBhEXvxVuL!%JxcuS;D$Y2nm|REKI~d}15)%g9CdlhPuT6*V$0;9h-Me+rVuUnCZw;1y3 z{3xJgHl(Qmd<#GjXfho_N{0=nWz|my9Cj{;74>jso@j8vapRu?ROzMW$%E71Snj-) zZ=h^D?dCF%qnR&uu&3K$nADqQ+m1Gmoff4)NnWTkELidWZ1v%1W>~#cEaAc~d~Cb- zO)6{FiZqAiBt~FkzT4A16U5|N9cT(!@^D~MEvvhHN60{#vexdK#%|%(>4iZ;LOBjx zfLUh`X*}@c2M~E2*B8#2OIdN{qRAo3+0jx(`H07e?OsDGGm>7)YM8k0pU(iy;C zR=ixf8Obq`qYlN+2%qLfGL>gD46Ke~nYl_@%j4gI!;nb)ZJ|z>xjx7L#2O!X_kn1;i)Wkk+_+mc>XTtk2L9I>|5 zXWty1SGV;WHg+4^wr!(HW7|e!+eu@)v29yT8XJup+jsXp@4>zQocn!a?2!@dJkQ?y zS!=Gj=KP`kQncXiTtJe=Y%)njrAj$mJ{$JiIm$Z@Q^0K1E-N=t~LQS8|SXCQA zVSnGD&GrtNG64Bv(lhEtKP;(g_?E3X%+DA!@Gym@R3!bWGW|=jyv1{=$#9lgd2_5c z@1?BrW)6?n=LMiWWJvqHFg3wvZ-72B&me}EYos{Ni2^4Z*Ql&%+4gcx<(mj*wp+V8 z&{h&J&NgR>_5Mxe@pGv-&fXa$Z~=&|8eGCPc5I{WUIotH*opaD59CZj5WCCuKcBeQaYoB9E#!j4E7a2c3Wd8(V31c|zRRW^_60LO8Lx?^3*1xGqCc2tmJwQ_ z?Yj`#0}4!%q=4Mhygk;Dq9p~|@})9gxORxbKZP&>PHCK9`r^HZ2wISt2n1Tt^hTFA zPZFhKAC>K|KvW{#34P>0geE(0U4a{0<3GHM2s6K40>I(B$+)KDgc|Vk&>!Pv^Ovw7G6!?jTdN( z_Mea?LyH~lji;dHmr(|$4vZBhUuy(6YmzA}9io0>$dt*-A8~`Ery~mIIod_&As|(( z&C{qioo&H`4g8!)sa~Uxsz%~_cIiZu0&1a*My-*g1xoy*-qNQv_H|8?VNtPK; zW-`9WW4zy&9am^`3skQ7XyTu7p^Hzm(v{0=*cer<6|x-AMba(Tn-+fSno9b36Rc;U z7oBVegNjdq|KlYIJ$CQudg_iwxkOO?S8z%-}5_6=C%VHvA|5`!Qh1B7E$ z+P|*0_mxm{axT%Y|AcvR5BKu}37t1`pk-whlA19XGUoJuM5c|Pq0(t%ov*U#cqq9d zJy5NdHCEMN>AYAe{?&9ro2uMOk`F0|#VK-azO?shRwCcN!g`l>8RYc&?$v(V^ZS9v zO@#bZ6!k;{jtiAT5j~B9k@FTbbl@N_%!b|(`rr7(Nr*VS|g6RJ+_kJ*n& zAJMZNqknA&hB_M;?70R)-U%0F-q#}yu$=UjGHN8zSVvVwv$~Zkk72Y1K}l0uwo`u| zX!eHs!xL&8!Khj|u=MfH!N)RDBz0&+TzzpPz-02M(DoVzdsowwFPtx5oaNY*`(6M# zd^k+?)8c|>KWY1CadQU*e@6~$@XrJah1sK@$#05{SdkZ0pZw)+1pplv2Xo_quSJQd z6*lkSf$k(+4m&}LbvoEjFmB;`?O!W-p}^5Z;at`9A&hub1C1yZ#Q5wRbr`W>;Oa1g zOh29*h)LrJq}<#JgHmKMB8Q+rXJcd|V;<6Bw~Kbw_wzjRuzZ+pb3d_oeTfEi&5(P; z@-45&zSHj=ndNW%=(m1{7jrZb+)?YTy__-;W%=@f@Pl{a>3srKxl#X_&in6puZvgK zlZAnZqzJ)4QOrxuZz4FT8@{jbD@IyVcxY?Un=qnv9BG~D=9rm`VElaW+LH3Sh3g)rbnVh;1u z9u{fkY&@DB-K^RNId^-w$63zm?BVxLdVY|W#yia8QV@^mSCq!!u}}2Ed?G{fR>&&0 z;u;Za0A!gaL6#<#4iu-Iw#D`5d|pIzowGw)BMPUUm#`arnN15bGu&P$n}JedtVC2E z*3StZ6)6mX>EI^A4*hogQ0Mx5-^Ia9ZzW?Om}p)Cdd^nQRcEA)*_2EIt!A+%YgJXz zZ=_V>tY!Ec{}$PaP4;tCH_*8CY_M_gaOs%qn|1q3?@{6#jtO|a2Tjjp%ilIh2OMScG4M9{cFekK*6=CBmaO9 zU2>}$$o&uU8?~+&(j``hHq{QX-bw@y%v;9s>Q9KW`o4j#)vLv#` z$dop!wjNaiZk$uVYznu}j<~f*GM-pj%I!JSdZ|W;-UCPHx_Q$lVFM$2ip&-JBZ{8a zrPwJ8Abb6*tMKQONG!#KVrsa){}^nNB%|PG0Lsd+^NSSSu^1^^%nS)?T>EsxEkd(< zR!Mxg2OZUsHu0`%jp2UsrTAlHT(kaYP*XaURfa@$i%LblQ6NgYBgND>DXlF!joRE@ z!`F)AX&pum1Ev+#8)+?|bWYi{w7*(soRK`YQ)If*wG!T$`kCFc%9?uFvVFH&$C++n z$9<#OI$pH1O+*M|lYq1|Q*juQW)E%{U{}Ozw||YU@hf{Lq$`4$?qxQ4+1tAdrzC9( z$*5`qpEhtykO-=$2uiw0RV1N|jYV=fUr72RvQ(~hGp@AK;a+}Jc6~5TaV<{4v;*5Q z)yJv*?yt6*h)l_@FOR)bao+2R`IM6ww@|5Nm7Yd&$OP=+|C_X|UQ^A!+_tvly#3YZx|LVzNQ)ay481@xuEx|kR@k;$cLSbcS4`l13oBiEGjy+XDB3-rfNz zA`N)4)mf8n%t(6Q^R-qj)5)~*RkbQ@MeeU|T2T0yw@3DS>dBg04=_+Qp-BDb;Q6cZ z2MJb4039r=JmfLx&kF%bZ2O8%)N1SM8dScx(Obv~^Az5l^+t#LU4#zxYK=i)kdWr@ar06B<@r@Mbad$17;# zT;ENGzXz+-ztycdeGDUpODzrWB53M-!&F?Fyxp;C6%F5^mT_vqbQwJN9ePTO<(c*d zeA!9LPZWerv78TDk@f*U`*l~bqk3DPJ=y?s{wRL>$AQr2f3D<_9b5S|+iRgFpJ(Y4*uA)j+ zMz)0pY!0n@IH}Ra+SK9j$tV}zL9QU%wDX|thtQFExb11mxZ7pLWK`VY9G3UG-+fq$ zW`+U>efrU@L$6TxCWB)Fbi1xD22-vA>JX=RtIY{xNz~F7xAK+G?;G09+^bIWCNJ7a;OR1NLX!j?zqvoiqJ^&EQ#08-rcWio^fjxAniBu5m z&w)$=Rt1soTqGCuAxV~c7mqc&w7u~M1OwtWe7s!e8ZM*0VAKya07@s3#_xGokxC$) zpAb(XVHwPXD~ueEt>}M&j2)rL%R2Z5r0b?qYGxa?D1#s|!ByCqauJ_sz88>?!0G`4 zVmJKpt%EZnDTsq_Af|15WOEt~SQhvbsyrbWY3^O;k5B8o(h;k=2H47zglw`}S)0 zo1kvtyg@XH31aFI4MU8VmsXc?ZS;p%X6Hs(m0G`Y(9CFL^LRh7)p=o9PfR%IC&>M=Qmo$kPhXqAGNk&7fw`FQ38^5kXmW#eb&)R z+i{xDMx*xH>Gmd1o-~uQbPjXt(t9p^T~{tQE+>+ ziNI%yb9^lAzH}rKl|aJtKHZ(-j4p#t*#I0g_m1B@R9`KpQnx4In)0iN1JE=z%qJb{ALdHja$`+nGE%o5IPF1Y9d2X6f&-dnSExgaSRjZ$sR`eDDR z#8F^IUsk}RH(}dz9Sq7rESS7#Vz&$5PCCBU6lSD`^6rDtp$D5SKoQjWbX@-QNO#xhc4@fW;qFwp z?sGlKfe0D5KW4A}yd6s5jFSE6^L*O;q*2`}ucXHghnMMa#u~FY;sv(d9}@hIJ@~ad zo^AWbJ_$ES;CR0ov5^GEX8n%*Vremwt5V)#h2&YootHuAiC%|FbKMz0+}Wb5tWOp z1B!3M6dNVa$!gFCF@B3M%?%)ijGg0+yCx5$BT+Un7OuFASnusd9Kiz4wWxC3NXw67|eo+RZrhqzFOfBkM8&WwjiGm9T&rxt0dAkm6l zsobG=BH;bWypM$paQ9Uw&fKDfcijmWCc(ZMwO`uYz`U1~>KgkNnISJtiL zTJUWxLHciP#N(|x^f9NfEVh>KD{LZUQn=b~)PCe~daYHK9|)GmTa^LCuy3JFeeXNh z?=|+fiQI0g*5fzxa;Fg4Fj6bCU3$mL?`yI)PyNJfY*sr;nekM9j>BQRlj5+8^Bwrk z%3f(svJqFE58Vwsgb0p|d|u5Lg9C(&B4zr+%6+s~xNzb@VB&y75Et1`zYs8h!2dd-HBGA#U(7<@j>?yz$0*17@KbkS^`jsi-8o!j*3xCTA}I zlfiD2UQpJ?OBE?=4}$CopWUPjdoWHud4ir|_*gH4a&G;NPR7H3_w5ZW#bhd?({aBK z!MlSD)?NCirr2%WV~%A}XOTgp@Kvniug!*ojt-U`j-$!}iXym!Z?agk=0q~Ns1bzE z{R}6u;hVi6NB8n{R8OR65v>f@S1fzi;|t!P#~bXjPhO4U-0bCqkk`gZHww7lmC7kQ zA00ylO4yt0bwWUJ4AD3@=yckY->VeGYMX2bFir?=aYzBjokTTF_LOwCvdCsvU70d_ zQMw#fi!$vl-0bZ<`O}rJu4yC^UoGbA(g?x0h>_l^wG^=Ut>Y4DHH3Lk@CAH?#iJj! zx7=VoOD&8#3EH#B`uloln)muIeUG{a)Az2VN&~oVH}8^8Tz?6W^`v%C5>L85r}Sl& z{x)dweUGPoJqUYgx=dxQ{32VHI6)&e{~j6OUO&dyIQf1h_vq5kq>;xQhPlu#*RnLG z&e5gkS(R9^>Y&P{#h0wn{d)oJ?t==f^hPFr-N6#sqt6~c%x7V0^<~4>LfLq2@h`>Q zkr)$1jWoYf-tV5u-?D7K(-_J}KN91&5Grx+$5o}HpkSO9II#-jiSAxqTp)Mc^o*Nu z@@(^i%&-t%0kW)}gyopCQzUrpT(FEQ!=askm>PE&By%9WR+H=>0ia>O1K4)g^M&h6 zpgbfUPb}6TqN;2p$fq@2VWco%Y#w?&14zKr>F7_{LHp7M+jf9ROj=>|Lk7C}XQ*)L za2we-1sLsjxjgS_Zn>mAoPD&oRg|GB6GbeYEu57vRs*Yo#nou8Tq3fk_x858qEctq zZV2}7S>6xLyKdY?Sg>NPCa=Epg^Wa(Nny(Bn5zt@#eS`ifp78Y{ovlU>y&&NgYLM0 z-(anIzx!b{o1#6J)@9{F!lrc2Wtjb#8#{B&TlzwH$=Z#`ZmITkcyFf^+U$*&`q-f8 zfCf8*Zu9E&H6Ask_jjlELU-(r6{b<H}O1PN1Gj%uHIt&$%-; zPe@{1^%Z!Fy-I^>ocYSGXy|B4?dw-fIv=W6S*bm1PYJ{~Pf4G&hYZ_TjLn*op-P$( zU&lQp3@&}V7$p0+K8Gz=7FsiYg;x%P3Y<-~M39m5d%U5tH~!pAM0hx5>$ewn;f`cF zGxXA1X*r{MEnl^AO)+ft5{CB*EryJ@XN8TUB{2{0A0lIk^rdG+%twb|{{AV-=z9fM z;}J>J5nJ*{o6RY(pT7(ow-7Qi>2{?k9#p@(crRLdHd$*VU7vqGy4;pP&7bNG424fg zWBIO0oS~({UO88#^QFo9`pdluQjtQp|7`8+s#1+#Y~ggA?xJ)hMAhS!dxmDq0dbYL z+mI!%Z!l&7(1P=*`9tHH4nqOuh(%r4!v44!a9bIF46FHD8PFr>f7A)FsbQYc!cFp5nnnESss z!En<|tlY{?^vYa`&-p1dcY0mEz8Qj}NFm5@nCEL2IlasFP>P;D7MDaN#wzF23oeo^kEA-}Xq3#aG^eSS& z-_{YUVzWRRT^QSO=4dfO!+x`nV{?qOl?)Aum(bdl-vYn$W5z8j!X=IfUX6=67I@517(vuS%<5%D9#clVNqw|D0aNdj-$bp9#yqYX!!V|gMHzt&xOO3aiYRhkl5 zsZ+h`)vM!yuBT=uzBC$!wwLrr<-zwNEroCUh8wSPT@SZ=Ui?`_Wl z4E1CHFF8mjrVfdqO=)MRoRV1XM{5_Cv!8|6aCM^V47+c?Gw?U1Baw7fr*o;*vs<;* zgmf-`TP*5%8XuJDD2cCcCRb?m!DjMIdcU!nuvomVuC4Y`qb2Xly0YiwdC zaP2=l0?0i&6qL9b2rT(B<s^T}M>r*v<3<^6BzSCo4X(l2 z)x-25O~roKoL^jaj;MsmR@(FCFfSBr7(;gHk^mv*8|y!Bg$9i2Q$|ng$3;?Y@Pc-! zsB$Lmp9+9y->zs6@_N^W(wzlc{RjlSJ;7duP$5`gD&{L`;SyMf*E@ES2!SISraid?+Fh=?99Y9Q#965cy668W3oYQ2Z zEX8|LpcI;*VjD8}$)WDDUCEqHOK_jAl2-7EH!;}ARZ=pHf3f3nKO?4WNQ+B1!iUS? z+ZoUTVx`70r02tr8m)1(%$_}!Dzht?cv&yq<#7}iL%6+O&CB$jk}9TOcS%NLLuzn* z6I3ofTW?Fv7XYXj6J)D9x(l>6*p{TGJi6Piacu%KaQol~J~d z%paPjaj#A3LNIGCNXnTjtTnpic*rGIE(-N`^W{`C2t8^kScRNLNGvN)9Wr=o9N9mE zA!xC@^G7E+-A<{ro7|`KJq1F)G*_+Hu?j&v0Mb!LNj5`uigd~rN*X+np*#UPs_`$~ zKf6<%G}hDAOy*~*uG3&nf3Z0k8h-kthNveih#cm` zi)%;(dE_allzp-Cm7WfGoE#uZrY9H}UQFxBcX42IcfQx>TgRII%tJZBHr%8!Lv}d4=v}BO1nM5<*PlD^a5W7V+uqE_;;$<^5Mf{kd8I2ifv2Te# zAPi%e3dBba^r99OL%QF$C3-1rR-84L98NV`T9!C%wG*su7Ji?b989gZJv1&<&N*e7 zS(ls7j8RA*E}dn`dk7SW`;rfO7kmW~xr;htTO6w(bu_NXAf!3oexbftvgJ3>4VP}nksG3jz zAjXNn*lNH9avAs1dU7GY4KUAndexT&?-##q{`RqX+be=LoN=w-fIfBnsNe6wJH=ze z(Q?`XrWKV~08y_*VC1W#!g_4R`RGjPY2#$pKL3cRu#B?&9wu3WAEfK=qeZ3?e6rj1oh>U zDa7g@XoK+u(6*n^6f!xPX5pj@fAt4_ezMbAWvVMiZ6t2EfMCUVLy(efHM>TK2H%O*NC3=GV5KY)rONO2};j$BFG=m{Ao|n2kfMh(CKib(+ zR|tk%HwnzWqF^X(RWOYCyQeqSwGX&I$UsdwhcF#68k<_YV^?d@0nU7(&t8D|r_jw2 z^{dy5{n>Uo1pj{iI>FqDPl0I7@g`JlvTRj11UeaudNxI0Jc^ZOx(tvA_^+-FN5k4mV@;wg0(cPp%HcNL+FAvl^XN^xCjj6VVdE8)MzJ7rgCvR`!1nv5sT3_@)VfD{0b_G7Qqm4)}oOK5#dj?6dY5(Pd zHb=hSG4ooK|c;~OOe@BT<5KN;~g$2-5hwTG`J2VJgEw`si8rR8AZd2DB)_D6{b0TVuc|5U7H5y$4u-AozBy>XLCZKanqz%IbPEw)1VR68<1#ra+uBbW=h3mzdr7#f9)Xa$2EeywX?-9SuRprq1!a z_kt4C!DU{*z|0JeB4^FJgrX_t(QIqM8I%jgdx!EuzXvjhK=5#iZH~(*{q`5~F z`FiB3p}Cirmx^@33uuX*AZAWi14ILKJQ61uQF1riKQQodfGY)HvM7Fgf6N~>+K4(q z0E62m5(t1cpbs!xHWlCR5rG+;#JdZ0ihWPGMwogy`T5S4ym0(ttR6S!%-p!j;dn5F=be4RoL3+yxivy)&r*f)KCy~y@=>P%No^{e ziI1R<3qjuUZsHJ5US|KgwzY~&OVx*G5&!yp_X}}1?_!sK$B!efQ*%fO`u;qG7^M~; z=l8bqh#?$)4(4;Hapd=oXE7)^iNri#?c(xIbupdt&1Oez7PkUjW!2oo*qgUA@O7x5 zqJ3FSbF*rKKsn{t6@Noy7giUq&-Vkg%tE3&rVO2w z1W0(sY|h=MJdL}Uutb`VTY)3fpQAni<@e*emgJ)fO_5NmyqwzgjeCIbK_T$QsD&-C zDLKgy39~=I#I|aMgqw-NOHVWj6y)8+uX4unLqNU)LwuHV3p3Qu6>w$?O;owZ8Co0O zXoNa{38tOrVt}ZZEg6nUEVZla_TF|c(6A}jK=^jTEDEnxi? z72t&O*fMA~gn1S3W9V$0nsYUilzG*(F${CS=MS5mlz?Q4e9#p8t^n(l1C$FjO&o?V zw=}*8|Jl>qBZw2KLF5SaFg?r=$}odf`n+5YYu=b^d-jZN+)@x>kuP*zWJ3BL)Vx^6 z>>T2+Z#;a)xF4@n{$P+92p@>N(LyoIQol3rz1QepS=dAcSJ6J{Ju!Wy`&mdUlk41c z3dNz??X}K3FTCDRA~37K&X@=H=8FK8VrNUySpPGU%XbD5cdV z+Wu4utdI(p(s>s4o7MYJUFuaw`SEMsoY{ErDa_NgOB|>Bsq?R&rxU)*EHf9)^BFy~ z<4izK5Tg;~ygYTP4kOxW;e}}Yc$1FYKgQGJD?i;&!e%RzYG=1QB!*B)<26ZluV3GL zdwm*t0JxE=(Z|$QcA$83leUBAu#@K^6X#O-7N(6@{Bh79K8V;`n!RmQa=X=`s=ZpT zHcgg!J}41C(?>%{`u#ajzxiocg9(LKDjFNg3_Q9_a43~v7#-J2xJ7WTerM{$5_;Vo zjy(4o#X&t3eFd(#1HqhE1tT@?8XZEaGZ7{~C#B1~hT_K*gLtcs5xr z(&NP=G91QT4rKS{LGI!(83x7d1g3mPBbTl5crgga~9vNsJwTLYfUOIOuKb)by? z1zl@l{y3CQJ4y37e_Tg4{!V2Op6)RZwV9`ctlfGmLotJP3JZpv0;;7znol(yOz6%;XRrUySAmNJAl+J-IYarR)}uTqYFL zPPV^SCn#5Zo~q0K43|eOeEHau;i&P-r>7`fti8-~+|6fqdynz6d++nDFA*W7Xh7Ab z;_EsJ(k(GT0L9Cu{hr-p%<=g}nm&xGcM@$PP@b$S!}tIrHgxHO%n7>8x4q@{bYnrs z>!7^~IE#OAh=zfN{;?A&pT#W&H1@~<#LDscs)Tehtwnbp_29VcMA{`PM2u0YNI@14 zrmovIS&PPJ!0wE!w-cf3GSh#b8j%4KFJ%tK;8tc)lB>x_563qt`rayX=ZxY}T4DE1bl2=^wcA}BK zV1O7v@=vp=5e>5aiBzUQH}^f&op>)Wv&};D7FA=wZ+xc#wwTx$z4v-?fDtG%dcU^X zZwH`b81ft7NK!Hl1$z^ZAXkltU}2Tk#_RzgK%9&RJP|NtT5W_5^4^2My)wsSx$}6T z@Pj((m<}#dt19Syrr&p^)%b2t-=aMBSSCROCX+kUk4%h_xSX~sv|(EEu`uZMM)Gc# zG555+#~Mdew-XCv=lZF%mx{z4E{v2n1ez4`pe3hAlGX(qq~mUP^#;C}x7(aCK3=$g;# z`l`fTe1q5h#??7$&4TC5bGqcfMMy|UvnBfX9&~>2$s&Me(e~&LaNR@R+4ca8tq@ZV zbRFiAUOo{?bHMj1YBrb~R9t2JGu|co@d<@@GOIz|HarsS@L_s=mo;G57Q^s8z0gMq z$)Hz*r(!jb{A4zbd^8!4MRmOOursp78xT6t@`w$fIlTY?0(Ux+?XS43KpMKae`)~? zyb!)_^#-jj`Vz+5ZjUYiHGG}) z{YMCv?8$=0Op}YU1~vl&D)HewcsRqTo?v0PcIsK&E>U9Tb{(Jn!XRdLw?RH!LJ`v& zV%ZQX`&0e`N`+vx(%M*05}Qi|6C*L9%+@mUAr<6`ChXxywH_tE;rAl;7IIRXqN|_W z1g)U!iIiMb%uzq$T4UumqlOO*Y*{Oci`hoN^{+vIeeyzGMYcF=fQ8jp?*-!zCuZ(_ zV<{OK8HC&aK>%oE`j~yj@{V}?^#jl?U~Co%$)zSk8%|r`MO-x@!2}nz0v3ry4OW{I z(Pl(50|*OqK;R)pI;xeGpV62tgT*YSpMHz=bE~7ttAjdKJUih?;PM67np-w#F_q?T zXhJJUW_i-a3bb0D;|Dt%QN3v$!W1#%fX@AksVe>|$atZ-`x4@Z;de#8EYFLJ5z@V} zH`YyjzKwhVf9jzYv) zJCSw3U)y@uQ;L`-XC4D%f3}+{XWcX~yat7ZQUA*smzIQmH(E-|I7+msafFN3XjW#n zG_peNffR#9&(mHOIz3&T8146_&H=C!4~SikYDMz0x2~4k_t1{X24Q9eyyA-lW)@AO zmyrF!pmK;m!L`pJ)bZ@LYB~DeC9A&rN}!8+eXILZ&;WX&W-ibdY@+(2#<8)bc>G@K z=nT3Q8QXY~%M489-h(Ov&B{YqPO2l8^JR+0s0joCE>eFj@;jM+T=g&mu>eYBh`DLT zP#h#cFI5XpPC5nAwJe}-@l)Uv#=fLEYEoQ(f4@jGo8ZwWsQ26)K)2>ZmfSwkzaD|S z9#9}__=84J2VyL(i6R}LlBn{oh}PP}c5pcfg^bg?y*(5BseVig=I!5j070;Du^v@x zuuyMN!$EM@jR&%Y>TeIv!HmD2Zcmc^IZ^EdWj%oksSMv54OR^32)iLI&axt*q`y$E zA*~knuzjzp^*3BGawgGlh2^nWEaDRL147!J9`i+^UGKILVLQ87(>zkwVdcF!yzZJ} zIdC~~`P1l=lzy=^O)xV^x`#l$U+wMf*)B_QVBWh6AlZA+M?&kS77(Y?fzi9UySJ_s ztu_MtyzITUTR?)cW&MGZ5LK}7*VeTfD|C+1*^%J1-q8`6UrATUHrFWtm5x&Jkq`nw z@wv>z4w2pTdc%RFwUuTCdy{yfd#3L>i4BItK+OTEi%1V_yFHvC(U?@&Nw@$?JCsp1IrKzrU5&%VF&@nuW5C z{p<0=$o0^&_jXY+JG^2ridISqo7VyUkSQ^9Bg8u=CnrkJsqB4nYXrV8L~NFGKjO&& zZ)QseaS>RDCBR}LGotHYLXPZdK&}+!k*(}RvS0Nv$*JBrCZvKsN+>(c|9we6% zG7gY6+fMRv5$IX!532|+MF(kZE%*hsyM#422$Z;#b3mZ`{Ggjc$IdY+^Z*Pc?;t^hBi zwH37h5ISFRdw65WWRfKToV+tifO#%rG{jo8-+L`cmOsL7{*QrmAH0}h+P*H>xo&9Gs-UwaaMCJ?(wm|mtV$;!Q6)ve#KqA>cP2Fm z&4^=y+Q~t!z}!@gA#6mHZ-6GAmYQ3{A|bx}-LhGcNGPJJyaO_43^v=?)$h}F*UkAD zX9Xr|{I(3#t+in}Ura<9+s!UI0C>|Jmm63G8T^O+j!vgpSWiF_+2L**=ql!>5RzL9 z6jq$5b{z+@TSWgxh<2wXH5*`k-}SJghWsp9=~hpKk&tp}4+`%PfCEkU(Gt z{QQX6h0s1U#DH=_sjO?7@9gdt6ja%)x2XVmHznYI^~bq+g;4g zV5S6?(USkwU?cPwCDRX+V+<>_--Ti_(+>ZX4`w%YjH1%{s|kVOWpbagd=*eSyoIy1 z_63OU6LL4qK@=r{Z-fxN6jcR5iu$N9o^=dMUEalBKiaF;cV)AEne?ViBnVZ4m4evK9c-y&}b_`Iki>$u(=&L~Nm zI2HZ_YevfJ4_M~u!M)d*L7*4>jX(3_L6L;@2{{`WpHXMLmp(NwXiro~WfbCh^S&CT zFjVam=jZ}({Mxo_EktM(@*hRgZ3ST&4Gd)p$1a;9<@t zDKZ9xQlVri?mO)0k6!RXXDZWE#?(8n?(*6ZJ5Sj$xCgAlb-+Hdd>0V< zD@D)yHJ!6rmPtdpMGrAWzyu>Fz3-G_;DAe-E9MFCm%Y^WVxzuo3>34T$FJ?GZBxR70eZ{mUgq&Ia}^q2=ylo( z#mIovG9cCfdH()*UIsaspwANbxWI4yXRn#iKZq0=9i6=NOYv9VJeXO1 zVv!MmVQKtuvCV8a5N2MWT?r^=094TYpBw%dYP$a418?o)9)f|0NARHyo{%)OCc<;)0 z>)^J3EqgWG4^HS`91Ow?PGW_=;Y%FBJ8%b}T!Gq^Hx;A1<{Rp_GY7}B1ZQ8Kn3p56 z&wwu|7r-$iga!?W+g=Hz)r203I8o^Gf=|7?d2_iK`9}`)cdiXoJOV)KBrR*Dgn!dE zJ*NWBwt^-8iQ`a+xN(4ygb;vl{#dFd>VU&+9OiX7h_RAq1nA@&hLI4fe60n^M}+1b zOQbSt4h4v-qrmW|0mKSX85kI3@MN6@9=5>w*bCQ&n3iJ@s7%r6wM+EifkC`DyD%es zvQSwB%;T${3IY~P@&Lz+P<;gp&tgK%LmpoF((5GWAU;93%8U_=B!xMAr^ZsE@=i}1e18N~< zP+_`F*2~0z+QU3j2w)9U-b!>bw%s4P*M8ph(-6y8pQ*xnxlYr%&Y=Ip(L!ZL$HPvf zrZV^?0?8g$;=fWWQe*-M!e4ASXTIitr$YZAef&?pI!J)5K&yX4PS?)`rqNAFG!9N_1a1S-Ly!ZgCBPlDZa@@Sp&+l@oI!5q7R-Ooi zBn=Z5CTgMr=oNT8Zskb1xa9$B?zU#)ftWAva^-Oa$7i}7z1SA4ghP< z>~^7ldD9>-5<4P-+&_`Y^@ShM1H}Rgbu+TQA|T*15zBG@kYI@b74+~@gfY+vpXX~u zD|X7irxW26OzL?%;X`9eG~JZz7~;SG^4G58U&Hmke6vMG41ypGs3ejO0^||=-IiKI ztGhAllhj4UcOZVZl>o+8`*QLO!^Szq@>$=RIB+J;&RtB^4qzTly*OO% zh+SS>#0dw(N&!N4WG~0?7cj)KXXSR-;f7Wfa(*!%GFjU>Ern#X2+2P(8BkYpzX>zOHI^Uw z6#8q^t!NBu8358%2gwI`PwoP(8;L&bJ7~=A>hk-OyC-9;zw@p?0Pz3sgH!@cA>*B> z0rZD6XK{r6Pd(fncrVm`V0ELcb(jM83NyM0rx8g;HFj|r?C9tybl4q|XOqj}?<7os z{a2j-E6y=@VG*N+Y3uns?gcH;-3$HI8U3FO(SM9>1v1d@`EJy{U-4Q0eH$$p{=mvJ z`du#L7qBsn|8NJ)Sgo<|3OTkK`(Xb*?f?I_|C}kfhT`_}P&;KVoF}!$WTNn&bBi8% zsoS@k_xX4I)vOGI6riL4c@kpa4uG3HT!75;k9d#~TKE5Q4EjOr#0dhCos5=NmXbAG zq~v$R-vy&TgO_k0LbXbp3ScxZB3uH(QLdd)zsZM~MagYeo1)zhtpB$U_76v_)JQoa z>HoTF!WbCi$@KX$31cSz5@TSZe3B&0 z9?XBC-(dXjH#`;MI*oxR>3Fur<$v)DU>5+R4bzk<97b}1>_1Naci8{0zw}o}g@%Je zgOxLciJ$z>`!iI~2RPCJNdGZZ|4V@Qf1(MY12nJ4jU*{cGb8A@y;llnKcJM#=6ajRk2-u$} z`jJZMvpH(0?DD7o`)La@6JG!fuCX6^B1QVW0gk_yYK@(Zc|ZQ+t&ll^1Q`MnQVPhS zij+&0g8nsr<9Z;zo^Q|ro2@@vP=Ts5{;DSjmv?K4|1!Ww!~aZENJBK>iOP3V#|Hn$ zGzDT_oZw++s3ZSH2rs-RZEL+rBJMKt{~_$Xqni5GwNXJ70YOCpK|twBmEMc=4gv`s zq<4@S>C&5kbm=05UPG@@QR#%)X>RY-h0ls_ix{G#`h0{FanIMHRoLK`@Bz4 zREAn>kdQxp`ZCualP>WjQf;JA4F!&s@In%2_sNt5%CUQ8$?fUN?;^B z@S_n4VJaYaYuN<`u}KY13-4Q=gBgRS9zNx@{^U5<^cGSBm^lG{w`z_p7KWse+(AIE ztq4^AOhQ6>z%i(vr}T*chVx%n>sQWqz#Tt z_j*#NLfm#kqsyXKOZ;z1j+7p4cmja<%i3#KI;JaH?SY3HoD8R7Rxwt3kzYSy-c``k{U-#oi=aKxu>&|`@sVeZVa zL9>)dAhD;ey8z()j{qo*D1Uj3m!G(PW%fOUGibAUC6fNT_+x#KLY$j0aH^>HKc2l2i4EBZ0(xqAtbeO)d z6BlDg>Ae?}V8LE!t6!hD(psbjhe745;>-WE+6*?5)&*8^_UT^gzq+OhO9g*4uZCf} znqf8=)mDz)wsCb<$gVTQ(2uNgYgAk31Jk@ev=Y4q_qQ;mqrkO9HP!qn9eXAW93`1@>25#c5j4<@jNLKjDm~>8s>Tn#*4n&8ox8gbV*>ga)b4X^_sV z6x~8%TT(k;RYG98#{@Ky!)g*&`!Z?y+kY%`3Em0+(7BL%6% z>+6kk=}WOt*lF;-+B7S0gRHvmp1BGi$l9(zsrP@&+mbf9w`Q5N%0E|VDW8@FYJlTR z5ySVU1nJJkZSNW{+F7tHJI;rtxJcyvLpOj zQXPOqi=d_tZyNBrV`bUIUnX%f^%GDo1$oBXURKgxp{n4VCMG6sH&@=mmDJI6Le0LX zl{d~))p;K11!HE_FE6&tmyC9|^` zme^%u`^aiN>tANJ3MIu{#CJd;&3c*=;sW%E$lb<8uiT*K9>oTYs}Xvh9z$s9hsk25 zEgl7-nj-bwA8PWwW=*$)NI6VX{I*?wRe!z}c;4#5Ws&m#;?fT}a3U`yu~+Wdc8-7w z^6;SRxx(xplQ3W}nJlvZcOn0e>-DcEVo*`kt*gR!Pcp>R;3DxU|2UbA8286 zpf?}?0i!SXDMFRvC|@OjBiaXbdu#!(xKG99&s<630}zD;y8Z@fTIx~ ze8OYi7zwk&Lzd~o#Dv8Q3{kx#t%~V9VSFW^v1KpF;{L1)TuD>&Gwu2_m$v1-&e-8I zPJH8u6JD#{;$O_muQ)Bnf--f1W2@dv*#STeb*fB^ZTil3Y7qqvla(vW%ggKe8~cg$ zIQRB=Y?K}NkCz-EYolm^9zX|5iaD#fpIh^mJlR=)e=o48RyL zphN(KOjc{k>dC)AlIlCrpnrY#|5GLY`!_G9Nk5cd(EtmOaW?l0zWhJRp+|U?Chb%; zq@7R{9faxZf@Z$d@{NX4$rF^T+54Xu(f4oSa$4!T5T+?*f_usde$xe^GYa#{cNohQ zL|R)3nyBdwAKcY*@;!SkW@Rx{KMV7ie^lnA*ON?F!B?WssMYNB14st3dgZfDxk2Oj zh%RvcBDTe8ON$9=*+c4fJmq?DG)vcdx|4FeHKLTx1BF`0+Ozh_AFoO&0M4~36|+}s z-+y$vu`$ZB>b&F{F9j#StW*sDY}zgZZk4c$DtLu}X~z>zKJWddJa)sIvT=d(cSdBr zX)!uEV}z`_mE|;}Kr~aSoQ$deNeYle!QR`cS8E*$)RZ!qy?Hi(>Y(+hk9C1;EsVnC zGwvNi+35){hEQeT)}{bJ?luB|4+=E%q_9Yh;jy>oh2Y^gaustOarbgaRos&-!vwo=FjfZO;?+<0j?bpyay%Td8nFIXtNn{52!P8} z!tYboJ$*81uN%hfIaP^ zG@j9;thpvn1WzS{O>jzWOL0#qv>O@*$d#?m`iWs1n@nXG(FdkusAhM|#JBS(r8}lv zWxIMouaPm$hV&`KdtTJzI8;e4;)URx; z);1B0>^lk2n0nMi-{fLJD$cc!O3XT!Vec+Sxk0PeJq1Y(6JPkcPEeL` z_u}Eg6qW4r@RQwH-9K?OY~3#(r}&>OM;OeRSE-kQE9y3XF9_s20`AW|fj55bGeB{D z4up%`p>*gE|0D|>yNPl!>skQ>iZ#*_VC z))eIr!r4yS{b48=QtBhM7#SlSWKTuTleQ8(W7tbRfP7CKCjf*`K>xVD1rmo?S+1+> zaPq3+i*(o%3|Yw#tHtS{bAsQN=&1L3M)T2k7}H3P<^uN>0~YsE}I!BFRY7Q`-6NSsw$_P2U&Z zG|S#3-NUjSu5*WpR2}8-6e;sU5HNOOQiGZz(q}JhF4-|GTG4B9WktWOV69AFMN6n# z#A|nrp!w^K`a7tJuXfxGOlPptkj;+QDlr%#&LwARTiTd+HTUNPCu#B2p_7|D=3YDm#W%_F}fCF=UA$;$(3hbmG4{N7<9OsNj~&&anV0+k$iW zI(_0f5-uJqQ~pr8#}Z7kmv#$Y;Wn&s-Cm}oFgRjW@Zm^z?7ZUZFuRi9qW`|s%~U&L zSr3)MN|%$KjcB3xcB4@>)vT*-N|GA0ZGv6MS4bRXNcvzkKtCQ$4$hTM6v(*bzR$dA z9qA|>pcQA@#>m2juLNe=+aFkEVmd-57Ml}pxp}*bXh1z>pm|<8G4+iVV3^LNj6DJ0NOn0 zWx0NBuR~S4wf@Hc4VGkt;NByrs*+AxBl+C*Par~r2q%(Ht4R6PgXducc=Wz;cUX(8 zHmE~)xr0X!KK5X3@vR-Xwv&uSU;7r9GrW&p2-yE-)Zt^;5__#Jfu7d15#&BiVl$L4 zF`O3Z`&B5uky5-`<0Zg}&YU$e=JK`fd05il@Z$CBp+s(+bSfjjz`-d6Xu*{YkfDan zT6bP)HC1N`d24y?F0h@V7n8ViW3|(1oKFUQ4NoA~cNG}p}Gbgai0EVxwE4uD$~-Zc0# z6Qhpsy%oKI@ER)m$CjRN{4FJe&hFBu0`oLO7c4N)u>$5Y!R4>JKd*G#Pn5s9LnJR0 zNxw=2gEyH!+?KKoKKN=XHuv$%1`vVec75T=@#V+U1MG_$c8$1uUBg6gFucw098dQo z6QhW(Ez{MQ3+I)ka8xpxQ;zMmjSU2=v4J-;1DY{Sdli4I7>h(Cy=d#Tth5NmcMlMi zok53v7x}P&Nny%iq`p$_M9oXvlhmZct(}3xrDX<{%Zf`}%Zm}?ks_zHqi|?qb{G?u zI-w`#>XubEp;`!?U^#!t0rjqnL0AFi8PQ2jX%3v>hGIn28ac>lV1e-g2lOF0tA*Cl@~G%&h#?UQ+_lLf&k!Ra z8iixcPO#X6{0K}-QnslEIJo}q;mRjrug3g`*E?C{Xeb_hTTHh^MX=<+ z?731x?@jZ99|`M1IrK~|=S8bcfJME=6%87@>}$to1|xr_@8q$X@_DG02h%7?6IWfV z>s%DZ+;`>Gn+(56FoZDR-ufb%gIyHp`799Yc=h39v(U&PTp_M+9||Y@W8DA;-IdeJ zUioeLtBixuLH^RcsLY+*WBDfT=6-z z`l5tIO4-Ujjj=mY{!(%$&tD^-BVYO}bYwMxO4AM++&;Y_VF&~gT)cU|f z)_2wkOqQ?5jfYgUUcZUS+-wTB&U_r%}te{R+SW*cUQHXH!%+aS6nCr)6%gPfhi!-vu$vMmrgo zTeMDpW?Bb21_27;b}>K*v9$M0s12%&e_0rpH1z%mhJ|;xBFUd7whoEOBJ}?9I8#1;E{K$2j5r6Nt0O%5u_iygZbmj zu~vC}ado2&LR|rQ&I|?l36;rgl3#uUk&EN1|`^KA& zblr9(=Fu6TI!q+BfmVw$&;HD0?VK2L5$N{xEPpkQb$4NUc`%5i>(0WJe<-`4J*`fi zo?v`$woJEbuh<|s1-k$Z0WiWRE5;Qqy-&#tL+K6c^_E5!#9=!p;KS`i)7@y2J+>kf zM+M9+y>&l{#433;rHa7=imR)&?Sp*SH*HY@?MEm1uq>v=jzEP;KO5%tCLXYVVF9q_ z;_S-@90o7Vl-a8T_HTKAKv$CEe@JCzU;*D0;xTQkE&V*#%7;iQC2{9N+r5|P{&)f+ zijSlZpxS{l`~aR}+U#~5N&5P{hhcm%-0U{;rXo|T#^NeR+r_klkxisdTTEkf+3K)2 zpT}H>;sMjGcGvY!c#gBIr_M&BxCE9f#q)vH=dW|3tu#`Y3aWceEE;%GlloC&{j<~@ zF1d#(q~+{mnWI)crMxe#26IibxoBCLKHg5zGDp zghltD`*lHYN3BIGx%F<2u$on$@CzMV#k4bA?(a_Hl{xZNG zqZwSPW~rUlzZPQ>KF^Lol{ijR$Qx&n&1{ovI`_jGX4SJ25xV6glWzTe+h^oSKbzgR zc9$kGh|fvC4ZyytEngO;;lfSqBN zcTJ=|UbKUkV<__MOn7@Qk%g^huCPDy)E)#Y@ zmio<=*7!`j;p`eGRM4$0@qk#bi>s|FnZxxXC{v1?4!YV&UwC3 z-L_C%XXUFyRI9r)PM@@X60K4tSf&C#b;NQyj@zpP`MN?`rXXK0rLD=u>3b6lBA0C(aO@wW3B4QMUGVNYeB{HSAXr~sfGv+6<|u1JCep@s_H-R?Roe?2 zQLjqX(P!_4&;OWuf`nupMY*{QyRc)lczg6)K2_dR@G&ea|CPpM>MuiKgNZvcY^;bl z$sT2PNKo27rYt~S{Z1@XZB`tw%#~oe47`%iYHq%zZ{OSC#MON-X++>BoYZ#rdRg?` zWv9qZC5jQEmdi>k`OL-Hx!&mH`ayx)PQm%LeU*>g47-fU;T)j*HdgLwbTn7|psG2ZR)$z(sEm$?* z-^kyE<}@8x0-u=b@kt)N7Q8Q=%-`;NkLUYN=4JMaOSwU<1O$y*(EwkDV&%vLmZJ9T z$>+kwewd?1nsAJja0mH{o0!#X8^_s~-PvfXk%fkJHS+ncH|gB%eymbVWXlKVx9p>y&?@}+2n78cQlvDz-eVO%TWe&9`{t?3wyN%~Fjvdys6EV)>l^0RYl5^_+K!^WhDh#~rNx2nV z@-xf#XRgt!{igpwp0nsbFS5n-Q(|Cefm2Dwz3L)oJ&aLtNX81)Z3lTq!~pOk%%6rbTgx;g zIWWjrb1{jC5bHWC?&BkPylK`N#eFi|^TInC>b9U5P5n)>e(wKf7 zPSsd2M5&s$no_GokurG*D#X*qIziMM(bKg>^DShcWA}Rz@BX-$H=2u))7SpdWFl!U zm3>gXZPgA{?&&7UyVNjB9anye>)W7(Lpjuu3K(=Fg~z?!`h8F8ztFSq)TkP*MXbDZ zlDeD$(?8a!)ECGdD_P5*y~BF25cW0FkxkyFZ}NG{GgiZU`;Et;3wgCFy9%#Pi0&vUdB_OHIWqIla%TkArE@^^bZEoH;u~_cNV6 zyLAG=jF0ueix5#UhC4^{Us#FfLwN4SgDW8o+67{)FVBUP*C&7Xjm_~o+H_=Cly(Kc z%--++o|o8a3T+uivwr0LoHni5WAX@oW@D53}SPJVb zS^7J}hM#h4z&N|cc9N&GpQ(bJD{W=KP@X*fYnawH*mhCr`y;Qb)0Bh&Nc(b+Sn@hBqFb zj=#BD;-!^eXhVLz1l}jGgdHb(3@5)DkOcpX#!5VMg5>@|N2Bix{9LZvrZQW|VRgE) z+2BSaX#RvaDs+Fm%{EaUW}HCKfGpEDEWJYev(MDiXtNmfJ_|Si6&#tTUP&DOEU4n} z>_6cM6Cg4nV^yl?xLq+A1$4v78KwQzL;;4efb0$;imy-1NzS(Ygs}_vw&w#f!m}yh z8d$tZ8K@3CVkSAod!!uMn{^Mhzr*|YzQ6f(D3__rp|2W%nWdXd{vsmsY^<#WSWqVp z7vw1|On#oD-=7KM>FZ|k*G^#%k$r;#F*;npRvzOf`j5@|pD&kQ(S6pslQ5E7wD!UK z%YW?j8b-~2mIyz|wsgOR+B`AS+GUO*3=fC=BciadUB zblA^`^2$jF^a>4}aF%39jbF6WFO!&t6-;_+WVJHChsC-0?k@#dQFN;=m!@#(f=5K& z8}(=K#{euKMTq|!Irhf-7>Z7sp2HHw-zFx_PJ$>;)iqYO2p@wnyw7iby*_e@fdNSt zPc#2=dQ+`t@7#+6Oo$6&xJnmMIc|Fm^#F-eFM6h)2!Z?V)%zr%%wbgo*uuuNYI=HK z$ekSlJ<4B|`OyZV(T}$Cw$}6sYEbl1i`ZutVwDtDWHk{m+G*#Y3uR`oc1jL1ts2dh zc#KVL3};W%#b-~cxatoRRCroxzO|F+(Col0*%ljoAO`Umz1}ojkFo=npv6$ICwHJzR9ytv= z>^S7g4FPII_Z=ZATG?>FlovQ&rxzgMR@ZhDfg54$A~QidX}NAp`vG_zt_HO($wj>Rg3^71waTXf0|dVBO{K4{X&U%q(s|Y+yMLzku*E}( zZ{j|wlAX%XFQ!qF0X+e;9Mv>MBe||Lo=myh&LmPkNeH{Z>ktk_%-jywOLd}nF?HZ{ z5Y5?9-N~iQ9p_|N8S%I&kWJe0!-;KEBx|9gbd}K~OUYm>HXYeRP?cRHk!2P)o=e&( zI_a4WVyeRCNvdyadyVZ$Y`{oyzj*a*+D~*!1uNrfio!PS&R&vmZ;8sAU{Bp0L_5Am zZ89rL_ox)J@yKpWIA0%1*kZDIjSpKMs(A@PuBOYxDDQwu^@=}2&khG3_PKcwS=Yc_ z2jVJY+jnbr@ukV;w5f9Ens*U>JG+@y|FQo6^X2EPdj;z1_?;GX|K!m{n&OsdLz6E+ zgxiRa2s5|i9kS_w&0xnVPj!-95{Qp@z+UNn@T2REI9ulT%mO=e(0eRhw^@QMhsHer z6uyKn>&3F;oV(e?!Au+l*Maf=$Zvq%#LO(XBshVplDcQF&#=1DP+^Q}4c ziP9p|DKlE)Ij3q?pE{>h{|Yw@rDqWiLKha(fAVZ{hK_B8wIIvcY#y&%1EOc z3q!O|ver3Ij491lG3Cl{TCSJ#SyaDh7PV(jF39MIoO(6~q}d`q{sy8PY;*sDcprZ`(P2tcUuqBCo#M26CA#*(2lE}v&{`XiHo_5qP7omr z>Ta3X@_AcSnAc<}}ikl}x z+e6;cRR;(=;$k(X!i&xu-Bq0kOhAv zu1CaSXg>>`G`IH&eLv%uKAGC~+0*_VwZ>2U-K=oKsbFR>+5NzZ7KX^gjFwR{zG1so zVf0T2gu4X3!JbiLo%$tF1|Zt_{hRcq?TS$)PD&`=>6_0ejR$e#I8G-heA<`j8CM+j zUtL`rJ}w3)$nx4jQsPY8QDqUTmSIs*-O^+lgEN5CVuZ3qKDJ>>H$wAu6Zc*|eMqym zZf00vd?Z3@)tm*pQCSF(!sL>uU)h5A?4B5cX86k(kbPFV6E)bl0M+}zS6IGC-6qtZLXcZ^AYMPNudo0Rq~d}cfZAXV;YxZ zai!Rr|KK`TOz`yFXLM^R7D1-YRctEiyJY{>vz=oS)wV!){gHo3ptDr3ye^Ue^aoK+a346Jr|W^)qkWt53IK0M{1LyjE8LKxozYX+rM;|MUAg6+^wK_`CnwgiWKiYfi z?j}9I;ALxq{3M+3f5y$;L|jo{*L(j>(%0tx=#+AlH0oxuZ+q*x;(E_x9?01u)O=t@ z3vn?RFMh!tLl?FfEUK?hRn0!@2 z6n?zJ9N+)NN*!Gh7K3a@2PTumQe|{eg2{gIX7Z&*BmM9-Fwo~-Ah{Bd@E#*(|6F|e37-cWg^Pe1C)-Ho)r4ARJ?(ob0TbnwUJpr;X=5Hl_Zq};%s1+q7{B?3W2 zGY=0>lRb;09jGi_n)%M1mtwuMJ~x=7+w3;+9ny}1VUT{$cRdL&r)OO+MVYVtjD2_O zD{u9*pDwWF%g2&#AR^oS|E2@{%?9ezIuQ$4gK7zjplpOjTavoAV_T828sP2+aOb4c zbv+1H(odDPx!sWDaRqInS(sYgZyk0PwP$#ewyg%APD^jkq=jRp?Mi%W@xM+MQ@yYy zeRmF47%FHd`$f=j$FQcJ6jiH2(hoSo1bofZO9}UV#_8H$1z{( zv+TI_YSx&`bEv5bJkc^?hm08!dOe$_^ztav)HNlmy7V&#&1o{VhNz`lQQribA~OP0 z^k=~5B(>6lHt7&l>N6h}u4+B+7gA7Zv}|B9T&ktnLnxUdm@)uk{SMWK2U5?qOqaX& zUUV6na{MfPZ7JBOtQB`|-Aoofx?WX981PfMrGmC-o@96G5$0f&O znza~jwr+)x;}qBUd4TFSR=K{?#v+5<*!#jTn>5COY$w{8%)3)FHz(jNM-V#dWfJde zZ(9Ygsewg)#Y;C%joF)`!Ncj^=AliqN9 zu%+TU+xW|MD9okd&HuJSrM@!W+Z<3-n<`+;y1(&n%kvhloXk?2*EAVT!=BKlmu9Sa zS(6D`d^7Mp+~GHF){rupLA$gJGa%r9;Efo>(OM9hu63z$@G^2NcW43lQ4{kg`Q=hW-e7juow%NCg;J0l66m1gOS$PZ_UYNTa z26dkSH-PjsgM+nCyo1#gVb{V#8}vq^V+c5v{WB4d;EQ9+ zxVl(8)6k(UYR(Idn6V$Z-Chu!pBQapn%7pTDdBRe;u;P;wrQ;nVP>ho=|uKg2hwIS zxAZ%Efe0@>r#E+keh!}OAThP!L_FmmZ*!n=D=rsb3{*8~HE^0R8dCVPl|->wB3k$h zEr<`xuh%T5&5Q-BuxmtB<7%m5M+Iz_BgMWCgnifiwOZ8%(K)6!m(f>exf_Q8-nsmEpZwtBtJR7J>rqCY zV3y``f5Y=(!Y}N`X^e2^b8Uev63}x|SFH}cW@WJRwe~{mrHgQBrp|l359)e9Yy)?{ ztcvD;vk(oO4RudHI^6^8HN)pTn=S~>Z%sY?Uk*a4TS25RzM3T!10nWbv|U>-jU!of zbuR85>`&kS_g^`DsafNP`8a(qJ`*Jv-A9tKGn4C&e=W8*;%M@RYOO-8jBpKV{Qk!s z9{&rE;U7l^k7Q&Bo1I?0DhUu&QX43(d)scn|H@RNRV3)-U792+x+Ih;B-)*IvwYaLI;Xl3%*C8FNnz5jG6qk$zWC}C~Q(zjvK zMpQ8mopLupEc33~P6J?>@;QWAWXT_(9t6n91A)Qykd!J!R8&;u&E+W?oq@>`G9#A1 zzqZk=rW9E5Bl@ji4hKY1bTVtZ0Lzh75`R)3kXnmqD+H0r-lp7AQ14#2o+fjLO}?Be zF&Jmlr)yNywz5LwV7qErz8{89cm^EBm5UZRn4Z|{a!w@?R0FmuEj@q+)nQ^p3IxQW z;5sJ2V;-Ovn2^+vc*vd_zRxU2i?g`zh*+19$@7|v{qeZHS(YMo-RS*#lA{ocp&ut| zT)S4ZEh!y=4mSRb@V1+1YDo`G5@)5<6m6D1eHpYD>R3lUy!?D$hPP^hvI2VAhb1#j zc}8-r|9aAU1BZ4RdC6OVqM2^*s&6@}-N;DqBB=QAma`C6Lhe4b3i%}FHL#9@H)bNE zb1~GwWfxL@0WX31T;Lau^jvUBBnb#E(0d}bS0=QPKGQ!AJrwQ;H>Rk=hjJgcf+};{ zv&G{#mhP~ovawM#INQ;-jOWPM9U`MaJm;;y6TObVTs1>-+u&;o&Fw|L{Pj)taqtlR z*)s><5g0ZO+?a7nsCLtUK*4~_tm$z%Af(e6cxc|!m295pLj8M{`H!+R*$<~3$Ii}H zL|(oNm#kt~3i>9;UG`t+2k}i3B=;)H;9$Zgiewjx~`8r4@gv+xTU|b8tO@b{5E!MO^AkLJA?~1 zH*G0-tySYX9p+o=9dg7s=lDCh^FZPgc`ag&Og?algeL zFR2hyWgojXZUKzewQpTRy7S1V9y|KPf2L7@?TlxaHo3SPid++TQ*YWJP74gEH1qjmH-Q8c)_QJ-NKUD-gC2P37;DO@Z@kNVz zT|WOhb9U@)_n;N?95erxj$>;$Kf(c#XR>Nc6Kb|HgmIGa6|NIUwMy&0C)pOLq6w+L z#?IK{&FNT@7~^j_$VI~2xPN=9zUoVBF5Hc}?#V1KCDE6B z5X;r_%cfg)Qu4FWKKAu4nzx|K!&YI!rp7!r<6FvWTz;Dm+iS~9mA4IgWM>n^eHljy z*Pqm;jE(E|W%|9<_WR*daMkABMzTYgNL}?r%*qnRsZz8ojP$!&T3gSSG)b$2znC zS2m#teVm)_t!z@acP#0ACP!*Due7Lp$$RpZS~Q1lKpkJluR^!c>k~ocRrAs3O{vY6 zdUL;uZOF~Zq$w9rGA07S2fctAgdGsAowRl|hNY)d9xhytA{P=m-Pr@MAzPK+f+o4O zTEEl;O}G|03>+r_Ptx>}5{n4xmhbc`Fz0ht2&|?8| z7`$7BtKBm0hZA&^i-(sN3H&6Pt+I)}%e=L>7qEY`1jdvr`cYQ7pmeEA&dBxqEB%>* z8iV4ebJVTl(UKYx=azBjzs=+`_=Tp942q9_PCKJ#-vnH7u*vSPvqZU>ZG31fW!@#- z?tY%>)fbgSc{sg7?B*FyzC7n&d1=2;9Nz3@ugB$T9PMGBUh9Lnkx@Wyj88A)yNKE? zw#BuHiaPW}98D@ltk*1n+3LKho{sj)zIyda>q#)Pl4$@ZF#-ZVYKyIP-Alt1jM*-X z@K-$MH_Tb~X?GoTwDTS1sGJ;(I;oX}bg-w6@=9FE3OFl!(fF>)6C;-+VE8{;$)Bvq z8g=m+lL@PTXilY`Zk_b>c#HJM=da87g~_cAjCXTNMm#QId(1RInDn6x4D&rfyS;Y+ zpZz{^-$Ye^L;X^wM2Ydn(WFSx;kCw3sb^blxRf!jo^h95^xe1fzrN-BHsQkp>_p=+ z%#*f%zH{%hmy@BWP0E)o`FWr2c&zte7Q&S)cdM6}N-r;8nOQ2OZRweCLJp@@#rrCo zzPg{qO768CPw4w(mFmw5bIP8aPySw}8moMJJE~!iHP!i=B;8uPt)3bD-OKdCdfIdI z^Od==wy0q2X+uW8@p-00!06OWQp~a-Yi&rSBVt5f?VIW*EAD*8JIH&XiGoN`( z6`ajJGCTagcglYP5}GY{G6XmRuyBTCh-%kktzpI|!v9_>e|74x?dGEbFDqquAa;p!hf^%Di56dYL+SxP6ydEuE}UiLQ-qCa`IV_3 z^SH6M0(+s8s((9eG~N;<*A1+8hrpvi^;F-ST$V}k<2**^eG{5r(=L-3;(nEi`|r_b zRhA16o(1C_B(XHc&YM5_5 z?LOjCO`djNPoD%PWC_mmFgCL<=@ZYX*zIPS9fnpKW5|2pxl}AAC87i76_$q+Yj%ed z$#$4+=!G{xVCMm%0Ed;I=$d##`CJx^oIB2~ho!o&&}}$!^Hrbm7xE_xStNLYhDxqoA%8 zX~o0Cab45&*L{yQ#FnRce6`}|ooBlKauBFQhKG{E&G>fSPP8z1zTs;R@laI->!G%a zaslgbmKc(m(L%|`J`o#$Xs5@kY$X_cmtf386TTsX=yNUs-+6&R=H2W}`;%kbyU1%s z1__OAXWto1!i^L7HD@I%e}ErC-8?32)+_X*zR{5c?!LR=)~^xxy~yfq;H8ZgsN7x5 zJ#C$A&Bmh3#=)=uC=gn#V1iZ#vqL zspXpT=H}lRSy(pEgSf{XW*CZzTUZ+5i5a+EzT>%9Ub<j!azhVTN00p+O|9!;p)D9{P1h15TnrmmhwQ4$^~{5 z+)J2pyO*3A)Z@^4K22ni6Jt1)kO zXl_J!=!8X&T>Q!G7hxeO>Z?MldRCyb^u$+h3%78w*^VD(1Zd^8_}0s8w5a-02)SK_ zI*MMO5}+L-8KHYTbdQY}V3nsIHwNYhJ)Ld>V^R&^li6FF8PGM@`Z-PPL*@T%0Wk{^$DdwJc|+zFo~zV2^puwgr2oAtDoI+aH~eeS<&*jSI! zC)1D!sD#gonR4CSoWlD6nHfh!x#&#*V2vfrs&Y0nm=ibv@<$c{iXc1eX{EPL85qRJ zXx<1IFm+qRf5KcGRiMNU_d|FN7XlTd`Oj{SxNI^bYU4#b?Nty&zLDYjge_KGOVLw-uhfHnf(4~EW&(f85dSKiBE6tZZ|avTPZYyEnA5ZjAn z|I>4TUz3Rl;XE4Wi~RPZKyno-+(pp{Sa-ZIXGelFI&w zxX^Yyskpct4$G~(`@-StD!|uCa~~A$LSdG(^c$Uxy#Z~KTp&5$&R-)KO2FE5^QywI zF*<Ib_(%LhE4XKVe5tW1S?)E z#jD2}gVahvl`kMBzJ+4gK*{bw|1G!c&G@w(9OJb%FXDniPmZyMu2N2z>#Rh&#hr}~ z811|$|Dl21ukx%eNs;=n@#x{FI`JGlN82j_L?9)%yiRXo&92)IdS_4d(W&_Sl z$R)2svv^k|v~gCFJ!9uA?tsX}Z;A`_LN3|HOF1GSXqX^J^#;gAqlQ&S=QE~po-@UM zBC)g8tM_oyBo%;a9pm!krB$NP-mXJkqpthehbR6M8&jp<1yJiaBd*`jqwQl5j2k>9Y*sICHibRQI1KdDraT2bIPUj8{A{6hb7tLw1SeYJl&waiFv zI~#B;N>!KHOCCqVZAvq)_-?#~tw5Xhyh~N<{^Isw0h9e1TiXg{=~?Het;&(_e&qa- zV8int2sBA`C(Y;`xA9EGfKL()CeW!9lO=Y2i2^-S8aAyYrJ3>X6;HtfP*8gd%=(f< zA10wh>l0XbAMIbmS9fFLHs-UK#>CWT0lxD}^dryO&%Ft>PZ4BgTRf2EFO{VBb_JDr zgtW}G1%PE(Ejot$Z)L+rDWyk4nF-rMl)=nQNE)Qrf0giGWeLv+gU&Kc=^qJ|(9`Yz zELO3+fepa+(*_b@q5~*yP^l*PuF-_S%}i^>FP+{NZFnOYf8^ou5D_x7b_EID>MJK? z*1z7ZzYCgG!`G-+D`xP4`1#}6zXea3ZCm&wJI@^~m)%fLPYZe~N6BKvg|HzG zzq+|Z^8h8w;|?LevuXl6TTPivS_hz5S8MvM%K{h=K}&kg@df$beVg^%9D1|hcciAI zsJLHmH?@I!cLi_)zO2sYK_nXoJ1cL#Lf-*iq^|DeRD5~f6q_?0d3+9f^LX16F4Js_ z6;t%$gN|zk&5LpshS=!2(Q0_;6mT1S!`Li}<*SZWGV+JQnx z9Ihy01inPvHQ%vk^DI?RL2$+*1CPL$;)$W*{FXb$;#NCj=z#`pNi692ZKWe+RHYsm zL*r4k@QtoB*m0m-nJCS~r{r(<;PKi%?~WQhJu=Jp`RC`RPg$NXe#lO)cEA@I>)Wqo6N?Q07fzpSKEpn4YsbGo-Wpx zQtX`0D7bzpnY6NDGaWodQveeO5hwo#F2=BKu{u-#DprFK`oX4&+OFIxL-Uu|8>WA%+|A?Fs8DGJaXL3pgi(xeijm4$7Lra$g1x=PmYvDov71 zk_yu>Zm80MSi!zWeXA5~OF&k(iT>*goZ2?Olu~dG>nMo-k5fLb&+@tO*gSc!4Y%q> zS#EQEtpwkLU6^z|l~#k6oYG>mHjjoih_X&=+3lc-qCji6eA_6ebwWxDQPkD*llwtW z6vGzGapc2Mv0i>5D1o``XP$HZBy1$ z2Ir@eYk&J?tlT-B_MAtL74@H&?~!b2k1Qefl6{$(jcrL+|JDACw#5oy{ea%=jg8vw z6V^uFUCS!#zOkUSPV$|4L0-&Da&6@GTdxW;rV+0L=%U7$8;v79 zXtT%;x(HDO7p#}n1dC{sS9rS$T&OC2!9S*B2iI#1x{53i6nQj1#pFtLN9k zwBw523hy5rmU_)QxZK*68sY07qy7c@mgv5~JJDr+mmZR1*C_O`dFOkb_BJ?Y^v8H}pnpXbnEK><+zMl!B(sgjy11a#&d9+;t zA@-|NK3VtE%1%O6bNTVGO-mTDdwDflZxtOLY_T|0<#X`Xn27Bmr5;)pCTB@nCv{L@ zIDdsFWV7!9XW~xj$DzX5x+#5x0CCj!)0VnOuM6XZO7cYfZ?C=AGp>8a*H_qehL;1J56PLI71PgA>t`w*qlML+T z*>zb7!L0HgX0)Wd4-?iqpC8cs&?7v$)+%LjlxNvIfRZ(DZ0%zFS@?q`mqNRHQY_#r zl}ajd$rtkOoz{8wG%TMbWjGP%Y3D{>yjS%Kblo|}%I&HIR~bL6#TCEg=&RONp)xbP z&Sf|AOUfcjkfA87{?SR27~eY4!(y*D1hF(ik+i1;bcPCBXG-vACr>wp!+B92^?*GS zdU`SkLKkUGl@n?oKzg;bZ8N6_0-Cvfk6F0>fZF}xK4ATd?e%ErCCvLU?g1ORwahbd zxh8Di%>m)zV5b%gKs>wc6u|x0XsfNGCjRl0tg6@t+jnpAl;V>gqiH)3J|f0`U+O)7 z1^&3Kxf<7mkV;&Q>P71wG3$Kf7j8rd_>1`at4c|hq@0l@7RK((`GQV2O*vDf}iW=5|mN2aq+EK*r6UVAufs_Bg7nE!FK z-bmUeH9l!gX`R+RTSg=whzw!~q!E(aK!C!OkKK;Kb%-J2^iZ#sZb9UIJD+Vc$gPHZADLymAh2g%a7fL7TWT67hY0KzHxrHW=xHH-8K&BqA!(t z?ptEiI+f$N8REK~3&@Ln2L=Z}c%jzJbog?0OEQ?4nQ;y8-u>)<_xz8o_qwICQ{#OcEbY`XdCSKLxs<%a| zBvJf|zg8Y}LU@vdEtU%sq0wN&yWhT;gf*ZS7PUCW&~ zy0gDiD|t65o*t2A7)(;b1YwFy)CS#w6-JuE0#w6bhC_j8;QOX}kCcBgU z)U%5<`A(?!Up4QWXW+Xa3_ULM5F8nrO8s}v2xyhg-AS9Le08=-{A&MxbII?WD^H4@ ztKz#=cf#u|TyPX$h)>nJE%wXNb5Jf*cPSJZ#)`}y&ZS(Hx3Cjuz+5b>Mc7`4NT6z= zKLR)AvKdMKW+S6!0wgesp4(E-=#E#}&3kp@VB<1JM3*b5>QQEIxDUs~PDH&pO{xd5 z(Oqk1GQFp`tuW%wE@5URRs0n*wrGJE=~nNLpUSG7wR1K?Zly$kQN@MZqx40-OTDSv z0k2C=8~10QlhzvX`u}3b1iSp&aOCPU!c&( zYRKOPb&X1Orq2uKk>oS)D-$kXn=xD)eUs*ASO-kKGRm`~AbqR1$Y0MvA8-ggKQ_ew zB%OQ73GZqkDb@jYqbWxAL_(ssD_>FYE%2QWJF!qeG6D0S%+P==W z5{MErR<$&*C1FA}W5w5-lx!5IR2WXxMA<#GNxcTKR@c4II@}8c{^x~K-ZIK57V1?P zz~le(octTFN-Mu0Eh|d~xy|9ozZ~+f=fJGrY<%w143ApOWWjn32mG>lnmJK4hrV_S zY-u+V7MVngNfyQ5ULLi7q09y?unxP`_=HjLJ@nO07ke7{RkBg^GCz6w@O^$mLwWyf zW%iw8%Ud&)Frg_yEw*8EZl8N%@tzHM4ZGbQJd1VAMx?p2uH};>^FE-;d-x3-DBQm5 z>MDp(e|5#@kmB@y>*fCh!++;~Py{_YZ7KmjpwXYny)$;}2Z!%c-Z|3<^~F&V|L>I6 z158Fneio5q3I0Y=e%qw#t+;v+N0wf(V{-yAB~|#n3m2Q#9c2!<0o$HqS!5@o zydFJ%)BE)&RP)|EH3gJKqesP>CEUp6g;u^+ZuLO)w|U@g01FY5Q~e)I0AZPWo! z;glJa4(y~cdg4e>sM7M=TH8cz7kdhJorl#)3UJa`p7X?};rs22f6_JC2GS$; zXILj6l-Aru^RJ~61REvcs%Bq87+B+zgd63<3#K;?KcW@VG+Xi<_Hg3T_mLy_%iRd2Q-Z+y zY2cr>RQ}8N`1KooBQO4ZoeZ*@{gLO-uDw4CKtCNUiVM=x((u6SEc5eE={uKZIJpb{hG}j9&#Bh`Z2#~wJ zF7JK>$WGiGca2W5b4j8Nwk2Y)5h6_;YUeEBkt3gKw-6vK}%BSEB|%w)}` z{S$TK@4TtMFd?`s6X;4$yB=BDhyD1XH`JYRE>uS+9Y*s0Id|>9z5fjXY`tM7Hi7HK zod4``|KS;mcaXn)`I7sVj7(JI;k2{tkNp#>LadWIS6lb2QUjP5!{>8XAZ{C!4bXV#7c;zeA|Nr~2e!z~8k0+y|Qs~Q! zZahok|A&wIr>{Os))zrQsbWB*d?UicU(jV~p@H1%_s9R|CER~~N!leG<@Uf(mKQgA zIh8V-d3%K!58g|s+_?1u^H|k$u+gus|6b4i*LV0Y+qGTIzpG2RU(VcjE3ol0D={`T zcS(Ny%0BRkW9Hx}gd_^dRj%s| zz+;H#$((eR=ch#(Ma58d3Nv~ad;0?9>fmSJ_T@D602Ym*HGw2+)Ey`^M$?>E z2TlwePo6w6osfI7A`b%sdTZ`E)JX))))_I%WI9ZpQt#=>P=+NYqpzKRDTJMJET5Cv8rvsmbFCYbwVShQQ(ni{XCjk+^OiuoY?%<$j z8H~XQ8Yip*^EkXIzpyt-M;BpDfJ*X+f{tqcB|$XslWeOG=2x*dxYNjw_df<8e%hn| zv25V4VAzM3R}&~$GrpBUvnq|YeE9GoM7yO={iW3)8%qyBrVwmYEtNo4x`R^30GL38 zK`0;a+mBw_$SR0c!h+EoCmDH_g&sl(jtJB0jkSSJ? z|0t-*o^+8K!kUwJ4fGuECfe$LA}K%u=NuqJu(=Vr%6-9lF)oBlHTv@5>j)%($ml-5 zxqb^{T5&7YM?=VMO}hOfa~o!DFV#Nt_45UcA0FTDPk{!b-U_W?xHJ{u<21K1X{RZjDKI{>gq2H}QY@@&a1|j%DWrwcg2G(7Iy;Snl|Ukb^9V2*A6m zb}Ja>7IIygDT?gj%xOQ1>yyG-4t3BY0ll_#a2Vyd4&&NQf8 z>k7$7PW1X+tS!MjP~0bL;R98rwQ9$V+ZKYZTm8aNR1j5nbyN8iJ2QLh4*2qJ5F zhaamAW~oL2E%!Pod;c0U=7j5W#pSV3JM4^<`{|t$SdT7jef9V$usJ@J?aAnQB?tp5mqRwS zEtK4mQU!ucW4NmK4HxX^8<;V(i`Ayj0G&})$bF3!D2v@RC-b%S!lW3=Inr&+)E7(I zSkkrlcQ3{-Fc-H@{GKQM&ja?;V~>{hfBpKROVnDX<)g(#&JiFti5zpZ(Z6){ z>MaDSNforvm)zH=FU5;^S7NS6KCvpO3Yf@Xx_!H&qCup;&co3=av5ynYIDFoD}CB; zrl6qmWc@*YPyNwSB98Z@)^FQEO`JW>nwx2;ljZneGYSm7#;1kiX+O;#5Fq6{ydiHkwNj$ zs!AX;>sa;yT&_mTyuA0Yh_Skp1P8T}`#YI|XwqG{h!l&vBXBsbxb<7L)Q*pJ-+r#Z zJ_9RK{7rU zK8u6I_gWju%@{TXxW;ycq;gtHd0y9RD&9=Lvr~U<3qj1W7k`QEKKil9J_D-wOE^6j zn87?8e`G@%pCshgnHkzJ$Nd9y_`6xa-kr1n4+W&LSlB!5mpDB4em}(;cdWys|=8ZX?wQ* z!u!RFV*fyirX0o&i69n7UqqHY8+3V=j+~Ie2xBERwOC4a?Qi2qukf!30s)!JH-mM2lA-4^7((DoWIt3~g`2swMR0>uBF zzC#UjRpO!-tnfxgIz3D+LBP==%VkOd%OTAomd`pL&AKOFU1`UXR*5I;^SxheejZIxc2OI77wzn1<9O=_&{FFlycJ zfZSN(jwGw04Q_NfvYaN-HubALP|PQ_@{pYXPZS1pEe-o5(( z805qQEon?~04C$8`Qy1w14d2BMGk>GkY-0F1a{$`&Of^dLtlzNAx#9tF!~2q4PD== zX&5pLRRWs`bpeaIbJ*ZIi-{hJrm-WY7Zv_o|2^()L_`Gr)D^u{beqAYuT;bdn8ZY9 zSrC(WN<;fVp4cwP|fR5P?vP0?AVB+iAHy(}bqpyG)M-h1$nx#yY z3R`5ho-5P5vY>!T6fpL9G%(lAai|bbe}3d^WR;n@aIyU9L2gTwT~W<1F7Ay@4nP>Z zar=F-$82GSGLVKlq0&NRr zbO#rCo_{O;iQpA!ozQpv@8y=`=)&S^J{rn2I4Ji zEw+2R^m%45B_PED;)4Kb@`$JVs5Iik?~umdJtnvuCc!GM7po1&q|2~mDs0-Ni6Q_( zmA4%+UtON}DWXLRlPla6uqy?X*Fcls8O^?k)uj8xYL5k;PEXgDky}vdEC-TyT874PhzZAOpH%w+qzhAD^BhHt_I_e2*-2 zETX_>3F+aoRmo3K@6XI>U=N$eBwf7`3a%flsYJY78)3yj8hgDWKoPhg(8#r$OArAW z3Je$-t&K$-|C&aS$E5w^0Z0m|1?4lCUdfNLj$l$}v?r5)x%hXt*}q<=u8y5zN?z!s z5#7oH?qlb*q1z#~D;ckR60FIX|8@IuR7`xx%xuSi6x5L2VYBs*otkQ5FnwYxa>y)?~_~&M=Dp z&CM*RF;b*7u@OF<*Eag)M1)?*mG!e3@u!t@HjbM>Q@{rDR0aV zssH~SrHfb`vT0Cd4NXmEPEJ)Y`FQ2PNBmw7yDhNx%cB1+pRF34EZT;{BkS)7d?lNZ zcuv2UbmZ9P zm{I#ezPPgTYm62y;8`zK85h>3GlW;MG*MPYglrXqatC-3GXO2(7t~H5-H;3co#GlB zrzK#i1Bp>V^8Jd~rL7RI@agA=1u~kOrG7X-joZOv+PCi=)BI>0{oRl1pTS@ftcGefK#%u_lqDyC+SrAy(%zqmD41_t6(Jw{2IaJlG5 zkaF$K??;jbE5w3JLc9pKyi}oD-xo=>^(a&9$78-h;Sa0`f=eHcR^|eeh*5L~3`=>=7o@cim zx>I|e23WB&VgR4zLagv`);1K&U*eNY~gWDmFIXm{HQ27Ipu=8NblxT!*bjWtagx2u#Mw)_Wv5G1DVuE z1sMALZoL0Hfg6A*7y~6$=ICARPaNiEO;#ZJd&_!^+l$MUmQHrEg9K1Y^LaXIws;|n zJlFNU-%?F-I)QD2j4%2!qimoDK9*M^sA>z0o2CogK*}4UjT&fv z_@qea?&EQYpcgVn@T$lyOusK;1{)*tTVaP#1cSsMfEZoIhYX^;)u{kvf=-E<47`p8 zxTtCYKh|3JO*W8F?bVX-{#6>6Hj5i-*UrSo#%=}@^jR_9A`$nE(FY(2U-2@GAcvum zPl(;w+D}TkeqQr-KP=iy_q`A71)uJu0W%e4P}(G&-S2Lrd&i;A(kpV9w3-fPiS|Yx zg)gR81cD|BNza6(PF3Hq?US;uMZp?$d0R3C!WgO zjRQQ(H1YhzqJ;R=spIHa?Mt5h8_;yT# zMe7R-1a9_SCtJ`NysrvG*uLNxyNd4v=Nfa6s)@F7%=qlTDbTCvT>fhC^y`bFGzAcE ztx*)lg+L+7lqlibIR1Vaj$XMn7B04oYIEZ+S8L7_%{_y3r2{I=a*|8fdTq{!3^4D$ zxz;kn*HLbujBqk`R4Wj_2HY?dQ{>^m(YAb}K7rPzIx-#m|Bu7(^6EkVA&wBdOsMvJKj+hi1SQMmpbeRV);5 z0#beCcXsGkG;Hj>$%iOcT`>#>Y6d1tf>QYyvv6zXt0zYN!BeisU|1J@Vgy{zfcV2O z)Dm+KB@kMm=RjmGuDk2s0#Nq>QWc_IE=%xKOA z<#_x`$m*H*@b&G>kliExvOm0zP;d78elMwQ?2O-80|FH=H9bA5BX+Piho;#A!Ybo^ z_iKX(AQzB*Qltt%gGO>pxOZa31O?2OL#J_1!6mVO|EVFnZxZZa%o*f6iFG5#<41s# zgYgk}cm<;U=E1mcI@ZPe)&n^Y7Os=eT}v+2)!l;5+s_G|J}Fl4du;7P9sQ97s=5Yg%h~Y75}6-Rp%>z92!?mH{SS zFJ2TWG|nweyiUA=16a|q<V#qLAcjIu8gSdw> z&jY-=+>d+xPUq2dwSYe@Emekw?SfyD7;1^GIXi4R<2XHdbohz)uWq?OxiqFgWi83i zzSg6GX$nt8uOj~dvU^_YYqEYZu2*S)+jC5G=mc+ki~j7JTpIK{rz1$`XBJPd;E_Z6 z&jpb*Bm77E`}cIJNjbWRlcRvCeZ>ZT*zplyx(;> zOrjgq7^K&n36@5$+|e~*Bg83lP|%a}8zC&C{IFgU^tOEM`DquZ?P|Cmww5|J;Q1i? zLFmE%UY$xAd)a5>?BA{Svn+GC*5(way zd5t!sA0NUxMM*%b=MU%b{~TnH&@eNbo8_+%%Mc`tQVajFj5nny#@`Gs`I1&Q!2JSG z-gR~pl)j6}9@BSYZec8X(S2+b=)RUunC8=z;1q%cas#6$Vf?D02XP95+@mt(?Q`&9 zVZu_Im`e@h_0v;EhkiYR%P)g&A`QS>SxGWO^R(VFNCj1sD6!*Ov&!b<`2f?crJ@}* z;oU&0oDIE>gg!#Lp3S5$!r8-50sL?24lch;5R)A8t*tFUQev6nYl&1na34Gw%hPD#t-u@p1W6(sscmuumq}d;P#Tg9|LcYtx{@Hl{}N3uwH)UEh2)h^Gha zkz9I-*Osetk^mZvKA3RqW*E-Z{A@6fDto_u)GaV$zjU}UHmF6@f0f$j`^?#?RlrR> z+{L$YbayALpGj9esm#n|@4ex0uF!-e7z?ND;%UkeO&{J zM%0aik3=vtR5jKzcOIip$a7Xbp8E!`Oa+v8hO0Jxn|oD6_=vi^0i;k=Y* z229F@NjfoZCG7tSrvoB5`1qI2MA5Ba@ z9G0E2BOb>YM3P+b+5*eWlYc)M_89Il?+30v-v;#KC__TFZdU)U5b2=Ldx`! z1W6D13@qE++ZQrkaq>XpI%ByUyNo?5m)lwrJ_aHQoq{vvQMbxIZG zR_!_`Z^V>f`^<#bfv{myHQ%!Mn)qiUP{Dxm@|~x3%thFW9n77im3T<4_zUpR)8TD~ zBH(%zc^K%k#laSD1+SqrmXc3*7leDzXxDzw-_lM@4RI>WWuPg%nbEzkiWE}AUp+;^ z{bIoF`~{3Sngght<>}lu&Bp!t^@G!K5FeS)7e1g?2j!4&C$gTux9U!?;7uuv1XwoMNz*Tc=m>Oa;~O3L*|t^0C7^v zp8LYq3#;%N92E3-L9W7OlO4Uje*}sIgNeXBm-+GPmnthLEqYHIdKmJpe)~d#UC~>R z9O7e@EFVq^Yb+gmtP-^l9ikm$&=~87G^Q6Q=s~#~yN0?%(?2Rw|SRvqvEY)@R zZXOwcIr9E(-@1TMBTdv(Fr@ZB`JW&{`0o&oo{>Tw#dXLeSx_xkxK z{kaKN#9bTSKXphXF+$9~)Q<0~^TM|U**M=izFzOl9_Yd>dRyQ%*wx}mZDc){ce_-m zjc~$~E4O{o2ngPlE6pa4sktveb`Vz$_PX zK#7^3pI;|9b65`YEnQ{C55TC)t0pE5>j9M@T}ZHU^qYhoPGQuS;v{PI{H5?89rFzN z&wyIwaO4d^52ir0jNgJ|szbzJe9GrFmrn+FoV4!>I?X;KxQ1JI1SsB&Xy0$PUeiKp zVtjnV1tZ{L8+02aOESuVe$ zSGnAPHLyHMJjiSy-uA%#1w(_Vtqi%|yXMvxL@F^?CZymcjIytbjcZdX%z}e9AvC4} zg#j5wm|3^{qS{V7b!jPLkaI_Y=-o*yFlmx!Jvwne)s2?;132nm3f2v-SbG7x$~_Qf z5{DsLiyS!C_$mtm3($QbLMcx4wt>Klh3M$=4kE}mvWzU z+dZpPSf%jsMp;%s6dpgY7`AFWMtPh&=^5ZoK7GFnY}P+EZmpD9LvNo1FCK5zsR2;U z@>F6(l*G6fGrIRM(_bD&Umn^0F@&5M@Lqg$R=lZ{HSI)5Pkc*yx#Bi;@&5`d3%J@> zLM0@cl?kB@mj-i^^@&ONKZO`(gEXaBPKo4nk?PT!(x%4^h1-+-qc+5xE3*^d?Wt#- z_-PI90}zRv|4C0(b_MloT1dZtO`{~)0s5=g2o?}ecYsW-KGUP!Nu9{@c;N@e2^T;R zhP2=kUtF15a@&D7WqAxB>QHudvjIf)BqkscPwjR-Au4G~3z>E^dQMI~+As0ZOO^J% zJ7hxWtZ$722=j=-P@JUhgY$=nqARo;;CF1Gsy9WQk2fwRWhR!Y15{-x|LPKh8VklAl z>yuz`&Y{R}ExjehBoVf01gv@qzT2qFgiF9HjDdqM!RJxfs>gS*-@BAVvVh+G#4G9E z2lRCw+XqL-0d^LDS#qAkQW8HC%Q+QuVf&d|i@CmT-cCCoI5;pMDOw3i#3k>T%g3{j z4!@CyR%2Y}Md1cD8pyESao4__D*wKe%sFC(={iU zJl8O{13b#qb^k&z0MF<5aJXd(B)t9TrvNqTrv2*HY!C2&2D&1=OB*d;r?;Hp*KM9j zBnFxIpdM)#pZ4{E%KH+$3cxt;MkEj|5aP&{Hsis%5j(zfjw)@GLgM#FM}WZ&d37-Y zfz?-I(|9o%hT%o+0hp=-{QgzKnpDDapmC$L2wiQm+ihezO)R5 zf1su*XHT(4g@NYMph25uPtq!%wVAOo3cU^YiZa6A*a_3-8pu+ zHmqlG?KXA6;ChrcQ-7L5&g0o;f6!kuC~G1hXNlWctXWR6s~zmE*e@%jR05qryLTe! zmG>+Wb2Y}qxqbhq$obC_$lnA9nU#k=Q+yxrFy8GyUhYG*Vxrj)SiY>g~305m9_7$06gQ5TbufG&;#yqEPaKitcY0(wj-Ws7a_!p%nW@j?gh!1<+Xa`>Jj#1j zyg_@!926>|0yU@+{q8guSU6IIXb4$$#SzMNP1NUU8noM)c=%qpSk4>WTrHw{@Tww3 zQoZ3E-xDJUVo|5;dAy6XqTF4sQ5LWS9w6RQ5D3A2Xvol{6jDZB4|W*iT2!^zqr3~6ih4K z-~X?MBG>iuyq`s;r4xR8AN}UzaVT><@w#|gdov!XrbP4V9Lg`R3oKq<@mYr zOn@2-PO~Fg2PeQSGi;ekZHw{YLpX)IT>t9<5r3x(D`#!PXF7^~Of(6|KPJ&Qx6_`h zZr-o?{L3#(O6}65pQs@HY}8(#-HD@Cq|W0Xl#?t~wJ~_zIsyVbjP1M~Mk;3kN6107 zx~&WJKL+UCuC#b6h2 zTCD<=HXc2y8(f8!-3dkA6~?s9wDyB73!rG;tEruSV2p2VhwE>W80240=&yZe4}sjz zOJyJ?UOi5V?L2pSph*@>X({uz6{!rGH3(c0yav3nn0vzE3h=9EN4o$X_V<4;G znst-$n}#6M5pbaIm1xUa3j@CG%HO2m{V50*;@6|84dMtYVwV*@ae6O~;ZF6n!q2(> z5MrvHRIwQxBS>EsRJ(k0vSv_toxbNrnuun8F~&)I$pW}+XM*DB;AU!X&w4#InlQn7 zMXrq`>Wr37Cr)MUhLJt}J1A{#NHaEbi%%gZ7 zJ>dj=+0akia(qG9bVh^bQ%H!4{qVhsD#yd~jQ(GY;yzy2Cx6x_*FT7e3(m90I@C4H6TSrc}KS|Rja{eS+z>V zKTKUEDt36GsPncBA6NC<<~$1Vab+FeH0@2jJD;8EYl{vkZvd5#c7`-TQyq&1zK(Q% z<`dYLrq=5K*eIUSAu7GCQcNr5(f_Ht*u@0yr1jyDAqCΠ?zvq1yMeFk=Db2m$6IYDpG&IfRmw&a!z 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 z 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�j}T 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 literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/RenderAsync1-1.png b/certified-connectors/Docurain/images/RenderAsync1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..850f878df9dfb02f35b83cb7edf3e0c099fe7cca GIT binary patch literal 352444 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%0AJVtmdW-OXTX!HrdZ4J;)zu}HuTw=$QGzRi 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%0ASViFQDkBf&x4cqF?7- z70%;}Ffc``!fi)Zt-3&|*s2EX14e+jy*Aw(CV|2~=wFvZ7toAm$s6#m*QUvIV~hI0 zvuxE9qc1r8u8_7&Rq0nZgi!-`dUI!xkzp!W)NLue= zBz}^Ew{|LY6r$@76w1!9;-T(nJ_-xH%kZ;?;P3-AKn|KLRMJSWBT~r&j~#oZ<0;w{ zD6Nd8B?u7?f(a@9M_Fth;p1ubfX&0r%jr;9lI(~L0Ew6B? zJw?dms%xq@=yz|!r@Lz+a2gNO4;DQ5 z)caxn$AE}zHuJ(oju_CtUs;Ku=Jd7Ag`M`_++q9aw?(*+>=6X4-ccEV`|0907BJ<1 z)eQ41Z#TZqqJ9T+^iY+ijv?lK9$l~3z`f|9=mUOh8+^}B)L|&G{#x@#p3JD)II-Wr zt63cRN-H0C4f*~{!Bt&1XiW!8ELmBXPy2M{Veaco2nc9&2gtigvcTrH^d4KEn~nJvTWFr(Gcr#pQNvk9eH zn`425fBtwE=2|i!pxY7r>GYtZVG!$dr58|LdbpO?xMpu%Z1Jc8S%~>{YDi43?m(vE zgLj4w05h4DT|m+ZEFh#2jy3RKkoc80+==gy1lz3-$dY*&B3UpzJN+r>JJIWbxKA{%F3&H4Xd_9KKgsy81CY{xRcaDC6Su-UT!Fs$$m~ard95r0KH3+1maOj91 zCk--n@Aj2mKtUzbbSla>7JJDW#!!70&+p*Vx!jek15hw-s$ZZj z7=qD)k5dq2Cyz5^j-bqx6V8rW>WzQ23q1N0YQi&b>w`^vRH`zY`a2p=-?jP^IChWK zb;Zt%HO5B(oLURII2O3#2wjO@n>k(h0UQ|`sQvG((v7@v1-bP*<2ELBn1Nup*Lxep zWl4a|2J=`O*b@R?;vw_~#VS&}8~z@dC{`Ks%HF5O@gHwlvmJQ`ZSguZQ{cEk`qbQ} zQ|avlWYbsiqMhn9j6?c%_yXj4bdd9LVess%y*C%S zw=nc6@r02ic-njA<5OH?D6$#}hAseIr#*zGroD^E&ktv{=(oIhKKof4_vO;b73pj_ zl?P68_CBK-h5=X6t&aM6T2Zpl3<~r5KLrK5FzCYXQjhJpH^$xGxaDdKXiTY{vIiInM<1=#|+wv*mK=5=di zY#6)qI$Q^=Dd)B6VV%K~f-?Am1b!6w^q_{lHs7Xj{CAx+MOsL$lE>>?tFG?6%-MBy z{+=Lg)gs4rB%Qon0MF5cKRu8lfeej+c?I!~w&Tng%CeIHzV5Gy@VXuM0EJ>@xF0L&o zZyJ~Zi{K7W3t?6d0>x;t0`x)C)ZQj;EaLeV((6G8PE3D3-iV8EL1fWu)NN0yXsSag z-t?ts@VATR&mPSD)Mq~1tI;g?N#A>7`Sn+tLmtI z$pI2yAv{!{d$yt`zze~DmOdCE(C={{cQV)0i8p7RmXra}6^k$L2E=cvFQVF?;4!J` zcs&^u$Y!b-pl=GeK6tf9-gm4_I0%1hNhiF`aI^+Ov>2~WdV5gfPi3Z4%?hK7c|F&%=v zKv?z?fY&~{(n05p*^64md2md><)*_tr9|e})4<(PIyqSnH?OGb#YkXEq;0|w7tq(A zn&e)+;8E#*Bm>vK6f6)DnXQZmOaZuEgyvPGGS5m^5H!-3a&fhUrPl6)Q3|!27Okl2 zIBIUI->Kcw)p{#Qnb-ttJU8UqH?;tX?A0pLGW zpdSM~kfQhrm#c@12%2eC*V2?!iJGWH66&=CzwcVqWg3b!!hK6o1pY$x^#+5n9njr# z{D_|`LNOACA14w$I#K9ImAc zyskiVmS+;`Cl6A1v@A4Lny%(1#FbpD8n`8gAx$OSaSzS1$b*FXN6sB@hduV4Z0+rp z8v)2Dss3^w2Ir1jN4yLPv&uIm^}Woj^i!m4n%sRN40)Q_Ax^H}+r+M$!UPA>vd81n z^zzphL|;$F?U1Lm#9JCNG_2jHb29CS|FNFsk?7iT5wBu-rn}>mBl$2M|3;OK8B2dy}-m!g;36y69>rlzfY4e+p%Mm!Wg!QSBHprbQ=VGBr zi2=kna>)u1E{G5o@T#j^JD+$EqX1zZ?tMfIRH-IQYwJm?ylPa}-FcGJ17JSt$7_$= z*XIW@8GN$%Tl(bU%+DR%O7qaDleD-7|b{8Fq?(v4BxzUt#LzhusVF@He7!;vespim(=6_tTD8)_C1P z*DvSI2o^4H)wNJMR9>=y#@QwLqQpA#pOs;f)}zaejsDbw`226VR2>S;#m@B2EbNOM zE6HKq+PRx?F`ED|u6D~MV_`_-BA~qH@V%!rgNtnHzSe2fb~X?@-rqEi_pMmkr>{DL z*}pJ86n3y(1s7FG0GO@ifzy>NuqerLr6qvZ+*>kKHc31KY!|Vmq&@Io`rJ)6;lpD+ zDhU{}K6LjJxt<>Dwi>CUg}Gp_QA<&22K3TEF3^QMEAE}Hxy`3Tc&WpU@jCctxph^@ z;Y7`t9Bgn#6_3@M9af4)GLDb4%!!&wXr`sSFAagT{RXG^(G5? zd=VTu?_}{qe<=d;WZt2lWm_-j)&Thg$HG8}=F+o0MXvTwvPhEQH6lf@txZRw^mtb zgtBgGq^q#@_X-P|bdx7Az-`^{L|(_BniY%q1MfhmP+?2W_yFV%>dHdqvkj1{Rf>S| zpn=M7r(n#aI!3kDTga~HI^Wq&so3A_%yzn$pY;?jf(PtO)Vf%~L?k>mx^w))-ow3c}l-y4H7N{uRB1hkg>o`TgV z9-_&i?qkhQFXhfs$J`8!_tG#=^ryXYCBc#Y6I@RoJIIEcXayu#Rwki3gCS|p4Qz%^16dns1dM06sanL08M-&Iw zAV)fdVMs;j=EJ~V#o@dk;6gRf$6$iX_(=yN|1RWMijV{`LJO+Y6|Q~GbOw+>uxUFc zoIuPXs1$+HsEnyBrGU(=zk;`kT#c+ZHL%74@5edPY4;PKB}o+8a)sGhXi~yXd#iHD zNj6Oe;75lc3r6#ExM)KSqZ;Jj?jTx#2_QBCy z*#2~pgIc~CCUA?Od|@KKul)7CwJFBz%Op*Cz$Ew6cB zsc`oe7^29&7FDG(Y|n^FHG>p%c(^uXu}xLSv98D5Ml1}@dSo_0IK@x+vq8s9QYuVE zy}!7f$;@|weJ&;b^wb?MYIHJz3b?^XS5y++i~E z;hGnG1@@MeYY>0JAO{zRp(@}vD%U9{VzT+$FIJ{ge0}vjgk0miLh;dP2-{aczmgo6M$gB5w>|;myffGm z+}(O(9*aYkhVa2z>c(`)p+|tR5Cl8Yxvtk7+rN<3L5zwWt!mHxW>Wti@Z6x4DSq;^ z3`+8wHlOh4bW*;g4~%((dtFxt7z_wH6Q2ZZxA9@)2d$fWV4a@`S;EP1CgnPgLa2+Z zO`X88QdCvU&!$BoJ}VD36l)_c#`k{&vm&LYwnXs&iWz&sM=07#BZTcn)W3muO5O95 zPY7;6w`aOfe-j|w%ZRKlP9J{fcZka4CzLwey8(w#KT-$@e-`-HA9@h)L&@zIaQqRo zY5C|RBA$XfTa@l4xZlD=eDG^QUqd|oBu~iQas@_KqT?iH?$u5|M!#aT3Og_u8aH3T zNcVh8s{Dy`88Dh+_ax9_taNUPsk*3HNLB3QyOzQnh&&J;YCudHE&I9z)D|BvE^JX6 z-7%N~Qv7o8Ekt@BPP)u&&nsm|eY$LpBq2`4L!M&$x!E+g$yP?>6b}#teV@NX9Par( zhinC+*Ke{?^6q`XKh3TunZOi^ZnIj1&GFv-pWI$vD{gRaDV90eF6lXyVX!iGqly|_ zs7UbcKZU8d8RJ2rtIKLy&yv7z6)``)f`SEsMdxEQ3(Q_{Jm~zMVaN{SryW+_Ykp(_ z1Zy#LiueZ;a6KO3k_N-Q#;cq22-f52AM0_HY1x?%iVcj4wO;SGwqT$H8(gQ|uNIHF zKxZ@xv`k#h74Ghg3JF4`PH+UJC`AyC59D4ce2x-OtXCNW$mxgF_@h5O5A0qNeurDrlHME!rx8&YJ1_s%Cv_~~u zSd85T<`J+(B(5oxS!$?`?P~@An+fJJ*9H@kL@bT43q8cKeD*gsS7(@Ev`F-|S{hF^CLj4LmDR;xR8dzHbaCF6S=exe1Y$R~e}ZNIO^8T3Dh38nY+&6K4iT*m#tbk(2NlOT5GPqTCx4ks-W{m$qt_6X=9=T;DIYlWn<@coARWAhFF-|*@1f;Q4Gn-W z_~>;o%IX5#f0yTASS%I!kQ(SWr+bQ8G7OW_J*z)`in`>d&9@T$qs-YJ$EN=KJQ63; zlgomqt(XvfSsz>?azORf`(P{PPlBViwmi|oe(&>f>r7X0(4hf@1Y>FvA8&5L|3Xy* zWgdndy7f<@Tkg<;JA#(~0et*7x!{cl3Zkln>ZJ~EadZIdtGd=C&>Aw)`>G=*b*}Iy zepBT`=MorP|IMG$sm1253XNrfHIyl6bkGRI*03x08zRH_ZS;d74J=N7=;8{_ih2li z0eiHln9>$lrh!vhrlRo!+4q3>9SK?aw+sy{a806nJ#`zNOZ8zR_CxwW$jTs*@|#;* zhiN2Ys*Cfx`o$$aoBZ)tO*Pge0KoFcNt)oyM2Y2gJ~$tqhVk{O4G>+1p*6DzBSLH7 zb=MnHIK7$$dv+9{K#C(s%wbKLF!udWFXRtN!0R6EilmbxUo)%7CNFg!2~+*XL|g17 z1!s`BwIwWoBQ!Og31+P@_c75IzX_S+;kcFP838S=b<>MgI1Kxh-##Xt19f9=(!QSs zWHadd(`*AfxvV>Kz|esgP*>RX5)P# zgl2n7oouJ!jE+pGd47&B2@ufH$9j0O(9h|>VyB+)?Yor8h0r}6at=c(06m@$&wJPc zY-NN=fuItt5fO8X)$%mH0nfeemxI9&wxiFyhX4K|&~g@>eFX+}%!eTSzD2`82s4we zD^y=(d;~XD4vbU;l#JF9Fe$Oa#t@<+AldGHDAps4v-7Fws3eENVBfNnEkK58K${1t zdl!kx54gYT--s0xp`1uoK@Ubv7>H4?y^-t+FPQ;ws1}kQv(1DrjnSN6HD&f-&R(Rl z|8oj{CZxdxa$WVqD-g~isA`60L*}MHo++n00~waV1M%j1)@PNoRiONJzs?mOc6 zIQUF$z^Dt(rkvYQ3fEggEk=x&Fg__=+(nFN!hss7h7Y0t+x7*J4I57LT=c%o$^Hob9U1Uc(XPdcK}WB0JXC=q&0Pye!)~IPmYAa{FeZy7G3GIUUOj9eDVTS=Ly^7H za>*}?dJ%&1DdHXX{47~T;L}xnQ9vE@q)=3~C;hXk9ol0V8wPnOP$CWfdB4}tg+&pw zpM?G@6qZ4VFaTXlW-n^gn$ltv*>evCo(@gOgzcr-n&Fo{STYXMw zDU)(ex8s;rljszke#?LlUsB?XA*I)mJHb|L&-Y1V@UDDqKm3~m2Y1Kp712Eci{~EZ z3P~^*yy5h<1Me7(!aOd|CW78E5%er+E`umu=mBVv-}bu@{fph83;iYculwyw>`ox* zLB~ntA7S3Gj`!=iUZID*4y`sEDbXWXcaf+5P734^|GTYubh!{%0JG!&{E~mr1^hqD z_5ar`>=|41n~b-3=E#eJl#OhmeVTxfEG|jxYTQd)O72?r}t6P;4Jz<-@mPp?O_ zff+?iHGSt~c2pDg`|nhvSmoPx6|E08V$b%m3*+vxs(yQRG5MIN0!{KK9t17@itvXp z(-3;JGR*_hi)uvj?e~`d-mxBCTn*J4jkV%OxOM2^y>?iK7bQR zPp{ku>h5>=yw}g%Jp6mIMBpoqo`u_F8Bxz9(I0AkWm>RB{otS3lDh@HV;aD8R;NxO z4hNPC)^dats<=lp_s)BNVF~#PgXCBp-$`|G7`YfP{_^kDIAT`F>o!uyxiK+sY1Ece zTFS9-hjG0i=9MjX{uGxmVYeL4xdTL~1C$J*hwymRSg(M7@M|3jXyF@)dWqw7D8o>M zKPXB^F9GEn9&|M(22voIxNDBn9hVUo5qljw_L`$2P`{|_HFmfdf(1;;)3j#rYojjY z%F7AtLp7r59!JI81T3z%yDhxx=}0Io-FBfbnlUd*{2zZfaB-Mx&b=?cq+ijuPwWNe zU72=R=69jdZ2u6(J+q5DPF&k2^mF@Z>s{%AftPzV1MU~Yw6>n_zftWDT*U`cuziDV zL^KY*PYrmVqF-g3a36R@*a7+tTUWSF6=4wM< z=$CXn68&2%O!FcFOm;2`?>w(!G>Kg)3zzlP&jb@y9+>RDHG5`x#R5xaDN#uVs;wnAgv z6%eZbffD_3_^SQkW2;3;eMZI?YT$=aO)VKMOy$3iAuS%{u|<{Sa2U2~^f{VD@8SOb z`ICg+)_v3)dY!+ho6hvl=!pAUwmKO7_Gr1!NSmle1-~6rH2N1MsnZ-2=OByjf0hjS zPk;N;RaJ!~;Aib!+yCU3nc-23(`f%TegD4_#^CD89gS&1Ckq*@Jfum)#Jmh#nQAvB z;5+`wN@M=x`ul%ItNYJT1Yl@?@{s?$WB<=D`A^{fe^@Thk~0Aj+FHgkYgzB_xxTIy z07_)-jc+*n_tLK~IY?gAEqmmgaODD=yt8`}hYtNJw+Vc2!qL9W`}X*6D1v0b?ys)1 zJd64E7dcVtz&7~bBPafsd+mSYmo(8?SZtmDQ8AOST|B1Bv+&h@c-l{Jc<9j+tDl>A zw@=W@b#VkUTGQ29%Gec+td=U~=m|5br1_GhDR7Hz$tlo?74e*gIHil&zpL>VoP33> zP!?b|SkrCqq%aJOu6Hm?1WN4y09+M-!$QnMEddprKepOwk|K*iuUKANY21@6kq=xe zpv94)S)_=7LI7@VOep%LAIkQoazt(DbDGM$^gIa{fiu4|)^32w z91Sph@`j-aF>b-8Q_g}Mv9^Ky+YFU|f~~7P0Emi6w@~h~_GoDXjGDlw0vc~u%j_mp zfrk3Qh+6Lj5GtgQcm{@7ou5)f_IdxjVaxa1w&SF{`c{|IkL?CkyV(?d*K|vFPNQWt z*V=Ht7=6>ttD?WaGRPl4!nMb}ed5qZiAq{@@3|lUH`FsA-HjUj1e&a<%N1L%&x#2H zFgY^}bY5SfSy2CDvOSX-DV(l9!u`az1w;>Km@*RsZP^y3J`jyvfr$>43i%Vj`$q6Kz{$1nE98W-#GahQ!6XO8 zK{y~wGQfo-%CiLxFXD&}1HrAT96GC=HpbTZ{z+|f_BZt_ zGEdyEhP`3ki({D~2GmW392M<}NENl*aE@Q1k_nEGij+pj4cKL1tR!MJTyvh7P8JyX zk7>pq3cRcU2=SfOh;&m-nz!ku$RJSmYe7RX3?_%TDx4XvNLmT}Wk~>acKR}AvI)yJ zZcmx$qBA%uJ^@2{ucP*PwiCdafSm!-7`KQzMBo<4h^B9(vUI{M=!O~~k?DgZAF-Bd zV2If;a@GJnK`nUaiyP9MqS!*5OJ!j~;6Z@3UNg)WX`GbQu-jg@L`^Q#Mnf`aYb^%F zBwr8+HMtzosJi!yd1iQM8iBx%F}VYUTEls!?~pyfBY{x zS@uCX+4!@pYlzs^v@~G?y{B*W!)Qz#NH$uzW#g{#d>@1!TIC+r@5Hi2=$*$@cEhbG z=P(8309{TPB9^^jW-y{+13nz##uU@};_DL79jnKc={q*%FZMfK+L26RSv!CdcoH~S zxQ5N`?9C&4A1c03#oi$L8z#e$?q8{6WNez3w(v1aWM3i_z^RK-Fj3OdfpO5tqZK*+oWg9*0lSFL|x0lflW+= zmG?88AgP2lOq-Da5cEX}J=qdH$7>S^T^;`{8Uo{%GbNnWiRr2PY%eWyhKn~7A8tc4 z+F%7!tH=YWFqpro5t1}bbwLx%-0LiO&~WrSe|df`1n9`h%X>GAKQux6Kp*HKLpxt> z+{>DO3T)4dSU+QFLCGQ?C~_lnZyA{4~O=SLv)K(*$o(g=Z&LsW%1Uc)2l&t zyzq$?Xu!nHcM)%AKAr$-(7o%H<(?HGi0B)d+Hvv*wW+{yC{!QUf^;9sh2LWvIl&T$Hi{Zz)C!0Q)l zj5tuzID2m;+r1WO%G+08Rm3*8N!U$y-iiAl=(286v643r2O9yrOUql}^@^22*6T2oW{79*QjT`$`sX|mu4Mem~R_O7|! zz~6IF!=K$2bL(0R+0L_d?;JDX%X@aqbYm@N>ew4e1)9L)BT#O8h@jlXX6W=)Ol{ce zrI#KoUR6`5E_i~pRKqnvB6PBmx*w>^w*0r?377xJ_D3rXBF9EQ4HtWMVU(3irbZ~|FQu0|!etca|>*a;{Kl)jYn&rgj7` z4IaNPeupuHV$ z^e$xKVu^jYnTQYd!vGZ|KlsrP9{U62;zf<2tN6AP^exb>tH=8Wq`YT_B`T(y%X`pW ztwYLJxc7sQ-Yjhb+I~{to}>q(OW45)E5Xz#a2O1QBUH5=(LlJFG%&A_X*yG8`v}uL z=BTUesP`b?gztcQ;B9SnjJSIBnaKAS%>#zP&dB`P|}dALRT? zRRr5rjsCyXQ6jKP@wV=#q&58|KAmJcu3(p4r*l)1J3dpAaovlet?lm5V?*(Nd#%{W&?$8WLptF@Vj2Pu89F^ug3XkWuyk1OzW$}j>03zIEUqH?s$N`Zm z7KkKeMg!Nq&w>rdDjWW~cEwtEzUi5p3d6u6;JibImpO5<9SwNiPae+2wJcl%w`@hw z$riz*Y_BSRv_Kh|x>OyX?9T%BeaaU*YUbgG{~OBJzgP4%v3}2<6RbZp>zl+EMtyVeBdO92X9*O~D;>uvIg(}I90`qu71<~wBaD3SD*wk_= zHDltOCK;QQZ&LSiw5Bp=9w+CJgxq&*Z60dpTQ=`sgDJ;Wul#w0mJ{tKtpABq|54s; zYlf@DK57@tpr7J)axz#g42f;5#+cIpV^#5$LH((=`)d2BEcU~T3aP97DOUaEJHu6W zGuJ5`fRy^9=$;P;?vnlR`7^S2kKjo>(403Sx-HfF(UvwSU%o(UvFxT(McX?+=IdE3 ziUroDMopwAs)|1nqJbx+Zjz2FhF7+HEXC=tE%0(iz`b4e zdllT?b-+f|18z9Zs+dMXMWGX70EM z*Ri0z;jlRVXTt;PH$s5${Ro~;!Yh1$7-Qpg{WIPCh7_CmR&A4_&veW`Tm%2i#OJn@ zp>UvS_V8PKPa+*0%HG7Nf)jjq@wcQp%DCX^E>|p3aI70GxUCy2ZU%MU`_jKxT751+ zW_mEqO*3thHuLd9hZY7kpI?Vd$-JC zu`I|BwjWh>Uk?H&QBL9RU&cgKfz4n=EQa)GB5@Qf;3{&t_ggS+`f`9Q3ejx1&SAa+?nat*C3-q_zH3~k&WfPxt&=@DD`vma2Lqw z>P)iB=+Kns--YfZD#YY2JQf2UXdv{cPj%lha58G_IiB^BxYvd>tUdGgSAeL*yxHIy zTg+ku2I|T~QNRFMmAJHz2<$UhO2E%fr@}0Y6krZASIj7Ft~Y-YBV`$68KZc00|>r(yHhhdi^&ohmyZt)zSuK-H%w+=*woCyt-SpoAPy zfa>acWNSjr!p|?s0J^@jo6*<+QC2csJa+=X>{`j7ji3x?6Q#vKhK`~iMR*JVFf5=d z!7gF#_b1l?Kc?rhAa%{-13$>qJXT5O?>&HcUJM@$B`jiFKTF!ul)m&_%S`tkcLWCh zdGKSrj1PC~GgU1SYI4P<;;#`GBLJtZ?ruB=$^rSxEa4!?|Y5#$^%drJC!VhCkvo`!&ntz2cw>>DNV;%%K&k1g++ zzfCva0<2p3!Rphk?s#}K6|oSE&E>m4L|EaizOA_~t(2Atsi4S+U-v+W{IiHh^16 zw4D0Zw#pO8B^e+p!cJ4$RZC;LU2jrUA4Mqe9A@z`!SU8J1;-`g5 zXv%aVS()aEW$|9Xl4?*nu2bPgXE-V#)c6vk7)S?FaD9Axe;KI8v%PLQoDOSs%-NC3 z(p~wcCMu4LnXd&6TNL85-k@}HL3>10)pn8J=dm=$eDh0@V-+(S`HlDYtB8GkNajD_ zL-BVea0`Cj5ZJJHXj;`)3_4e5C_({y_*$o&E~0#25OOPswKo|rna^r=l(AT|Ol_se z3odoH+h@&>X}r&>7l!hU#fry`Br>Dwu&cP-P^9SQ_D292zy z2Q23jUpw_XYn*7R6t{ZNZ@wvPu>9g&&cwFZVr}Ik*Tb_X^1TxzFP+=>Ex`vC_fVzO z{TiS-K=j3UTlEFBI)FPN+wDtSG$y)tv!*D+gHpCv9vhWiE&`akIYIa^xCZ3Vl0%{Z zvm&5KjEt#TIeLFCrdZ^K=to+pm^rx=z$jlE4EBfC2wXo@^i}tQ8pN^g{R7*auv>Z0 zvkHlfTiOnp6;Grnv~>n}+&hwi?QfVP=PuRv-b9sHA!b$scMU|TTz3fV6|TEmW?>NF z-74fN)1H_V0x47o-2O3lS&{vj`g=)L3MfWmaQs;ymCcYG)+Uwewkjwy>*Yl~4mrx@ zbwG8ZOeSDn_laETpxwKZtR2K!(D%9f;WVURG6Z^-Yqe`Da9h#k*nwE!%2nWGpR!pY zD!U3sZ2^g%oOpS9-y$#f4LX&>+*~=1>F}17ho|_>kemgBL`%z$KKj$op~KL3%0Vz! z<=?_wo~`))EE;(VZhJFpSOa4hV(1;ef_-X) zry;@j%JrZNKHhf9luq0WMPs6rr_ygvwVNi{z36faNYi*9-EYO(0~UF;v5dJrn*|j| zGG6h46qVW0XgGT1;dk1NW<=??Mh{}F9qWcfEfOE07#PP831lGYiXISlpe^pvIdBhJzg;s> zn@Rzso&;t9^jnz*>(jZ7Nic7O@Q7&XR>Gb_J0)&EOg!%Uw9q&8Y@|5U#*c`0C~OJ3 zXues$>PaOnnC^>P7(Z4j{r+aX45LJz*Xi%(t zB8`+6jhHY2L1+dMRw#`R%}oMA1uQ==4-7GRg%3Ck(hBd0!k#7()7*C`nCv_4Y>;a2 zWao6>si0!%S}}iHTbpvcu^rAz%o`{Q60)k*Q!wu{875vgGrmu_qIl;-n*n6*Ngy-D z$X4A^xy@nb!_ymlgwfk39*bQLl3@sy7SfK<} zmvE4oRtXXUl3%n~8I-1U-ImHQX`3B{$w0o!6gPxHREk^^2RW+V|H|1PvLp!fSky3Q z*8sp(+EM=fmBhD-)Pni)f+gL(a@XcEXRfk7@g3*QZeluVsEa<9i|rX_*Ua25_-IB? zj+b;JUZYQqUokjUGLEXC!trOy^7eh5mi!P}dAe5>lx9u>S;R1|vw83=LY5E>hb`9T z@ly{pkW-N0Sm`r!g=!3~)ZgHT>==Ar)RQd=tv60jjsT|xVz%Y_T2H69mh@EkB(^rKJ-b6T{m5QnX!o*$_kONP|^^7)hZ4M zWgGwEtz&`Ae^U3ob@(xx@cm;0Hf(I(-z(gk68&b@^McQ|mCv{_hO2)s&n^Di=-gf# zThDH`rTOzP*i9Q`J}bMBX@sqw<9*n6l;{Iv|l?vT`%S~hk)pLR18BC9fv_O5jpQ5`<6?<** zhH-3Kyiu2}Rbp-1YC(}B38tvFWkz!q7a@^)vJ`#hG9`^I6W!B9?Md(S*}|XCxu??Q z&D^gUaM@`8+8d(Rg54KKzFyjz~p<*OP4Y|KY<&*2{j-X92tq&MAlNv{9wRL zTTkiUlm8MwlS`3Jr}V*X=O8n~)N&OLgatB!vv>(hL3V>zM7$DNnNj*4?t7DftPoe+@yGGC5Sk_n083=E1qf~lB%2{Q zosQA|`=dZEOh`Yy{!)Oo>=W_c?L%9Ap^Sz0wH*y^#3Y zQk8L=UbSzKV(#ZXI~c6|Dm8QP6Ur|kijDOA$lY{W|5;gs%VkzsFO3`N;#e&Uaz4DxU5jB&5w;pEm?NG?X8f?pSb?9g6`UL3U|9s z(W7e{7M2QQWyuIcJ?~t*ue$mi1KC4|_L)rk@;BNu!deFR74#;W&4-_L=tN9)WXpi9 zgV-Zc4M@~xUd3F|joV)A#qaKZcFP-&w=F~>&LohkU~BS4_DIZHz5R9On`M!CuB>iV z=e($K*!4Nk&Zg0ZjqPVYJI;e?hYBK@=5jm0>-Ig|0(0P_6SYUQqpUa;QB%zg{`eV! z8usx9ZshOQav%A-QFy`}ly5fXy~VUoPP($Sq{I@#v;x4EDQe}RSTuUT#*_4%2z5;6^Nbnmi} ziWex;ktzKp8=)G+Qpwb0y!W~ErTfu0B~biG96f%P1}w>&x!zx406hn(qxh7Oslhbdht2kr!|q(Sdb<9^*4Lkow#yewvNeS#w%e}+Usck$&1XF^O&ita zT)drc6mL|r!q*n&)Ahw%8@ByBE41w`P;bn>f$x=gCAu$O4?evIdc(+LPCzuQf{lg6 zm3R~ZZzS;lJGs(f=loTf6pM796Z=Am01qWEYNpr)6MJKT*Q_8H%<%Oec0pfK8ST@&olFwzSY_qamJ1$N6%;* zeX?SUe}13wOybJo;P)ez`9EfQZv|$Ij>3@!eForSQv1701GtfYbr1aO?m8-VYv5;Uq?T~``rV-I^^YeK z`%-126v6+6MLyp+ne2+JO=jMl>ROoTBa7I@$DT;?JTl$L9+u zG^gNgS{m537>22&JVRWfbi~l2D;Rn%Y}SG=InS;=XU+ao@lD{dv557|sC|AsFt%-ujIE#`KjV#`D(m0>$h`HLmeR}; z-3(AMUeat>sCHq|gZcCj^Z*7dIFvscc&aJ$mBg~Fld92$Gh=6ro1W2#uNd!MvCDPj z6m?eA*SG8``umI+JmepCR#?7%JL}r6wSVgu)=ybyo}6&K`OqT7J9ay* zzoF3GxHiL>7sQ%#(`XK#?QK_Gdn#*R77|41qtJ;oTEMs}UV#VT0n_-azD>IEL1!BC z)G$Wv-n*)~zwwbWC|UfVv3$t$O>R`IPRdN%8x!NpFT+0C(+l+YI;_Ri>NvNZ4U1DXNk?&YkFYO8>9=ojtf9BPsfw6LgB=d~xQk-<;%j zS~cAb2AxIFzPGlfm2sTDYi`wKYBh*KwKM^%ClWVLPTQKMOP_ZC?#ry3s^7D3T#^>4 zVbI{VymQH1dqB=IpA5JeH!IjMD!kY~c@!&|HrD$|0d5ccj!n)<`8#G$b8a6tdA;}N zn)Wkk%axLh6M07hyjyT@)QCkeY~VX9+}YI(_)73~xL_zSA(zhv5{^=n-ACdaK9L&c zi6qNH&o#RQtui^5`x$TOmRe<(BE*nadlfD#7Zml6clM>Io%=SLaMdi}(^DR`Dwkty zxCnpRqh;%3Nz{0w4y`{(`lZFzWw58aq)yWaurvm%;sb#b63s#=(bMq%H+mB9jk`BR z63!Il>Za8ygkaFrc_2$?WISYp@L0{>j@V0we|ofl2o+?%E&5^<2CI8MrG;-l@g;B6 z*P^yMoeR985Shb;sho;Gh3h5<7qI}o&w8}wSY4?1{K?C?8Ad7+hraM2qmSugcl#Mj zirJ~gZTHPY>O3ux%~&at_`3E+bcE=cCcvSOd-%N_nn#KZFRU@3doijj!?@P%{w=$n zdIQ3w(XuHi+OlfOYX8)aN#EwW!PTj^l`N$Uq&AiW?}$&FBWHTN)ltroMdym4M`qmi zzRzOu-)00{&v8d_Dxz(g(C5@Nbs(nc^MlpCoTq7eSCb~zJnB}2VfxCeY0N5%$nFxo zOukSk`_zlg%R~0AN&TQNJ?A9f@{6v{qv}oFv7r1$?ArwA&=J+MZox!7SH;ry*O8-~ zyEst0d2(kP;4?JK?z>yNeJF3v-F%5Z9JutLpu+`$uMkrS$MVMmpA+!bz%DcfHzTRP z;eo<|kM~>Gj~tGcKKqi>ak^3a&AXtz3y2aZ#$|l;?8|f*(v5O-FD{)4Z^*S* zGkWZ%3lm@G=&7$n5EL8YJiB(@>G6P19p$5Yg1Ilajr7RB0tk>)Hg>Z4Mzpug+;k`g zI@Ri>8qwwS^=KJ>*0Wgn+p8xXBQIVj&S-At_1E9BdG783!#y?pn@)%%TzT|4yuvKx zp1_mWrB*v%r`zYX-A&U>R1M!fxuttk&!c!oBT>>!|ND|>1K$@f)fiMf2UWT13NG-N zcD{dT@j2;wuO3C|m1}tM-6`j2{S(u<98F?IXJ^*iep#y>ri?`_XDuH1Z4Sbh3|P<| zwiUprr5=}&TyVs;=m3xQGUi?Oy|D70u&Z98%7eo%qzv2&x0p>|8`MIuaw~WKX*Mj&LxUOJJC2Qj0F&BtM6c@K z)mN>qlorUqP0(WrVE2Kp)M5Lb(^D4v#awhs2E(gFbCC<>WVp$_+ADmu!FbF}HG0?W z!j20f%R9bSJU@GIYTb|1ZB`?n6Wy=pz0da)NvZlCeZ4QjK>b_Y%@0qmjUdaZ|$j0zqNi+@n=HJVi+TLnf|QSw*X;V-Kp~h!D>dld|yKRj@|f~e^Qdr z62M`t+ens5rw9`Z4B?*m*m9`A_)^gYEM?Y$43%JR-E0+|91!0UAezv0TcKLK;1dX= z0QD4UHLKH*Ckf+b(5WjOUo}^23{K|a0t4Md^-a-Rrqu~DCfG*F0q}*z@Zh_Tp0DdG z>v;P$;;LPG?NY{XXPD%(WUSHub0z-rd1&toH5ne;>yg)N6rzI68hgd^ zo{#;sE^nfqVw~MOx%7v=!<>hSq35T)4=?77+viJ!lx*SQ3n|$c)=F8KpI?|D#TzVU zErtm_W;R~{;tYgz8rmqiY zbWoT0@g+6AasWZUd2a#X3~xXAEjbe&UNLo)Tb@MrezqIG>JQh|8twP4C7Y?&7uME4 z*5MH_PRwl5Ax1&D@8YxXl%bxBM|ecaN)P=}k2gDQUZ_)fUjA{V3ycr-%7x;wk4K4; zWZ@ZbEZ*nA-v#QWB++_rwQqjb35%PH9>5B+ykg@Cj2nai#S7+<%vr)fbs4*Av%J!M zBP3x&ESWif{S#8cec_Fn-KIK|lPC9~D*-}QX9s#UawJZ=s77txKfS7*pAto1(l-S5 zyc_Qm?RfH>H$inkccfyqmTJ0ZLr1p9#@eMAaJ(y`T=d()r$bJl(tXSXi9h{%rni*7 z3{g`#+jZOV;*M;nUiCC8-`)Aps(C0xq)Uben6;r$>>A`8q;%r(ns+F;NM~TFU-ETR z=4GE?C^OdoNl(q8yGpM9iB-nc`7;@4l7V8-DVwDJ8aY9n=La#5X(wmsVRYnlMSU>- z*ijbzd~8)3FPbcygz~@o)bvvIrNjg*%GiG9ROQa?R95of0Pw6t0Ku;+4y5J5vXTO@mR97f(s3qHC)x>~lh0CU;ndClEG?t}R z@@V$lV>q3yw@ONXPZQ?{qqB4CZ8P((nGb5gNko0a{NLXS%{ zpAX_Yk$$6S%7Ovx_o)JYYxdz%(Q!|p!_xymx_IiM?hS6GMPShQ!?K4j>~%6mH@6Ug z{TT&dM-(2OZ&Uo)b9OZPeU7cgO!WL*h2QRl)q&oFnGOq}EG*Vk+q*9rlrO`(z z4`sP*7ITPwKhQIgp>_0SQ`^JI*M%X1#};lfYXwe3-yFnFiN-&_sBFfDWueUQg%o1B z;$>b2`~;Dyk`|x(K2iD5{EKdm+wj8=d6p;V-p8x0XE=~7#I|bgL#>0a zQxE#q2R|QeMxSSl*f=_;mh_#B_u;k_WnlZFji_QNe!MEiX}qpi3Hyn`RY0<>09rfT zq_fPvUtAg@ARu=EE}Cr?x`B>M-)&Xyjx#Bt1pH7Y7;<}N)g~HlqR|xBaQzJ6F&5Tq zD21q~6UxJ`-M%y!@~Z8U>Pv?jj;i&!WM^{)RZ%k-X$H9tR`7}NW@&XB=ft`DaHrom zw!n{koAPhGys#Iaox`6siOP4_&6u@6zmsj;g4qA?aOs}9{w;A1%qgSlf~wIQTBQR7 z4Yf-)ulO?8y=xQSLr|SmBX-^cmH%~71Vw`fYB+X3fCD60w?2E&E0)p%;pK45rND(~ zIC_kX4}jUZ0cm!Xf-8iONwd=C{nnnv)O2EG`t}^}rSx@7>u^?>eU`TF#DHvZ96z?b z!O!gAIIV-^k+0D^m$)@4P#EyzTg_nX7Mt^K4iOSaB2m8iFD>BFTK_ z;Sp2EXk#)}hY(=d9L`YSM11g#)Fk!po0|zewg0h3MU>=8T>%?*i}EPd@@jz%Y^!Cs z_S;&hewE|-{Mf#4;GXf3p%q_paKGG40IJk9r{67G5XrJE$9Xgnl1*}iFn}IV5NWi7 z2|3hLxMYpwKK<`;B(9x!&tsLt$_TB)br8~F$`Z4M&gJCEIPl-tE^aWulm}f6Z;Gf?AQ| zJyKfLIpXy1(oinGkteip;-KsZsJqWMW-Kp!yRf}`@Xp!ZD$kCFl+m*tBWyYDeUBfB z_tr(2zY10D-JU|w%=SUaPds~DO>|>UNx#}Fo^jyqdH0CBr*6J~61qXHv*7Zgi^-gV z`eO0u^AgBuXqUY<1UhD#Hc@oj%OTu^%X58`N9qMT{;fp0_{8VO_ekz~aVcl-K;DzX zZ=T{nnIk(cjk|wUEsSqnlqDc$&>=$O~5IkK+zE zCi-LtB+Sd0APDSIwKJJ~z7<%`6+6Us7vIK)h!h?AEvJvKw9AmJ&A;Zhwe3prFB=k+ zO>Dh^Ar+_7$k7UE|ISSeJ%Xz{e}Tf3HB%&`GIldL64Z3lP^)XVS{(St?cyEJ)574N zk0vnHxplMW?2WV)$A=&d73afFa1XG>UGpMg@k<8Ih$hO&JLR>iFeS+El3YkiQFQp7 zn(9Zg&@OSYU`o4^5qO}q&QA{gpM2hf|lD>-KKv0~6UMrC}C?RH2Zq?Zf zyyHnb$a(ZP%s_ThJ?DtSvJ-CuxxJk!-X9?thh&~g1jg+Czd9X!z?KlBI2{a6($3Y}VanH7+C2|d{6QM9QjXr=@ zd%=}UbW|j+^X6Y$o>DnVZ9C1?sfeMBqrezR%GHBO35(d?R)k|Ih)!a!CDVhha*sD$GaxZiqc$6d4mNM~E4J zP@keOQ2Y+c^g$Lmh)TJ)p)mBSFQaJ9$av}EYOC~@0V~&IU~ZJ%bL^e+*-EJir)Fa* z?ISt^HR-0t#3XE7xR<2Qi8xH^C&awHPLk}|DwQ5zC_XbZB-QzN0cI+)Tq$G#-Rj~$ zLW}rlgTEP*46>-4m1AaG1R~+pCIj?Jb6vs%fv&v9V9N%GIn_Nf#_ILpPbv~tkYX|- zno4jW4}!_U%c)HmyRb6 z*nNuQ$^{TM-H2#J=Rn_ujQLMI$eV`}O2}OJ{}5yQ-){ohNI4WSbEfEEZz!4`x!hp$ zk`qo3Cx~AgJ1#GSeYy}9U)<+1cNtKn!1GItbrNoOgQh-4cAMpp;&Ae;YidRT^RK4N*(+HE69tqQj}-_g!s@`cy~$sWXaynosQg^+&e z6fr~j53UHRpY-{$z~$J6jC^0>W6Gd>brk)@vwgLKoY%Eu1F2~j(eyv5=Ok=is!CdZ z{ZE=zLMexe}OfpODN>*oLkYV*#QcB zJS1v~a%5vQrals&^t)~c%=8SLp=%e9d5E}43%3`D8CK00kIjfqZjMiDRMgkrXi*Va znz(B>xd9PBd7A7@d}Tw(Nz6~NbJbRyDg1#W8j6_~GRyD+_d$Hex`{iW3dH-UT$Y{a+H?B|WI89V7WVa+B_&C%%s!HowA$#ymZe zHWwJIWr~$9dHQ{Vqt`WjQV7bB*X!vFPapykkFFCKyS<-E>5{||5MSEiKi+sY1AOG# zAjXByLxi`)&?Ur@91r@W?Px+zK7=N$3P|3>H+^(}81tTps9XrCRm%ln$lR|!OQAqt zCK@InJzx|k-8y~X-U4`$?pnXr<9qB~vjQXiwKW0|l^nt7B)pu*Pxmo0km$7shS8N& z)PSyRnnai|Y~wyzSnqtK#FtqZCELDppE6H`nw`o&{w^+Px!z05&D6B~+3E5PmX0#x zsXBKqHt7t(?0r0EYW-D7ZXANzLspf3NZiUW4+Qzcb4d;5d&j#1aj^U5?p7yZs%ToP zxFQDqSX(=>en1F|%hG&SEM#00MjGrSE-zF~_AXJxcdZ)I(7<@?zTAns&_ zdV^k~`fQS-yO6fba@bnE+t(#Yn;H$QZz6x(!=O2%dSau5S+8p@?{*7i*GyDCbRUU^ zvb4^B_B8CY$%Hi%Tj1700&EnxjI)fVM3#o9rpa>?HWB+JH;(2Q-`saZo)NP#M2y@S zTzsC7yqApz8pvIa#`uI`5uB#YF@XaNZ>81E+Y1fPaa-~R6U}ds!^a0~p)C(9U54-U z?;O5eeT<5hWabUKh5}Ym-NAKy=b}g;_By3I|4`Ir>^SG6C}|I#hl?=WA-|4qwX2_n|0H6LC5r6>@dt*g-)(v8t7Ie5P}DYDm;@bXQZ6XAz;cPPq>t z)VnON#)#5_8R@BQETW6xmyUyp(0}HJe~jM{SOuA zJVevqrJ71&98M5~()W2z$y;}eWgxz*!Q#yBtHMC-p$>a^OBO7a1-`B**lj2=gE%5s zo6wuT=n+QUs$7ZpN}Pi>iIGp<^dH1TDOg&LuV5KNoDMLy5WoD6=Z}tX7daQOJ`_1G zO?9n!G^H0PtIK>}fG^IYAf@QCw!{gKZ=WnikolHF;A3oyOz#kN^#oJaxe)QSmcD8O zEO8Fq#~~Klbm-M_87L3uI1R@kBEQ(j@%};XEJn3zp0bU*m-VU*1RZ9NTP8SmTNV1bClpf=2#COl(gyXOX5-TfPBQtmgoe$ z=19%3kapfRNodQ?z8H3y!w|3kqO9a??3;8;?4HbH>raNO&(ch%Gu4=G)X6)ae4ECn zAgm1~MmsW^8aehOGa!ZZnC`9)Xbv2L6vUzpeRn3gapRiJlRHYsV2o>Q%iBtQ4pTUsRmD z%_Brl=btuNaj4_^>|*x2CT#~^2JW2x+zyri4(oSZanD5KX=zx9yIt4YgC=spn4{?S zQp_$O_^COD#i=56=EM>lKI_F=j&GWVY5bynT5M~i-S!R1CQHwFpr}k7zZ>}-d)Ce? z0cA|wGhUklBtyJdtWZ#GT+*b5OITe*nc3LsyT);;sFATOq?n6OhI?C27H84%uoIHu zXjf&OHv?M(OwX;0V~vrARQXLxr^vGp&$#-cRpK{!X%bgY>7o$Y-pEA}$=fJtyLC&k ztO51)frcEtOEdc2l`AZDB*KzS4XP*P$3^Pr5_~p+S67#pwqpL4*>Q?3I!`>={+MR} z2WAQO?f+K(Q94=*rkj~9XJq3YGMST2%PGm)Gt#h$TDy0B&@xkSR3RGfl(PA?|d5#TFxw40L~CkTxe3GoLB_Y!+|g8w0Gjewx0%{}O1YA^C6^1loCsnp{Q1muy(37D#!{=7Ykm z13Q6x&$(y2$g~#DEbBNF`%`C=+T1egNsuDS>IbFR%K7#`j3*qEhsgWA?BzGP0s9zB zr?#|lL@lHtQ~-puNw5W%C0mw=e^<@j{UV&FNNSbD*PdZX^|)S1RM;hfzS3KTYJIX<3m8&O$an(Ed`*;|%hCq0z zXB#m-K`>Ykh>g+3)P$`TWhXii@A9N+C#$Z&w~P1%DGF{Tc5o&dHl&%SvK1fx+q-|J z>>xM!&4RLl08ggB{AB*1Tl`U8p8`h^1-c8>C8EfLBFQOOKfwQv z-S7j^HXy_~GnnwKlyEo|c{+tl6-tWc;1s?GuivT>7uRK@?t2b=bYr?ytXYdM4`&^E zzJTjV5<*UF2kzBZl2Lzwfyz zoUlTH1x<%w*m&*1yK~R387Hy|1fmC{*}cLYx4g^p1l}m8XGsnHZ&zF8uY+XNb=)iw z27U(V)JK7Rzl+_$w(Qg6(-9bLDoz@Duw{{M%%nRCKWB8;scZG~Ho9YmUHEVbT~1q| z1a)mJX{Y=v7V>|vyd2SpY6o#9=JuV_K`{vsL?_R48J{*+?T_#5q>Bg91TM_KgaST! z`DCSgBifo{6+8gCYA)X;^^S$>+>c66yJW=y*{>*(T>F44YtK%PY7u|KCvR+H9Q1EW zyXVddq0WsuTo7YCQ2NE0O~}jynQPMWyB2S6)#$we`DZIL9WP&;kEx|{03PJ)mZ#^& zGx7lB``3T!!sP52y>apgr8e7P>DGt}72|d3=d3L+t#4DK-J&0)Fu-KqVGo_66L4fw zkqgEI$AL?x`o}e9p4VfJyd4#Ipre!K6${v5!JlCl6mfKl&!lZ_AT2k?5aEj_s0|Y- zD@?=+zCHb~ZD0=6LbU7k?;l1unq(cAQ5M0tTERTy3){d;>GKqCpRi;eh0>Fv;BmdY zdFl~6-&$;QEMq7&iILthM`X2#>JuWD&(7FEDR?CpjX*G=PpKCf$#n>FIrp7KF8P4=8NI)gkzUaP zDY;-6`?&hM7p5M#YWZ?$n@r-AKHb;dv`WrW&QD@#BhUg1O=AE{GD3vSa8MT(J%>__Teg>I*HOsTSDfFoafb+qLlS^(#}_%+vP z-lC&%O;_K->cf2uj&=BaTL|*_-p}GA-3mmu6Y3W(KXBjuzgw|)Z6$f%- zpB+I2c(mOZg><8e|A-UD6Gcg_0J!v880HYZ z$AvkFNO~mRdp}nPQb*r#u&7P?N&`D!WI?%BBy&JCp~OnyzwJ!s%U?fo`yL5|XffDs<0ldZ#k5 zAg*w2@>bMTDTNl;zBC57ksU});(UZdTrq| z`qGlzO|*18a^8SY8uFd>raiA@0NJe8TvO_)K4G1DU=)(36ZzKwz4gi7nv6pD6XEoL z)=gBvsvYIV$}{3cFpZI%8T)XyrI@N9;*wEv-lPbJ)5G{pY(bmR;-F%JuU2?E!>XgtKPl1iKsXC1UxE*j2kY#Ngmz)M(;C%;iDVJ}0ua<`~{H8mUrX zR7H-ZkkgPk2=LIp_zuj8;v9ZxFOIx&IafnydXAOfgveDCc)0*l7jI$izJ=PiSE&Ig z6Y&--$q6M^g=j`^a-qt3a1Y1D)sa;vFZiqcJnw8;0%IJEm{cA?Snlzo>1MS&U#7UyRN zQU$d>lK_PM!I;a~JBgdWcPN3h51SHH26hs)xYw9BvlDBB)QT^g`S94QxjvMcDf3SP z3VnY>uT^Ttf-F}Y#cbOyO=2&+G_%3E>$Y@w+SFTI$od}z0VGf6Qu3mhD9ubdCJT+7wA;ck0MIs;S_? zrM<+7;R1nw;*r>WB)W+I2CJphz+s4W&MA0YLpvk6_l&2m{OY2buJXGE|CBNUnODfw z62+CNL=AQ?VVYScEg2sz3%u=CeP$iTNWR{rHAr;e)t%6NY1zfZwqls3YPxUAgkyB~ z!11`=i=(5A4Vg;Ivd$NI0cwql>zs{97C&%Hh#Q36k7HpO0P z?zKHy3r#nXmF0xP8BUmOJtZQiXqF%!T(V;6E*`!wL4Gl-F%hC)92lcg6`@VW7i5cV zNWK`sg1hAJCw~8IWy&6>-rUXj_Vqy4y)E5cIcKLrS?Vc)_a4hXBsdUyyGfUehKU?$ zp>BYFIzBNE{`^t&-hUeK|C5mOKOV%w&H4*2i>1FGBePxTN!{bznCPzZ0j)j9+n!9C z+{}U`hx$dLcvPH#1vC*KUb33%91@iI7ZsL*rD4w9jWM}D;U6-$1P;pK=FEQ`Vh_rB z9ydFaaoS!^rt;e7=&-6%tMMG+lh88Qg{NP`Tsy$|1YG9^BWJo^qB=Z`3k*}4*X9y+xif4b`6!=bRCm8 zz^`zvnggvPQI1eQkcBG~I0)T~5Om$o+gb5n+IY}j&NI2P23-wv$nCgjYTXv!06)|) zq$H|PCrN-2IF*Dm(ol3Hw2EzyT|hk>FdmRR#R&!6eiqa8C;@xHjPuO*vC@qI-~Qiz zVy0f7S=oDxP#MFGnV@yLDS!W^ozyiV0*_o~fDm<{CrXBkXiuf0Q#k?wPL){s3)E3b zTivK|H!C=&6M%_yR+VTkP9Fe2ECk_W4;n4gT7JE1=)WAk_R`=h#*|c{;O&;0>^jj~ z^E&CxoCe}(2ZGb=i~J|5#W=qXs09ADSXI$3S;s1ei{~%qF}ms$>^Bjc;@`y-S-!=S z^Rx1;TjiZ0FjkNx&)~nWU>3pFMfnoABg8T^9z945Sh4*;e$)YL_xE!toE!B&0Xq>Q z8PGSs`BOA^w{+tWxPwhL0=h!q4~Tn5V7^5UMbJh9fx$_w41XTWfy#*r;=TKVxXwb9 zuhK`oo07W@V+(|A-Y=|EsRL}nE!7!Qq6hUMB^zxUC2HAq3$0$4rjeRsR0wyUPSgLt z7|1H7mkUNFhanEuBhm~-IYf}1eHNdu12|J0`<+gJ?6uB|$oV<8mL`#cnPs9veF=ZW}{nVk3x#Re6Em_3wXA1fV5+x_)~PWQ6iZ zDx)`;UWmM8O_wD~m$N@cj&jE6uj88AOXxEwe8QC1I4cgVYV(x-=vo=LqxUAUc_npl z?FKk(2P@`N7HiwTTP)ec&CVUM;u;;JSMSZN*Qi>Mg4`K#ijQVd*lNBb7k7qtYLxT( z&x+@Sg4-%7F$Q%u?2n&cTuCtNQ$303>Pf{*ql9sW%@U6NLGlyLLLZVUeRteI4qXu` zEr>GY-RT6aXfp`6CtgMBl`QkAd0(RRzyZNh4PeM->i76lwNC7nph6Q}iQRoTq44?~ zdL4P>%!#HF2Cq=V9DpIkf!eM1z4|lmFD$ir8v3rd4|5EmXM|Ii*qqAAziNkN`>q#z zSJUFhu2$NzB}WjISRyI5SSX*1b>sPOL!;!RLM^9zUT8gZZ(`-W&%`?N>&WpsETb=D z4VEX#rp3P;hs+riHt*2)+@~J&<}T?e8szMu~qX%zPKIV z*HRBI^94qOmn#F?B>~slLzi*O8TZ`-oriYtu?&uTAKNoiXbUvf<)tsKdXgP;Ca*er zXc3O?TEzXLlVCSI$UOB)cZmBDeCCPZkSE)Ri6>Ug*8zx@V}@caN&rWK2qxNp(kThs zc$oJt00~a+e*h$Y%TL0#=ovb2#DnzyG(aFESB$G!d{V>pV;J)JjhOF)TL&&uif$6@Pp z+(Y?OXWmfvY|nkQJj&Aydacl_SHBjPqTBNjGJ&s4ZfG6J(2hk1zTP1G-o6JWos|*F z+9hJl9P3+zy|tH*d9tu>g`MmL(m?i@{b8ZgXI1^0vj665TwSy*6M6qo{1}>R6s{{4 za3>vEKwMe<^`I?}53Xx_d9^O@Ajmb!>xP&_Y`!QG7^^zfK<$!}q{Nw(Lv6dh(I^pf zVIrXqx*u`W&Cj!Q?j7FIN<$V@3R%?OB0Rq>=>IudMpJO{=f?EYJ2>}rZcp>N=<>nl ztFL>7ruNis?qThc<)}T0R5gMr_ve5iWq-<2Ba>E@HMzBWo_7#U+{$IUY$r1%XPs=J zJ(X)W*q}trOW<|yTQm1z+jzAn@U`(R`8y5wMC`n+?*BvIu1zhgG4llL5uNyj4Fd?xrf!bCpb3bfD=;( z^j`%bO!7cXXq-kV;F|7>^P6jyZsZpuCImV|&Kn}VNaeHeA8Jc&!F(8&oK=99#WZTQ@;v9iw5kmT-L0hiUE#%F*WG_x`-CK+5TR=H{8%y(e_@ z!tzH;^>7zBZb;oGmhEoKAMlgEl08yJv-m5)aesP zUdxL%()IMYB9UO_P5a0VDm5|eRsaZR@Hx_eBC-xuuF{_;4dd51-k#_};yI&FEc%5D9!| zpck*c4jKE1S)%j?Q$fosefFcJ_61)J1zXnabW=1j7|#Le_QjZxa+M32kBeV_@TlAz zIC$|OHlc|v+yh1FdH3#gT3AB><^<>24 z=C~m(KWURgX*L)=X5ad8OSG|wsP`ka{0_2xR}dMORkc)%zsz2J|&cOO8BRIVUk0E#az;9_}gD9!n;)^jMwWk zMv3;4vFJkg$+C+KeFZbxa>3}S^-T2YeenELXu9UE;ak@xr?1NDW$l;=A3I!!Rd_A4 z)~VRZ$mp??Jc^`FJ@&zf!kI}@XFWfCv5#4nieljEI)6vizmV6)Y+eTTt|ft)Y1EH zGvjrWw{XKYd`I<4JS=pYKjhi>ZN&2Xi-@)41ZI4ruAbJw>#|BE)MHgj@KV2 zbIezg2>E_F{l}~r8H`60)utKuWb{MVEnbl4fkwti@q9)itA4aHN{aZ82Ms-?ZCy<2 z#X8#rmq;XKKVUs`6fchHnE)x^~zPL;<#ws5fv%{c~#8JsVrnZ^+>s`+G4@#(ELH|k%t^kmC9#&(q1 zx_J(#bI{y6GVVg;FFg`d>PVh>X2%2m7t4}m9G9%#sSZj-+PNS@hgRJI4skmb&6oYN z3DhcX2CA32r0M(-*N0ceT zm^4~`eTV5NqJ>V>yfatlQJWFLu!?9IA!6YURc{xCm8CIdKQPc?)3)2iyWh4_Mo7?D zx@RC`vfYkUJlQ@R$Kb)Dz`pd0W%IKReYn{wZXs~m{X+{DyC7E9YqY~{;W|L?61Sr1 z<}Dge>)Z2ZC?Tqptbpk1W1X{By-qf__U>p$su}fdtJT=f92!=<-5DL;r{4D6&bzh6z zZ4OY3`x~_Ce-H}3&^2^{Yf27W)+BZ zTJ!3*UMwUH8#34bF0H33uo*C|^=RS7S5KP=@R_ zUyJisR_%B%7hs}++#6&;& zg@K)WtbE}+Wp_c|<8Mlsa|(Y!3iuP352@>X-`@KZX8>R3A?9fKwB|hlGb4la=|zsI zhwm4$K&?kxb--;n;Ym@d`t8@zGDUA@4+cJIm@D4Q7sswkC{;zdl~eezeG{qavp)BxS{r_Wl}Js^mke4o3HBQphYw#hYAShf9Ft< zmU*>&{a|Bmug8|}-A8oh0`HkwiZW-VseDL$8?V(|n7g@Z?u`!_8o3^BHn_H%#nho~ z(%yOaMbjjP&^EF1GFe|BSg0x0Gp@E}1mLUg+B4Ad07FE(oW8~^4Il$#zicT3AIUgG znSkEV4}1k<=yyHWq)nwYp1{3wvg`D50WaLO{KW}m>-`N*z4SL#4dlags3`roc2cA} z{;1%~@ucG-}x1XHASN{>)406t$7)(mcpv`|U4v$ndf#Z044H8bKPxPJeWXhvYlNxD+ij`x3X*-tI55WN8RhrG_IfY8?bS>7z)J9hKhYm zIZ{%mxr(&2(iElMG7sgGa`ec5?>*{jn`74a?DR()tLACOK+Y)z)C%i~=-bORCkJgO zqar8DShc2w6yr3Ve7Ff#Mm2xokLoLxm>_xYJ9%|E@*-vQ3(*#m*lkJa$#B*Wo_LOX zaN~b1SWxlODm8IP?Dm)$-)q$@zl+Z-KU>|y%720d<0r;Uolh|;BY-TA?h)G-<$2yE zJZJ-!Y&U*4lt$@bzKc#Psh&?j^BaE)+qL}C-}rUU{3h=7XW|~W8HxK(5vXE;7EE0N zpKdQo(sZ6;FPD3qH*_6c5@(@d8l{oWw*t5@hOfVzh*AIa5OYX3znfLq12d(g-B%S& z$1CV>N@<(%`-g_nS)E4vYBlsy|E9G4PxE0wF$9Wtn`pFb3`b@T9gLoWnMD%^!RaAd ze?OGdJyme0JwF|Yf~xoe8kdf(@t3xlQ~K%8WF1-)KztBc_1_C(B79#4Xcpq=z*A{o z)ljjjjdeKgQM5_F@`&F*NoW@7tpBZ&6D?UHJ%Iir*_P5A`Sjcfc`}s-Oe&gFbhvNb zwg~61gKpi=CoX$FhE9tzir2dG&nHc}eB#J7rubk3+i!ImVZHlZ6rWI>=Piqii8@95 zBJKp=`!Uf;T+2wTRrmj|-Fk3mTgE}|9cetOiPjbkrk}sbNA_&JG7^ps z+u&9PG+2M7VEug0MDUNfX_TBupXRrB-%Z|qpoHU}rhF1^?4MK?!|+2N3kWL@VqjYx9xtUkx=^DRAi!EI91L?xf!XIu||mn<{l^ z8PjjS@;(vI(LeVnnc?N(?{8R!g|towXP~QsK}vy37jK(;!&~>? zUIjmL0FSwFP5w`PR?05t+5{9uwfxcRk4!2i_!*Wuw|B;W=>V}A;egTR2G z9}=Gw{*;`YSiA@N#sC2(6-&H@koo}OHNU+w({IX8fBn8^(2!>-TqlSNQVKuRZxhe< z$Ild>z+Xh}TtBuDZ}6`a7a~l6^taO6QK%|^ym=GCXt?&FBId8BVDcwL`7aT^KmPeC zBHuZmTZ3FJs;cHiVy_}e?= z3bG@6tTE@P`EP&w9gk>uc`F9v2)9-xvpq-Xj|cs`?zOiftdx1)X{_YjUF?8Q`Z%<{ zwq@j+gn4U`=&Nt0${myA5s$Of6n=Z<^V~swQF-y2SK{7hDKMx8b35~e>x%l~UgeUF zBx(b{)|87LpIKEt^p!S~N;{q;%MY6O?tgrOT0yy+jG zpQ$QqIYzIul|C>OzvbQXKYj$Xrp3$3Zfhh4o)lm-5cqPIe(K`C9n9s@_l7@6848#U z2IXNPqig5roPMB%(SB8CHVAc}Dr&^}WS-`ZmrG*xBOv#?bNbTr0+QSU86iD|pCdi& zA7P`VM9ZSjuv)QY?ql9^v54N8xwdE<`i?Cr3pcIWG-5ko_wK^8SQ+{q!p!T0#m_XV zr?&A<#_FDJ7+R^=E~dkGNw?>0oW3G`j^fM}i8k?~A8wu&1CJ)&G(D<&VfO@&*$axEHcXZ8>1a>? zoE{45CA*4o_NG6cvzOOP+V>xhzSf%RXv^>rW>ONKwdo%1s8l&Om)dKy!Xg)|w^G^i zcUiktB-A|Td$*e=AJdm5tJ~CtaLl|L=)n8goonZzLc~;AH)@8VLvN9C49K3aZRrx# zJ-q^q4!vO=k_(y2HbaYH(aLRZ+4SshJ!~~gIg-EJyj%vVEl;J4s3HrCczK)W54G!~ z9QTQdcNA*^*)Emj^S#mjphF{%OO{?$kBhg-?PP)7YO&W1Q$mfm%0JFI-Y(mDBm0}eJHAF5T#TlpVeM`% ziaynFUrv0(#y!!}s#HoK8f>_|c25|g?Ke1&c3}2lsaWO0DRQ?N>#*SUzmnk=ttBG2 z6}gP@Yd?*&PrW)ea3It(eNJa~?7-gFT>_z_GqVl9CFS1Q)K=Ab=E5#!yG@9(9>Tii95v9GuDyLxqEeAue3 z^c5z6+Al1h<$rribb`}@w~N|lyst*%>gCI?&vt;i`;g<&QW^oP+mEI`_=)#7T|P^> zAHLxre|!?hL;ZkU$foO!Q(a_s+4N=xsGs50nmE~$Uixm;U#D4X@$}remmLpRM{QlO zsV!IS%Z#XV{d2zx)@3&G!Q#Jv)TQL3Zqv+Up%Nnd~Y5tp%sgEQlzYYZNRblw; zHWcGKSdgLl%IUzst0~KphX~>uv@3Qzc_6(oFNrnHTTDm!{$m@;LEsX`rwaaI zvxE8pnL9DPb6g{TJ>Qpfo7f$HeU>?1d=#(%Nu`S~Az#pH`NEILA%T z$!cEv=H~n1rwhT|e<^kMi%A_ik`}5O#`Wm$fp--gX1cWALc;a??| zqK6R?eV6aclC6{lc?Y3-p8DMZ-?&@y@hiGC)~CF?<)p05!=jY_SHv$9pz3o6FHhtd z5*wR%_CMbu#@gkuA+`swoK`GejYZAhRxw5{3v2lnw4=@*`0TntP*5YvV{+w*#>6YE zHM*Bx(vtqDskjUe@r+wOE3S_N*lEMumAkfXu<&sYc0>r6diB-0Af)H?rly$#+*min zvV8gSk;q0?&FVuFW?_^J@;=e0DrDQh>}!DSFt}>}$uFjI3zUeu7noTN%a`2yD;8K^ z@ER`!&GlyMzugR8tkg#ic$z{dhzAZ#A)p?V<6b0Yu$uZBoNJa>#rSrvWG{N8$ZvSJ z+lB#e|4Cc;Ko15Pg|m(BT~su49oRueAjO$@j`+Dz_rLYsibk$Gikt>-n)-9$BmCZlT$~%(Dt=jFkle>ihi`=xr!iDI9D)QfV z9%T%vPP)3?((aCanwbWB{`hsfZtJ44wOhH~r{=7odK5>8{j~Oc_VY`+A4t}L!z7wj zgiZMAqGD!HqpInr9d&-<57Xx0loO1xs^<7ZD``#bBp>pA>f^93g~& z-IssY$PBK|IMB>9$bByqK*&7rNW|AyDJwddeWfUSK#!~tjgsA~Di|+XxGh#(NjN$5 zmjJZywtMx`8t`}H!~An6yNPu&gX4+oqfoHAhK``cu8QAIp3m~1$5Mp--)?wc#TIm_ z-`{a{ga>fOn_Dx9H!Wth5A&*OXk1JAkf;W@ojWD!Bw|~LawX(Fjvv1Rc1SuVB_QE4yT#`UqLPL&&3=D7oLvue9 zhfha8rTZtX3nm=_bgDOO+N26(`OK}19(VWfx*B<(0*t3DjZa9pIVmC}lR^pk$=vY{@=@&)&n%`S72yo=v)xteh&gs-s@WRncIJ0h21~O{v#p=r?Twot zRNw@yQmaJGGemxq*jj481`9`i_Tt@vs<~J;eWo_Bx#9%Ux((4_5qYXTVK09KNVQ#^ z`o4gxS4F3$QTas@ld=3wJGhxn<6dmoak#cbg4c(eOvY`7#qD;l*df>0rd{?gg2KX< zjaDQJ_=O1?*D@~?;Cl~0#0R6&NdxMdn%9xO?LkYK^ThmXe;!IYF@c|{L zuBDgkb`o|j>cm~4b0QjcqNO*@2+)$lRwd*zG-kHAb6xcb8O z^Q+20+F_4ByI`+GdUNF6=6sWQm0+(CBU#?ZM@4f6BCHC7p|co~TY7b^RWC%=(qQ+f zg1T9c7OvjA_yZkIFDk!V@`bRmr-DXC4LpV7#_%)=L#)*)z=sWNsO z7thc#_sY#Waf($G`R}7>!){awxpCvTAa78DM1OXq_0rn%4dEu-pq^a^{njW+ok@vzp_zS+L8l4a1cxHCL~KE# z-f{B!k7QOFXiy&O(=VKsgiq1&t;(WvvWw+{-CDag{(tO!cQn`i-+x3#3Z+5F3Pmc3 zL`6ju(y&5QXjs{Ml}fTzlC9D*Q+8+~WEIIQJ7w>T-{a+K-RIm_zw18V?|pvf{Lc5E z>s%*|&*%Mqy`J+iXqV$lNz)SZ8$3$)P5mNpxxU~r9FYk?Dt}IV?|nAMg^yzkA<$U5 z#~S%{(Sn`E4laz!3JPAd1@zuTJ%;}}d!nfBSF@*QspAC~E%YAz5g24B=)dPHs(+fV zTIKbzDIKWv`dFFkLc_ZLjDGnVenTpS_R=cJ)uVf7e3r<+XDakXw5h*)K98UOEDu{8 zDYA5&`(J9Q5A+F?_njX;_H8t8Mi(fx4!14(P1^-yWBdSC7=NR^__OtSKOp7C{AM7{ zcO|{aRf>0m#@^|Hki0R!ZWV;&l5}xxnr!PX9yV9n$5(OBb*exXIjFL8#dKJtIk5CZ z)|Y6!rtDZrN@GAF-+QWx(x{79_<9V?nX_6-ahL2N(+{o2HD1iTt!Z^;gGrTNjGJIy zVS;&-Wz@qj-Y6nS;5IrJ&< zDQZ!cYYoL%r(^RX!nz9c7}nK3r?RL(`<^d8O}x>^%~#|W&K*m83xPH zPMa+6OSyyU0CsA;p!Ys`SL=C&Z5r=xKY;G$%KaP$MY~hQkAisih5;qzA8K0nO;K+? zC%AgBulSJ*pinmd#UXfv&tq$(eLQ|~fh9z2vQH5Stw zqwGL_2O4zaH+%>&*^vDcryd6DKf?UgWvdP*+5fr*eruQL>NS8do(G3o%ZP@^4D zoaKt{xIiNj-9Yr;djKw`=+S3XO%@FmBlWO4HaeyUV1B7LCk6Gu$LBybasvjLml-_c z%|Cry0&-etF3T=fpP5gUL&8m1i%Jr69|`$M`}@9CzsOcN$1}Y(Wd#dKoAIz~<#e00 zNPX4_=-Y`#R-~0L^Vet(yFxmGC}A!(s&-FHjJzZCaXhaEzT_?fj}iZSpB5Dr!6d=J z_2;Nugynl(viYCZC8Tr95nwtf8;B+bYmgnLL_-k8QCO8Es*o`QR06rDZQe08Sj+k2 z#!vXofCV#)F9g|#i2L<%)I@+Lna|F+d90Taf-u)muZF!-gnI1Kc!m5F{K{+i%P3_S z0Qd6{Y#hQOP4ZDGcS0VOEAFC_UZAd72MYhXtOE*oSGP&>xU0(DeTDA1rcek2$Cg84 z!a+@S08tTOaC=%-5Yb&M-6k72$w}AKK@ccMI9(?E@@GgzTobIXoKswe)I=LA+YV$` ziKiC`tq!Zz?jK59KYyt(lS`Azo;~zh-~}qMsr*cu`@iQ*BiesjW{}~f{XVX^vpkZl zx#3iD5M3ma7b9wJz?0mVLKfPCy|r_}vbBf#h=5F(S(c*M`+z&<(_Mm+$%OGF!h=Trb4}^Q0HLZAxPTm(toDpEV zup06Lg%2HUj^S@4l642CKrB{r8=fm0n6v245vqrz{yqJSnJR}kj_L9u=@lnM7lH=N zw`!G~^}Fot5U=4chla0i8P%_hR?qiW0bz6qGl73pbA5jpiLOtwx-2X#xSet_WD@Rp zC=_-3jMrRrWol21YeXciI|GI*s>@cGWyp%{Vm@89tQp#+*Q>y9SQfGVl&QKZfz9$C zI?7SA{@lE^xZPS1VL);ID*j6fwB+2c%EmhmcfhXR2q9Rh!hKJM@?1f%ov-44QpYh#`C0P^U7wjSy zdUrx8lU^@FSwpTk}?ryAXc=){{-tZg2X8T?q8H{)h2r^Vf|v zl!od~&G$kbb;JGqyyK$#>Z|%*qNm}=ti|9=*lnUJ>TLDxr?+BuUi6-KNgc5h$#7%a zGio{O9XAj6z&{3L{M86HvfUkAnBJ4sMx)mv+81OxZ0DPd^qmJc;%|71VWT^AznTI$ z!Wm%ChS<%SviG z=G=8VWI_e`aEnFsdESnVp%9P+)kX<1+kCHYo}f4sk^m$(yv)O4j#C zQnHn0j*z+AWSKBku3ywNJtC1g^1;}p<{{`6lGrl^ZCtm9mx-9#)Ni^^juC^mCZ)p? z7Qz=hsVP+-=donLoYYu_&8y#h-$Bixr2amkGGh22-onr4c!0nx64wuG2$(fj!B>iY zU~K}jCx8RTMcjIyjN<;kj8_lTb(!vf{x5M`TN-ha^>o#l*JOB26i^l%12Bm1(EiXZ zHuq2Mgjb*ebU?U^+lD-IJGVn!!g8o{f998m#RLosU~zxAdW+`xty_HKC=!Y1{F15N z`;Ci51VzDosYrRNZ2HyJ~m)2X%x+cH;w`nQw_t~7s zKOM*XxGs#|Cktbc-Yub-pp|k=?mcrn1S#pbPs-}b?bL{&O^YoAd`@mgHIds7_ItY> zhdR08SZ4KpVrstF$#NMomYLa^>yq$*fW00Z?WE_-3fgTOHji73$)e6Qy$JQyL!r~( z>JdVTrq(qa#7l{Nu`{#|#cR{w=Qehoy?5^(Q9rE+@J(D^1)spCwL7Q@wSybSNW5)F z!i7%{JUOVCl8Nfu(#7YQyiOs5^{^c={=^~6jQ?{KJ+I|Xz6{lb;8wiXTaF7RE2moK=Ji9Ul^O4)w1PwsORsoVtE*(>L@lM8)3p~b>KJ|lRKpd{yfLv{N)i~mC zn@CBChDD=X~MI8>1UvKVyeYINSUy_I9TKMroF2$@QiL~Yj- zc`|fB@7;8Z6w0Q|iO&y|X-`0wF3#t|9xd!)U19p0Q!OBIzZ`5+VzCfUDl))Q>}b->fkAq`gAFs zd$=SU#D<8qMKO|n$!#)&0{ZfXnw;g~kb`Y*ll{Ao$4tF@r_Bk@g8Ticb392o1Kv4s zDll5bvi5D3jj_W(k-+>%Qxv{!b1C=3X@KuFO+Y(uvpWJd4HHK^Pmgy2pGxIzuCqK7 zjbKn58hoP-M3egw4uFP-GyoqZMMpbF8kmypx+2lhO*9L(cRSgtNVw>kp)Xchck{R0 zwvAlmr8sb@k#F(3e)M7PVPw_1XxBJZWX9VIpeL*KH zGY-oN40K6|uG7n{f26I^Q||8NdechQEN^Ng3=qEpC9${f4jR1)Kg9se)s-x(_s4pM zZ?SnD4#)RYx`tN%^(}haztM8_t;DIENzrGdNJ6z`QB&9J4N?*yU+>LZt@)1+%LdYi`Q>Us}A|3w~(Gwfi z>LQ2^IOytFYi5tVM-LS4fbZZGFAxJ1G< zNjLX7tK)<&cBTt;d-D)lC_GBued(Sey#-`x*K;pkJBYJ?L-jmoH>_Xy`1my6jkyAJ zuQ!b@zYsl=bAfdS`u~lx*Fj~XW-sey%)0M=xLZQbxUe0>CkgIQ{jaJkbZuI}{EOvY z_N3>+3Nu>uE5|W5g=KsoEk!1~$8xgtN|Y5YjP}arJNYvixx23*PfltLn#>s!C|{J`+*!xecMV6;+*jhskL^$|?F%JUJ~TVf{W3Va1az)4TdGYmF-=PGO@8r0 zCK#N)idTtQc4{j~bK)MJcOo74h$+PkfA(I=roI^_nMpkmid95^qufV`okSpR94%<6 z#F}sPhF^3ni&pVB#|T~WtRv#AF#EXAzSU7|?|#!_+^W`x#UdL!R3JW%#&5ll=}FC1 zgK;kGVkZN}`Hi;TdAe*twC7-v&b}iq)gz-&t{S>CJ@+K+AyS`Q{op)3-eI)r8fcN5 z>mG&!9axVvRP=;HgNI3Iwu}oRwH)W8zg$tt>Ea?7qv+kYqENlA`7f}VUH*8qovcEK zy=CG_G8<-&bNdkr)jY1#dAAzO30bSnk9_?I>CzE1 zy+EQW|2kydI>Z@Elz>DJF!hP}prY<3IgRd<&poc63tHfWg_8i6IexDQVEjA zoTlW)rs6B_maO}7Ve6wEx=VIF=Y*UkBiouH%PQ&30g;g+Xg(cOH>&Zt%furZUwRjK zTaWfVI+kNiYqsxM#8Sj)*hAb5{%S-52vQ;Q>U>uY*}!HI_8(`KyvwCH>MuUstrVb& zMHi@G?YAP~C)(#3-HT1x-x7!3zCBdo=3cp0QnEH)pY*2zHCvdaXP0@c&}zq)HxYkJ z>kYs8%wEK~v4?Gs1eKiFoCKl%l;21+0fb&@6j-=zG0UYASOx#wrZai*<4;wH9e%XL z<2`|)*R|~J{T{{gvnefZ%1`f`fVu`H6{mBbY!~nW`5R^!RXnA`?>^5{{xbU_HUsiH zJCx?SfzOg*JVXzA81!s#RO0#g`Cl)PsMl97&F+l7d^Yj*9m}lP2FQQzD(+l2^A++S z57GHx#&GwmS}#Hu5pyf8c-rGK>((hLQcbUowlaQL zXP@}6>Z6XJ$C)yAo2Gk2LfBLi|;-O1;w3q1`dNS}D z2kL@PFEf*sG7*56Pl-p1E`x0}*s*io)=4L~fmTJrgbi)I5BzqYqsTX#{|^&I^16Ia*Kg`qCjDhH=%BGR zlX9#qS0a6YRt-Eg>)FNe^mE(t+2dh=>%lYFa+>NG*5qE<@)eh& z3qj{>1rII+Wq1*GbNr~!jjs9;;RRj0hE-rSl~tZva7ig@o9>&)twM^5in*fLiHkn) z=seB+w6SZGXY8;Z_HYMabL;MS@Zdq>Yey8IF+Ot4&(vS}D3Q$ickDO|4;n#DX1`wt zk%f2*oS?xc`6q>(zFz)~aut+XXp3##RP*;b%Q8<1xw)zYxn&;nR7fQ z$;35Y65nd;z27BFBoKrx20P2esd7jcrrn}!4%mF|oW&Dgwf7%*(c=lFvB+!TwD0j9 z-T^K1r|;lpdlafa{MRk8HlZ3i3I5na93*$HS13rx4hhJrO^QlNVnUakp>7cCCR-1c zYIhykrmUC_C2~CH7K;gu2cN=!4A?QP1 z6J1Pntn=Ae#=&}TeQ{}VCB&IXD+n9M!)#(Fxu9IyuVzdw_q{8~ZHciZ%*xq;{|*WZ zBCb1|CC+%vURjTS{~J(K-SwOut(LgZIjFmC)<4gr%M8UNLt-_3sRtvI!2`sbW$RMN z=#!Pfty{MO+OR{qMO;e$%C1b05#GW%wxDNmJn(CWGl$ZQ;CkCDVoYi6f!6g(e-+jU zb!Znn$&my>MODueT;_Q4t-eB!NuZA;xZ~QGJ1w+hBytGqqy%fo2FhJtdMS~z5^J)1 za92o5BFHRk%8AS4B=p$H5(2!iuH;|xCjZkk%QcFRZ)x7~Qs}D+iE5v!0>5n|QLTZy zr!VI1P)0_EYR5UwvQy*wR|)vcQF6BVWeP>DS2&r$=Ak)TM(-~{Ucy^%1svlFx*SF9 zjplA~hEhAR#eQVobOd!8ANmDLX+hGLDqycd*|XxyxkMvU>k|D4F_ZV}|D{OnPB(=o zTjc$Jj}&*#@t`XsCX{7VyTk++nMh&20qBrsnt785WJGMGXT7z^-XU3=hJEk8eIclV z&hk*KasFAh%=#JB_W%2DmdZT2Z4;fm#1F93n-l%Q!n(X1dT*kB{i&tpd86K3q1hYq zY|s9mz-+K`FGP9(-+{OJPpyyZ3 zUI5pBdI3Db|FRl`IRbHVDMZQD7PMC+5T}Q%l4gC@fy>aA$b-`>k#vpKOT1SDf#Jq# z8Qccga``=;)8Wz@m=Rt4(vU4t{A7}`(@G7ipq-y`X62)W*<~j) zvNrdIyEk;KdCSqVaOEBXc%5&vt+PM;8l(E9#WqwALeLiC1_q)Xo~=y1sPQm+*yNB; zh|v`h>L7D3ASjX>WC5qYC-{?3X^+XhSL#lHuK!7woxCm}m~KkXZR#<(5CrKFEs+5^ z@L4qgST03(3^xN)q+H&5RpUq?-uw+qc&=PQB^NsNWxD0XRO*8$tB=%QR65IwtTsVO z2v(RfX%g!+62ouB#m&1?kyh_KSV~dw%!Ra+L|s*9!<&v&^4$-mB5DPF1TBH9nc$^4 zIqb81-J=j!w=*pJB99mi{{TbGd{9v-4z67ilVy!bFL4Z>tI~lesUe0OYMKA!tV_9h z(RDaISVOUzP26O8JZ-`ES{;Xxo-j;O=OX3&@o^O8^{ZgEk*hB?laslaGLZg#M7bNp z98zPS0}IiHPZEOsoH<;rU3#Aj-SFb6+d|Tv8>V8*Aj4vK>I3GnXc$EX>df<~!&7nS zKTT6ewCzl!!jnn=rgMrnKH6)Z&*_>(jz_v#mdbnf?8%qZ4UEIAo1y?;pu-ZuseLAF zND?^|mJRGeG8EaU%lQ|v(5-rIfpeXI6GvKlOP}=$itTtvH@k(no19AGrcSDZeNh!G5hOmnATtVpch2SWf#8KS-WeC9czw4_X$zG(8b zTQ3$xX`#9n{jYr7nnW_(6D(!B6-~b<792_13^Yw%VY@G;aW}8U2N~bkNaB{niL#)N zyhj!RT#fm}nLPIfx~W;A61Zwx8`4beP?_q=E5*2E(c;CW+!0qmX6KlxGHRlyB2^KV zBfMmSKx|d8zFYgn(@%ttdT)iujrLMTLTW-7nyD|U=mfz(qx za3IKM<@Uy|&-cnGW}lfh^PivDBE@9{o-tkd5$@&0c!uiGV^lOq3On*si0-f%H1OSz zPp>3+SjhZ*FL-li?nQq?&l}R(Y5?V;h)!<-lV6XehftcnTt`**hY2CfX=;P|%|mwk za|92tE>1Q!n4pxtBmd<&%EJEtSoxLk@fUYiDwa4p?$91TLTYrALdhdgo;Uu@v?gXYwZvu%C zr75*sc!t}xc@|s+l(qsxNTiP_P%3HV*r(LPD&s)9neJdbd{LweT-wj(EKB~TbN)1x zD^*3=i7$gR!PwuNyDy!&k9@_8AI~mB3w3*|YfI#;wG4D^2hcncy`0q$ zq#VD>QA?_D#H!f6$F9LNAv?A`yzw{ya|bdl4Kv|Z_x#$O-|E?E(ic>t$NWPBbY`z= z>+KNv&@6HZxH|b<4~GyDI4pSp``YvRlD;hy$>ZE zeix|S+1k5Kl;3HzXe@2SVRjW0eA_BSgjFxGrY>;e9u)=EfC`tu;)zt_m(b0;g<>JD z5H5s5h<9%iGbBT>;LUh#X*F}k#&X*OavfVbo}fM_v-np){)>4N z{9rL^yqB-!eqABjUAIxd-DMYN^OaGex8ExG5E_UM$I4|Saoky(zSB(fuBB8b?*`0N z%kP9;v}Vd>gRwqlQPT;ras78|9OCz_R8(>n%-*{h`rou&kc8yWR3mDE6-h=P^BWx=U2LE70f&`-IAxz2s=?^ zFP^X((9x1*o{<7f=FsWt_)}*|563)ZVuz7T7y*Nl!Bdm-pf8jYi+gTg5#pK+ukC*d zuRt4|m5rwR^-{TUAUtmsy`#gp?^p{234b2@Si+z>v~Y#5JQqJTJ&&Lzgo=f)mGDTS1@0M zXl}~Zw<7>6J)D9GS;WH4x!-E^41wWl*9>#&y^87fmS*Xdm@jUjvJ{PJ%G-_c&cOTQ z{zVwam-Z?HrgjB;f$?Q@*(+g0f9cyrQ!eUMB2g|Qp<0G~d(Vk-D4;Hv>diR_*&u;^MxK0nuH$V=tHwIzXP;f#;y~MnTkHZNWVC%Q=OLLJ8+VS$?6=DG?$D5LMn;yc( zX~Xd&o0{$>3OO@4exiepQCeCOqsEzLcM6!Y%@9GE*E!?nis&$(>ppWp?v9aB;UCg2 zZ9+q5T}Yd4T0(nME#a_Qqht5lit^nm>GkvE!n52|>h?M?lT$RPGyaWJ(sGxPVf>-n zZjt3=Wl{{l+OtH>O@^;oFdR)kbXQf@wTO0`C}W}CyC>gfW5$@?oH=u5X3nK9yz#?Q z=}QAm_}jN13i?khTYBxbUGkh*9@`tAiLE%KPE4le&CCrB_N}g>@AsR{yjf@`trJ!eqwCaX zG?VvnC?~!q1q1n%`Qf%7P6Y)8EppmD)a)&D;H49vqDs+=z=*a)ZMMwH6MPXSb!p0g zGV%iO9t74z5y8(vi#!P1&g2H{G53H7b2{>P_=zb41A{`qfl7zlhMERpfD?jDPB!2P zx+%UtlVh}(jOEMh(!d<{v8D%h?N4WpsChnpd{i2mlkGE+wh248{1?KtAvJD%Me}>I zM?}0{*po`8?tBND^Jb>LNd}fUsV5!TYPHeKEzP_}9aOzfhi8`QI$Jc`-8gRbwHFf+ z(W8_0u=fn_OjjR_^SNn^yq0`)C)vF#MQl+sdoo-dfAM)ww!=)a zMD&K;9t1ijZ6>W9TqRIxV^~vz3&hJYGn2Og%cFq3BAG9G4uR9)A8z$VlFXhQK3x(p zD36v+>#&qrOL3?Bwb@%mupv*LB=yP=X40`I8bUWws-rqp_swbY18jVZ;;wG_^DQkv zITwxPGwy*(mI#W>O-TfzZPJkS&hha3uXSeG%5N}W2{6;dphy{RpK46cH#bUo9)w+OBb=qNIM)vn2_K z)6+Ob)18LDaDyg%1q~e;RxD#>Em+}X68!{ecHR2kVd&p zD|(jeWz~$gtF+I}JP~ejA!lS_g|p)EN7r>Ox>HgHN|)zh$T--v>Q&xBESQe4N|=Q& zpE2_uS$s$G=Y-Z5XxNbA&(%!qVCPI z`k0dl&D%w1vJ$_@!{$Qef-SfCemTxfu0| zk;X^D6=kW?>9=>eHFPY_vr-jpQRC$U_LpUYtAg>Qq3EVf@1zaEHE6Gk@ku}L=_KUE zyhD=og+dx4b$Y^fUq7sZ7~_?3(`6vZlsXohe3RG1Db{yyYdgIaQb<`$m?6i=uIuo+WiQ*Xr$Cln3(9 zF&ask)#y*=S~)gr*W6KY*)+yq0|}fe=j7^)SEbQ~i=SUCA_RvR>8X;`%4pfS*+(n< zV2aG-)#~BeQY@wi;8G?KAZ@-9jkMpS<@gTzi3xrhnc`&?>X=^JJmfL0P_1T`hE_cQ z?gR=@>?dBj3!Ji;O9(=0yy*$)IU*g}Lz6oy?#8)S*%(SVf_WhNh^&!rV9;Cfs84AH z#bp$U^Dj__rTpdOwC>4J(DInez*L1%EIfYrRr=TEO>6XX*4`pEc-O8i4NvHQ6@dOI zbbH47M!o~FyDl}SXo`!TsCOzw9xuC- zEFEu2{Fbv1;oQes+ALo|=}2e4O3-r3X6+06b-&>Cv68+bPV__-LS zmf}9gkuSswDiDeFhHj3SMQpg6>lbqtM3)OW>uuv}PZX;sv;tOXC%WqmD1qmx!?%^s zfN@G@E+risT;UEpcvi%x~Csi~P5s5+q7rMH-$dqnyfjH@Bor(bN z7ebvN?$26AuZ9r!#X;=;>Sk-*T3>kKL@<0MnKTZ?m)KhAD*1dOT5&ce-zZ*|`8YjU zQSan=rM)XY3dAi{pFAe?hdPNl1A7Jo`bPrcv+!E$M8uLYZexK#Wu8}hYkXHS=~k2v^2+>tO^St3W z!W(`%D3a9~n;)hyak*bS5X-gVXb;BFf_gY_qlhhUlCg4@zq8I~#kyrj?2q;}n&8Vx zkf*mDG@T8uX~xdX?ZC_FgqqAgxu&a%C#x^bKDh_L0bK46SI)F-dtrY~sQUzpJ>V6V zkXuM3OP{V+s2=pmvjh73?IfjEOK3Fa%kg)Tlagl-CiNciD~VPBOy?H#Wiv;PPDT@-*_{1+8mm=) zmWTr?$L7) zskhOP$n44LKFe5;#mcgw=UwVh0#*Q$i(cq4)zsrPxrs+m5L;Ol1iQ6J z?gLWMZ(KdFwY9a`qWcwDB4Um!9<|`%Ji&yHw^zNN!Q14+BSlh7fJV2S zj3kT1wOiI*OL{VLV_ZBCmR5x*Ukw4AAk{@PVv1v7QKLmR_|{ zkdVrXqPDvwZ@uFSa0|BabY6c=7;!CRI7#!JKIe~*`R*bXhr!ZQ{LZLqO4p^NsvqqM zm-I02a(iZSW1Gu`LkxqZpF=xFyY2FXwQ@AcV4VoXq6i7C3oY>7-azk-UQ}luO(S12 z*&ac2Z0Jd^E9;7}scy{IJd?fD!cD>0AmQ?WhYVErvR45oJGtXcxKUVSq*?A1_Z=&r zkqfdDek-9+FjBaAu>=OdM8iW{K6qk}Y8weEZ)&^WS7g5Bs9l1)kT40;gbU$hbe$0YdV4M(P&F+$A5 zhPHI2m(fTVD@zwVOh_3MTAJn-38bgO3h`Gw+7DrRbM#Fk_M0k{*c-Z!OisE z3O!Z3g0JaCSaRJq0bUeN7ez2tu)QbGBxl^IC3j{Wrlt+7vv&)-x$V1XL zVP8u|)iJ;L6 zHq2DV$wcajI1u&zww_3c_UbqCBlK8OR*dE|3J^2X6HzW{Iv8zon@_EeGs$6oG4`|_ zM1fM%7PV{GMV0P9j=<3_(FRH6h7oDZ!o}Es1`uf>#QBCwko#+b8-KN)OsZst`TE^a z6WY#I(UvF=k7Wk(MlEXb<#~0-ZHB^fYJtQHooLOoJXjV6FMH(|sFi9I+HzMjC02TL za`^_=vdD3)l=W^kO^t?fFX9yzJw0S~0Mqi4=aXPzb25|Cz+dUo(O3J)qpXNWi8Qf? z;QL`Wx_-v#Aa?E>8dZXkrVCgr9@A5*)Ld=Q#QQ8NM`b~K5+k==RnIn>QVAoU2rs8M z$y&m);Tbog$HF&-W5u!k%FG19dj+zx?;`^PxiLH5*d%5N(o$Gb6rxn?(YZhNlrmhX z8v=#7HuNlFxx^e${2Rul4;p36j7u)Z@HAUdsGZ|^l@Ynna~HCZfqJyr6UTussW-FX>U^8&t5Y?aNp%{EeA!G2N zuEJbOT0vf>(z#Qw86rLSbjV|ff8ZJNs!GBd$ABL#_8*VIHKvw2Q@@qlMR2Pmngj>F zrZ?R%ry!EDaCEIBwM`%~paTx8WaYzL)aRdURiSqKiu)srl+p1Ll)#Z>p8=*<$VFf`_)#d>P{YSOM&l3e|Ti-zVeOYf&hQ=)+k)?=xcKr zhaRXgzS|u<-sFYuux<09YBfJ;_7Wb{Du$WD8GBXv6rRG>3mF~KIG#56->_nU>i8JpPX{Psq?_{PQzFp@D9W|B3W|VvSr>SV+4x8vl;v=+@EK0F5zE>KgUw zGps;Bj#G*hHqVtTo!qglIk~*3unC7F zi^ID7xl;~$bJzLKo(rLMYMXisK9gGQ${%VqX&liZl2^xplPj&^3=!PVWALh<-rKsn zTKSD+M|gnK`MM31La<839awnrCr(m^8Ldmt(zB=~B8Ps*NfSNPLx~HI@03|b0U2=k zpvbh4(cj(xw-bJ{yY#?8&=``juE2_3WnDqi;J?7Va!#I&F1@>0tFKdyUVuyif zPgd%Kc+<_VOy*0m5u-X7HXzm(rz&UQY)kpC$?K(OwU)wb!`{c-7yO~D(5)Vz(E zT{R!>La%XZkn?%ea&E8=%=|{fV7&x!D!I=!`^x&Iv(LTi)!jZ>lh@kV({LLS+O~H{ zzvE5UCzE%KdcX5#B;FIctB)wWywHJHwg4cMKb6-lD^4Fcc<}if1MC6@b~LXrCj2>< ziJ>Cfg|dMrd}2SZCanR{V4&uEr3>jKN=srh{o~foQe$I|Z8${bED{Z|kd6{1Mr zL@Mx(9hB1Lz4hK3Upmh#ICB?C&yPL+0lUNI>nJ@GmNMDS2I^y2xhx7>slnS!gCl%e zZ9{eREb{}{*x8E2r&+FD0Cf_B|MDa=@kW>o9oLb9S2#hNBNR!uUI8@ma=$;bG^)Qm z!e=9hEet*uNS0-#q7Y-1w7m7WsKORC`7P{p{ob_k{b*(&{YpSaHF&>&xHe~b9N&f2 z0z_g(!P#kN_A-=8PIGQQ5v*9L;YeVej{qWxHSG%BOiBDLWa(FlA6wvUpz>*~zlES7 zN#6ms(~C)g!RrlCLhA7WsG46xjGcgSx$h)kAOXf7Q)M;Q=UBBIQ3$g+fs;gn;E!6W zdgsw}-}DGFwI_5r?C%+z7W)1=Jr1M@&~^LcZK3tF~sAtiQ?Xyj9_^NUs>AjgK5Akd*8*$s7>hfnsm65ys??-8=F7>`>d z@NqHkU9u4_0zh2|d+TBwg;!h2f>sg^zPGVB&WtSkZB~AXfaVebn)}04>9_NPfv~m( zzbtdLj58woi-N01$eA%EHLSKHzn=^NMF;G-A3hr&6f^G=@kiGbaz>|2YyXq=8T2K-F z@Utv?OfYqcWniHES$X6Gt>v{q=}IY($et~tKhG7pxp*Vz}BI0tq^}!=O;%A>D3N@!2XW94+}*e8lZls^Pwvtpd*B! zQt`UWA!7DZI41g^JV9d0Fz^(ASFr>~dr`{iLsa2Myh_6pF*y~xg)DT$MSdI4<_F^^ z(puv4eBIaKJ&iq#SAuhi4pX6XbQ9FScJO-4mIT_fCBY-+LQ~yZ9e%Xc2D770F>;ko zeGC<+T#84vl!02D&RbBG>cWqI7Q9(<)UWa1pNmKSU$-r@+8e=!$IEHQuy^rVSN!@G zFa^})(o*byE@J5v9c6R-W9*ruuQL;bvb6!m369~wt1KrkDDM1;544(iT$<}y-b1=W zhI#pK`-udUk=i%zF2rT=_MKHo`u?i>h;QV+Yre9)&3o~IbA^S1e?ANQo3zG=4tVYO z2NdqoIMH_EQ0z*$znEqJ15Tgcu)woF-yQD+v%Mv)j=!Cv90IVGdVK5_?HCj@y_$qd zCcmF?84Zd?!C2$APzeNQee&DpT`-~&BZpc&g$}2LQT`V?jfudS-||*(Jf{VPnLS51DRop zlk1>=QeK7^-}3YlB$UI$`eMJHa}0jIW9zX7Ucp5V{tJttnFD{I@!k?%x%^)Ip2;Ie z+ka@HW|4UOc%Wnj9%eEbNYCB5k&+E?sr?V$qh7vGbMu$R7%lG2qR-6ToU(zM)KI|s zb%uKJX!}(XmanFCC1Gxqe&hD<02}v2d?D)u=|OoM2NS&5 z_xa^M?(+D>w`;_4j6Od-`72=Wz-jPwe31qDH+9)WvgP>xvwSK1ft-Uv^4{)EB%VBZ zR)WHa$?FIad24?OOkRcEv#YdJRJmiHtZMUS+-H%wX(n1qi-`7}YbIQYmlE9`fBXNNiz-jcdOe{li7Dog(sKHz%=`jjmhW!m(KpKbpe|M zEz#F)n6?;DR8g_DWa}8)rLWkmyfT=-jg#l~sjQB0E5D(YeF0xr6Un~ngu{ex)YdTC z7*evy7VcMM4R>X&wmRAQJ3aBEL8Q^NY4<^-X(gg^H0%qxqlwD!WBPwNl<_RSKGX5xrm`talPB=)+(Z{z`ETm-1H79u^orI>o_~yXQ*KaC4{ZItyo2B z*|s_c*Ueib&s1VZ1s9;)KpIYG)u7;@Quo47FPkniFFjTLh2G&ye?f%p?UxQza*qTz z2G2?{l948=QQ9$bj}Kq9;T3#%ykH^Gnjk)q18v32!kf`EmzX=QUo;-NvSpJ$W(h%q zZ>07S;!|x&)UWVF>q+9rwN;kR<{iMp<~d|$q%#N2s9c4GZUpGO7oE8j4XvU}kr(5k>Sx&P704Wyv|QkS=Hgl5Mc zm<)r&mgX6*7X#Czw|7&-vOm$I8{pvu^nN~VHi=<9B;M#zl&qux)%|n=rNmhtA{hhh z$Q}&2+F~z@hzi*EHOsPYvA&zR6>9`Cqs`oETrI4%d~Cip7Q8s%hu1RvmN}!taZ2p= zVx;$vfq^AdsC4>!JsGNUFm8>}qi1h7i?>N~kc?G7$zR?Q&Ua#DY z=EnkGyK@nPxQ~khzw$tm~>KA~q#?GKRUz zFE-l(mOQw`m-vtX)7af*@*9CLKpAD3c+hn=0u2WeOi4}u?OV5GV!Yf}$TG{tJzM`P zEjp7nq9GO-tG}P_qM}K1+(_ueToNAPXL+nTTzIhdEKHccT0Q=L}c=3ORNz z3wp|J%bI;r*1+=TUkvU10S8rEBf2);+WE~k({{4~ls?o3+h?=UqLWRD3B>j2v!XBi z_#?5L)*zFb8K9CMwtjp0(6~&b_OVq68AMf9(icGhsSPlKAiPwEp_GDKr>cx<6W=`n zSEWbDeVn{xE#xEvilfUY7NBalt7iSLmXu7P?tn-lM(9|)y!y}-bSF`VARV{o3oK>7 z&Nt`}dO1*gCyE~IjFKr!TO-w5yZs}XmAiuXwHM)#tTI+Lzyy2X{Y`%_U?#S`^j;Pc zP#f6+#8sO=Z`^2gAIL`W&(e2k)Vd}qWbbLEeaX-3h_F#IVj-&giPeZYG z_WMB5;9qJ2xtKy_GNKi*>M|HhJ{mMG9|*+Dp3$DIvpVilW_ik(cnjC)I3?srS;hHq zNL>JNzBN};YNOylY5L$?^KYB^laxY(TIxU8b#kqueCi+Lznvc_F)ai;eJsuAVEe(R-V!@J&sym$+|(x>SzUd`3pJ?lWVLJt_W+18kmua15mm`s7tOop?;r5 zTyOw;lERz*(mcA^jjPieZM6%Bzx=qXLB1z@#`RR~L$&|?uO$;cTUBF; z*yQHkS{$;^mZp*FC~$w)Ujzv%i;&EFGN!~?#ZD&cSbcpw&{GmBYWrpRSssh~7e6;# znD2c>SnV|fvsM8rjl3cx0!!zcg&1Jn+S?IUDiJi)Q>8%&HK2Yzw0)j77YA)&z-FR* z4Mo0aFO_#jiQgrtRwW$9cpt)^L}apHyMcN0(HUsv>_I3wB-tIGAGTY)7?53JU)S*7#17mY0$=lMBpXkUOjxa18JZv=X z8?64WBeG|qA-m{Y0jV_ekjo;unvSDAi*v5|<{@$GZ3p7*E$(3quj!8JpwxM8>5c8x zg^)8kXTCfoGRJMkb^J@}zP4b8!58+$L~r6nXWfM2ULj#z$5o@FPWc~7Y|&%T7SDEv zT=2b6prw(bJqc9tu7rpGYESRcNo|(*RsEhuUM}jf=U<2}Nafc=skRH<=2zaNTNhRL zPnzdl1xin`KqaE})8%dhDV1}1)Q%&a+)}nCAzd4dw%q81C{f$16^S7zzxSpJB?h3o z;;rfS3GnLY51UKFxF_)0`P(N`js{_DLU!w|$q0M#NY~ zRh)p>wet>e}n(Mt&c|u%>?`?bUS@TCPj!WOxVGauO6<| zSDQ4>W)E5cpwojb`~Tj$3!sQ)Oq)JGBWrsh-=*j0AGE>0X$JMS|NNW(>MHR+&-OoO z=s#!ZpRL^i)11a2hV;OeImWrpbr{ULeraYUVoKNUFq`z|5U`dEhCVxl^m({s+w<^1erOAaSCm@Pv_~Fs1qy810E);hdhf))B^tyMwnZ;AX+V*ep)I!=@ z1@xTL_k7kgzZ%BeUFlO|L7|R@TF}aYL`lY*|b@KF*m`nT7%KEtL5M=E4 zJnMcD9lHHpO@<{DQ5XWItm}(%OAK5lpcJs1)8UZ!QXwO^*nNJJ$p)7WB_5E&mY_SB zb;AOxV~f4oJ*J7srcc!1K*cP~IbLY0T3&dgEy;PZf1iH_eY={95?t=w;O%ngZWA53 z=ST13{af1a6zO}K=XR~y?umh@n7MUsNkqkNyG0u9K#eSs-|}k}Et9_({h#!H{&|<& zm*W4Pg*Y^Uvg%wbim6TXp$F>9kxs5Ym|2|PuJy4RUQ$JXLlO3%q~8GKek&7AS18hj zOAwJl-EU{v%R0Cyx6lHZw@}U2+;8@*WS&Uexes{a2-ueW&1(oO9kI(1-qCl8OK( z4iTREX@3A_Yx%F4Blc(~ zqV}sF;cU>lA$~tm>b&tFgyq>*ar{0BAdYQqdtc09E|(|Iq82>u%j;AE5N3)V8s_ae z{P7v2xr=L0r&)I$=xTUyB5fp`%}2sK=Ud~q%JhBawU15(`><`@(kH(#aQ?cS^>>Qd zS4vs7dJT0p>Vgv`LG&r5`}Ey5xb9x*@6SBe`99_eM!0YsUCnErw^5gVsqk{k2MfAu z_SPiYDL`<~;C-LK3tC^LsA&~0zCkaRHHQRSb!?f+l~H`!Jg_$zw3(3E-n~ZrL_;FE z2s%I`{P#$7Z&TNack~Xu&!Y@#@0Ws^PWMv2;LP{I$Q+7y)RcLpZ7pYIg2L5fJayjP zx=?TBv>01z%b0yxg{XRiRzLlHu{s9-G_M)s5(efzZ}&a2fdIJAb8WoBeysW$#x#MWR*Utub^!vC9i7ms>IH4 zG*P!wh)IK+51ri{~SBbfa%Q@eF5 z$FGT)S(}d>^)xeEFa$rgEgPMWd(NVFNAzx6E~#auedRpd79wi>e*K1LqRv>(QJM=M zHWIyc=T67#4UmlMs!KO7bU>`IY;@=deHsWZyH`qCLEc|kY}{_ai{nP*(Lhw@Zw}c1 z_|Yt4Aw%AJ`{%>NIqaVL*PQ$nB5_m&W9^Sl;gaobpWayJ7X-dY@y@vumo0qz_hpZK zz3nv0`E*dNcKtIp*nVBou~8dLHs3SedDE@9bN@}Udu6Nn^YVQ_H0wej zWqQ)e_t5=AibouVvGuN2C@ckQ~mI163j(Ktg1qT~W_=MKx z+PJ;+ZmXPXbb4vOx1hnUiC4m|hdun9&G8AT-a<$v#4B$wAMLK$w63MFkH5T6*(s9Kw{qZFhQ-rjwwhz-_are_3b#WEIq#pGwbsM|QC58QXo*bDLh>klkdQyNVA&^RIkd zxJ~A~$VjqqYpF`rSVyR8??px-xnz1cJ;=w0;Z$X-C9Alz{p_hZL6OecDZ${I&TR^9 zaah)^9GhwD*^)Y8+cR7BjN8(^Fg!+LOXggNjJr5*;T3=Y=KGap zr8w0j=BE$X1%R2Zm};a^c-()x*;W&?B%PEUX(kOp2@N040NL&^5_+N}4&vJi2_GIO zTue2E?TrYirbX3}kDt=!_^cQ`OSZ=jojp#J=G!tQC&TtVJQ7xwyP-F`w}+n?Wi@3S z^V|aavhc4#kOnTCf4tzv*N`KQ_oT<)7MgSzi02GfhYeI-UUwrKDpgmp%i4^C!Q-Ak zGe2Wo#*O%fK$!DbPE05G<}cr0{2qmq$1K8w2+17lmH(c3Ixpj2kt z92+7BojGOzmCJhMK(R+N??{$)m+-5)%^%WxxwblvF!-&lm&c0Sy0iRl(gsCWG=_^S^Q$-))kpMw+IxTy z97!9QWUo3s=%P9>xXBxu9(uKuJx1{i8P#%r7uX-v9z*+f|LY z>lgJR#kB5gB$?Trem}Br`}i)XRh;JBNXa3e%zL8@U%fOvOv$Z-V`C>FHcQ&~MGMIW zLZ9b#6{z|^zm!N^S@qTT0p4 z5(-bN{iP=~RqmXS5_hfN9J+0agGjHHOxIkj_3NnCr`py2CW6=e$#@*>hiVxt9~n0t z5xMK)K{7h5kp-(xl$0cdB^UTgEL3tFHzcAA4$=tBoC~Gh8#63|lRHj`v(>P2Uj*M$!C1Sj`RjP?TP718*G5<#f2-2)l>fJC2bY^@-qXEkSN|!z%=2&^qev?VM>)()jkZSQhf(;@Jo7CBhE?R;JjR96 z?5?uS$`nn-bEhWcI6#cm&jkRenjvbr%LX`~JpDB$bRIbA~9P3`yp@C@Ex?sgOdPka;`}WS&ArsFchRGEpG90sW ze(N&!eSXjL>Ha>i?{oigzjV%Z_O5V2>wKz6cO`ugu&_!)0_`*R2t}na>RGzDjIK?ARgC7oLd3rurX~*w6s$*x5cJ zB;iQdj}ULKI~^+TT!et zsjIAfuC6OsXvaxgbJ<<=bm^BxXd9}jYi}J7SR+p+OJDRuwl7dq*ogTZlF)r&X`fG8NE0Xs+mKV9?U}Ne7PBRs4ucZVFrAhwQw76}b9X1d?jti_1KmH{lRLe?M?Ou_ zW}=NOFXxgcIrO_mWyjmk-J+udh~8@uEP5?$(bBsql~VOt$Ph$_mA|`VQfTPTSqU*d zW&}>*+f#3ZaB)pZTIxP1;i}Qk0P}d(#VrHOqPcWvIYUrzH0k}ZQx&5Z{NmUp*PG)n zzm>VzO~JlixJpX797Uk@hveU_{DMwF08)AQHFPYIg=SQJ`|mut;;=ZzE_17Ri3aTx zj$KxODon@s;Eh>irvNKi^b_Kt7M6Z_uv;znt69G>f}ka zysU@!dZlg>_VkdaESC}l%9ANx0XiH#c~CMkKE3CI`Gb4JP3eUUiEs}KY~xd6ABNvkFaskVdN z?m5FcX8~vawU{kZ{FRjQEkRC*C^hI3Tv=aG1gl&po>c5F#0qUid@svRT4GH3}Ie#(7 zW^(LRDI`h{CVlA%f2g92iY!#8mc2mJP6Y|H9R^A#8Kl4zj+EM|D>4>n;# za5h;ovZVRM&)j3)4CGF?q2#E(XJCf15|bdtPttT z2e$Zou#J^6OjOkcjcOyg3)g175$sTKTiL+bwa9S2;H~Snav3!|$Q74M+sw-OR)&Fw z;7|GiSbxxgjpjh|aIJIxMjt(7oc`bPV{}{*WEtLpDAY#FbTIYI_DgqtXoLRt*CNi} zI7rFK4BaPVq5i35QmanyIbM^*)${&(GTqIb%u-~6V?~^Qcz9QyfL(cs(~1NVH8%2F z$%i4k*bgC{LG!z)&l{wxryI9>kC5)--$@6y2M3e$d|)Er^O$G-+Mf;GfBINvD!Eb+ z9LV?3^qkbiz2 z&?X*If@Wh#U|f&b)NDN(Wn3VcMCkse+3uY}K$#GfSb8XhLBP17+l{|>F|@8a+3Pfy zr0rr)0UZ)$wWp+F0}m!o>fK#MDaMno#!5jgIa9o%O zgmS^sN%4pDFC|S(;*k{RkFJL1x)LJw)+wq9p-@iMF@8VUKPvj!c+A5c_YG@#*g zZsL6xB}HIwJ3=CeSl!$%B1t<8ku}B#Uf`8ZOIWUaO15nH_2RW8k}U+CKK^qk=iaFR zz&yj+egzb=qe4%s!-cA#U$tRpkKuA{j*~?$3B%erp#Q^Z+;4l5MH^>Z={{;`i453%}a|i-)nIAN5NeqOn`-;$Y={w7rXpmJ2x1G{9 zZu|5`+qzlx>dk?{Xi$3Z#TWlnda1~P8L#e!1EUN2JfHaTjsW6CU@UZCm?-Ogftrfz0K!}b()i!0+6XoZ5O9v znM7=^MY^mQ3%jgko$l6EU7(k*T4$-b@=Wq-LBFL@{cEMTwj*Ovq!xnaLFGA7=PmvL z>{vBu`;bN(tbUIYUz+mN{)>Oyt~1vFHTw=HA=CN`Bk+!WTsvPAL!Se*(Hm zu7T@T-1|a=IT~rD-ON?Iv`O`6g>Ga$ZP`|_dEkRX9=Z#1(Z|MJ-OcPlcIhP`>`#bm zUvlZR&Y>5NB*%GL5MIWskd0;I9(>l6^qUZ4%Qoa6Os=^Ig{xYKd`D_1C4Os1z+F7` z*-?Oc*x6eI!iQ6r+1+EK=3C&@IpytIiX?Z7Vr{&U&R z%j*=xQDuwXw%xus917YPAmD|d6$8pXt4;&bVp9SU>kdc*SXa6TLD}UBfdk=gD)36l z`JD!Izukd!s3y-F$aN+Wh|-`lCgx9erPqd5VE%;%c3>cA5>1fUG2j^iP8zX#>2IW^ zA_AKy!tYg?B62FXf#Y=+uVT8SdsEye_my0Qgopk!$&MK&%`uP#ag}ah@aO-7v!nSF zN)SSL3zq&-Qc{XR3>oOo`eJGc0H&${kaw^+&T000Xnc@G-mPov78Xtfr>HxR-wkP# zS?{k()SjM+cLYm)5DHO{0$)y{yQ=#yDP9V>dgjRPM&tJ(eYdftU66|tfz*u-6>DxQ zBez!AYr7%!S=0Y$3V4;T>yWNQ{9$NI+dm-7U-*V$z1?(6LN+)x2*Ns?68i&q9iJ$Q7 z1JXY@P!A?EqbmIJFkU2r2QxZ*)^2;&MMw)7Zel`&Tg8A;M>K7XeBF>rYSqWvV5jAj z<%hj#Rx#tT5H$9UdGPDoOAo6xD?pk;D!wWqIDt3JUQzk_Zh7Y8601D-$0kIE?)!ai z+;Gh>p{T9TQnh7eYlv6nii1$AsK>Z>0g>0zTc2yY@G*asN*rK=%9bm50ogltV*nxW zxK!qpsV$G@4YWmZdMVaa@nmdWs z0JNExey{!?xP}-gec;qfC`HyA_JZh-JAG2P&?k?%1sHsP+^YdBAbA_4viLBHU9Cy6 zDClzNG-IR{z9=oJ0FvFI<+UbKn3)O7x^H~m&Fvigk$zH;VpA$GpF%@@_cJmYO~6km z#{kOOb7=k~Y(E=AfBuu+5k^r;QI|dym-bI7>51K1=h{l$g$TT;$^$A(a9no|P7=S| zgCY6#yIWqsTH!i38w4f}7`AB*!_JmMv^BN7Z~M(aYmFO zW`uI(70R;hHE+J=;yqR7i*fqpti*?LqdER4k!dVSwU}u&yIBkpIU?+bjwwN-zijZQ z+4TyXurKWJ?n)`Lq1(Ft5VvSi#7Qe7__+XbY-e{syio(~v-eoEsr~d7(hb9{&C0d) zuP#i7g`j&y==84LUGuA$vXc5~tDuw9rEmLU;S8+iTXY>@*c})_%*f#}ep`Gj4F2uv zHUT;C5a$SL>tErJKFBgYc1nI6M?-aF1=%z12@4-R;7;=^fFd?%a7mVt%2t2uy;V@K zyllY$MG)_33{9t|fuu~8XK+)moS-#d%L8kPf@y`5_9od8x})01+6w(4M0N#@NAN@F zu<&RwAaNqdAfL8TQGnoXNbk(0?3^E4&6L&hX#mBEIUo#XKC9GQxCmENar0Bn!9vZ& zZ;C;Om`!$>B zFI`=%oP8foI3oswI3oWZv+xn%>mz%`${e;?n7&ccPV8OtoNUPz_HBv>(1`y70^Sa$ z*MVYi-q@(bk~1j4R*$eKJvKY>v0h&^x3mlan3+1?a0n>08+>Cnflqgl9(JI=_8#Z# zn__{v{hPus$V7Om;V&#gQTyXZBc&f-X5xm<-4Q45wGzbv3T-)iOLp)iE`-vHUbV`5o5=OCY z;C}t@YIJ`w1HE9Q4m^SSTk`!+Pv8q6g}CN#i2fC%7&ECi5CFje;9K(~yPbPVF{wMa*GmFs=ozG+%vgi&Q`HXiBC)zgawnVm@*5)qe*+kWiF?JGH3cZif{1WEuG4p?isl;X-Y;)sd*>>x^Iwj zhJ*TPKV@Es-$Dr=HeNck7Y{yWK9l7ZUH(&iikveI9xzSd;%vC7@Q#dG(rwSi1Lera zp$P_N_?7I;oJz?Ko!s#GE3%P8UThL0xNkFMLj2F~5;ftEJ!YwJ%z#E-OJi}dr6jI) zy7Tk%#V_wVbAT_YG(OFe4+A-Hi4l=9D<0e{6{z&Q{RGkBQ_P%voc`g+OeEck_TW8Y z*%y6}MUfmHXra2P7?Tkx!@4~c=72l!@oDw4jswr-Bo$+{F`3Y@{(t~0GiQTO^3E#`qVzh(>m?Y=xSjM-oK+>-dIV9aA>k06sy>xG{vVO9GkuvB;r8ZYN zPfbcWI{k|d%|~>=D?PL05la$AfOeBW@OJd+Lx44qeW67rS{r6K82_c4oLMsZ7>r>w zFWPw}`i5f64cEz07`;JjR2F`qbl`y3^S3|F$=*_ghotPgK>H)~+)qkMd2Ej~1v&^G zNYAYMZ@vf?9e8bS@)1il9W5HhdrD49c~V8#%)RInKEAYj$&u}|0_j&m0(h{Hg9tNxwCp&Hz6~Th>|K3vV+*63@T5t+d>EVQ z#uey0Q%d3P-s`D9wSgNH3og3hc;(-c659t46vZ@jfRO-f{%_t)2m`>L3_?Tc=T zFBCUqt)k2N-*OF?LdGluD0SLTdZDzRsVJAHhIN_3&GY0#Mr?(|NO8;W$J2`MaBrTi zI#Sdjuft^5YD*u9p}O1BA!WCgoF68Yjip!|4ccggxyFtJ{A-fE)N- z;LYBRBO^JAUrA3H$GZ^GNmU$JrpHhfmXe67>9P)e#KPO5zrHkfHn+(~O-I%Ci`WOafZQuXOEeE0cvT47ajMYr~gv@ zIyck&aZfK`hW9_d?0T+3(O@gc7 z-GQFE>#L4^YgIVL{Cu&q_T6V^`nX%X#dO8kPx#QOCN0}b6bcr&^hELN;7$`ri!Uvh z8BFVZD9sO1)@+Fq@dgpXqola}!uuzF-8e+6e*ToCSuV|)_ zD`vZX4USXb(X{*7JAB)QoW%-(3uCGi*W`;N6syG_iNJ0KT}O$SrF|j zOSP+*b!n+}7`n(CTHTS`=j%9HFVU| zUR*wP+gCG$;zq&BV~H~9*a=lJg7-HR4L^=|Pf6324vYV;w2M!hK6ZIM-Jzp$m89#0 zO`Ai%3F$zeskuKz?TUd!u#Rn;0CxQMXmjRE4sD8X6(8(e-DG@k?`nHOU&3qSRun3RQHx3#LQix9ogp7U_*TMem$MhE7kWd(~zn-}!3#=1^J^W&?S$<{EF8cqAgzPEWI6Dj zf^0hZ(B8~%WsLWS`bTa;qY6HOs6~57lhgSDW-dlm-;hkn#uih z{GAM@xV$HFY;l#zfv;!vC0Bo7S(Nzgfo{|*D#EGdM|Noqi^GL^{6={;-W_%r>WY&L zgw7MgGb1Lk)_GRF)MZkRDAnE!o7ec)&ZR{3r1li2o>f#dJU`y;(jjB8mUdMH(GdcFx!xX-w2!D$A5}vsevw@N20*eJi@7F z!eu>}7Zvy9ZjV(_OUA;0KwwW~@U(Da$D$$I_MHQZ)tIcGOVGOtEs6 zNi91yojfD8#8O{mbAi?LO-c_2TWO5T=YgJT+WXiHE+&l7rVwuHm;%b>4CGcuJyH^ji^ z$d<%Vp#K4>MVXU#?()WOJ6IGKqRYL%Xh;;yrs~9_9~X9~o;i~8M0`bDR)bmC%y5>! zwD^&7rE)TX>8Pgk zuS`cUI-^BFVhzS+yatPoIRuW(sS~dcP~L={s~gM^-q7lGRA@c|X&xL#$D*d>i^?NL zR{h!Hv&~Gn>BXGkk{k*dbp;CHq33!fC{$kIkW)FG9u492+}p9mZEa<;803v|8p{BO zHAwNRONg={W89NdK?=?qzmiuOy)TN}+q2s#j?UNCa_QyBI!*0MNpx9V*JFG}f~&Q5 z{?hk2&=u$hYW2Uq^Iq+i$g=D!IUW+s8&r$fMXuP+i_POJpS~Fnchg8LE%(MxI=lL$M5xTV z>bV%O#Ts|b74^?77`XJ?UTS|MjEiW1Vdyg)q&FeXLR+`zSijGoEww@o>h#7KE; z%3=I5i|nUChNzspoZ%Jw@s!%NALgm{gOmXS^MUJJJkG~o3|tC6RG6;rbF7=Lu;5q0 z`Jt-9c-Pb7R>giZyu6NT8QesZPOIMvi`Pjc+EWzP!+7a2@h=K6rOl+Zh0aSsb`O3j zH+RS-{8!2NOb9U?-dV8@`*V>QB9OEzK?10T4lP)Uw6j*NBP)#%(Um- zwc|VmQ+@+!dK$mlQr1r-W4||Yn5u}VV3&S*I+pGaE|cb)LNjH@q-2vbx92*1tGF1V zc!~U*#(JZ&F!A7Q<6RYn4vlRAghjQO&Agw+8e@!2d-W8BOZr{8V(rt&4i7^G;IFhcse9O0$BB#JwjPiFKRG&#`Uu7&6d3=|mfRa>-}D3@CZTs=SYVolAGn|ZPQNxZ(tQo8jqLwgHd*SjRj?8CY{ zrhDdu!YMtb3$5=jz9nAGsC~Kmz-i31(AR@;xh(E@MKv3x73frzeS%-Q^ErF$CyqAX zEpYBKpXs_DMdmM>!`8F*#(VX(3*Y_K90%Nb^5s6AGUEHasCt4W79b(Z!T)g*`t#r% zBUT>M#rw&A>eDLA=Q-DD*sYOsUplY9F!`C|utZO77H_~z(RYPX!a}?2g^mfXn)6Ey zc71VonukCpkm1C*f=G+UqR@|6WTT=YS4v-;F>j*f@NJTC9c^9oJ^Rjal|VXZbwkb$ zgiGX{tXbB?)m`iDk_{NV9HOiinOZYa@IeZfOk$hZbC$?w0+&+jj~I_ZH`$^@rkn+O z=GwUoDjJSvOnFSry}cPd9H5}BW+pNB8FzDi)dO*SYBfq1r$HhH8=y=y3C#lg@X=h}M*EL2>irn|3Mt2Q5CMi#mD|_WM5tFa8+Z zBa?E*fu@r^gzCf}1IvBvj5cUL#2|^oucW1veGsI~Eiby#tQsq^j`=G1jad&nQj?0A z6MBYN+>w{pvh>_;pXoCCcCh!tg7sO9Foi+;Y)I-NAr|E;%#p-@f=BdD%Gf-H!;6g= zNY)Wuo}jldu{2MX^0CHw)Y`VVHaYjRL;ecWv_qqJg1PK!E*FPY*G=I!@9Kv&Ya>Xb zg!RkDB7?>G6|znk_0HZ(T6GUDD_Jbex;zh#mEJm*xS6#2_-esN2OI;=+P+JdD6Gl# zRjR~faEd2)?6u@b#kAT$i8un+u`=EcLIDC~=Z-y(b|yN&7vu zMyF%*J?KCu!`FdCu9QGW1yS{65;cLX*K|8;E3TtN^jw%TXb;0`&uHpgl~B@6=NTUf zm2V`rDk;GdJ;MDZ7InH>s)erOj|z+1sc{)Ls88NNJ|_FJDuYFJGhGI3F+YxmTF=q3 zFs^3}tO_zhb7eEF4H@`>*lTUkHIL7x%P4rP%forh>xE*74Cs<=H@d-DqOXRtI9Him*vX1|C~mHvv#w#2-7 zb>YUqV^r_Cg`PVm)<3?=t7#fE&b|BpkX`E{<20Vt{npY==Cp2_sQgMz6bsQ6AI5fyl*A_j zJ*%N%m(r34K07EHW{qE`pnM4y>Ums@&?VILvn;Egci@NcrcBymybT$sos3gxL~?`} z<20sR=WF9lu_@nepH;aytFK`{5XP5QFh*g1SoeXWB%bLo<4mOX)~CzD)Im&Et@;diAb;T{v=!< zO`7+)vijI%I^@e8PCVn@1Q~;aUIIb&@(>>jg7DY#^xv7+qvgT0J@TD>!=3^=D|!Md z=|+HWM?aPFwumHooAX1u=6dY`4u@>aZi*Oswu_xr68hhGEIgXigL92!B!DDW-Y3_c8* zPKN&})9?Zb|^N%s2S7>)f)5w7h?GtE{w z(W2K*&|V@v)BNA@a}mi(qt@t2&OU~Fi0|yE?Rym{*MLwibN-xsG(;qo-T~Ut##Y2Y z6y1|XQ}|6^XITMHD9S+@jiTvY75}(AIM=j(-`uX-#!{~KeN0&V7TI%AMyFPJ#;Sq)w_Jaa`Y%#wJ_UV$NIwtM+?UxR! zxu}DB6QM<^z&)0s(KS@e(byc8W#l(IW#jI=H#z8dB zpCr#ZysZxex*p|#y~t>7WF{^q(X9Id&T(kEgcv$+SK!m&jWavcx6%ys-lhVzl0)u$Ha1-JuV zP6Gpar5K@}!pzIB3VJ(5SR&VdSjS7fedA zqu)dYT#@H$aE#L5f3d(5ghNRC^w5T5(|+NZj$2#m%hAr1ex* z$4&kI`X~f!6Th^(1J=hE6rJNVU&hK$^+MN+5w0b@9^%h9_5)iV3%Jwf`-tWHhdJiW z4Fb~u-Gxjk*^ug5^d}hlDR+`D8FO8X8`HcHkw#isO-twl&RhwY!DG5QzU|kn#-V=R-TelGpO!%x4_^7lAMIJf2Hk zRL|AgXXz3ni@Nq&?koWd`6dD%{%-ed#4np}qqz!~KYWz9vW)hK@PaJk*sY zMiGwD`*$3(DT^s7XO5&JAt1428RRa-7EO zgdgVG4LS51)c4Ev4P_td<7n-gVhcQ{0%K(SD}OFP7u;sBV4&j&dI5>QmoIBFJz57z=gw*I`bsSO1}DXl7*03BvEQ>uA^mV^k`eim(S*13?ni%U2GNj)a1^vy~H%n)|RWRk(O6 z3NzUf-&mmT+rse|aaZJqXEpT0Q)2BGiAAT`7h=1@0*k@;o~-E^Pm5XuI*3SLZtb;v zt&Aov<@UNBm3rocuf0=}h$1e7eDK3}#W8WCA1~}G`J)w^D!+|)r_A%DZ*vA z%2&uq+L9y(9?HPx^4Az0m%KFz`)MlF@OTf}^5Bw`tMIsZmrg7)Ym=;RgHAk?j?Gst z|BWYH@G5Y(?Aq^ymB8`4X~qNzQ+c=G!cw@_UjF{4ulvtJm6Zl0bBQjr8O#*zBT;$G zR$vmfi{_J;A$C}@o>8$>xiM+X*W>@zM zD9u$s_0E`GxV~vvfs-WzBjwCWvhLaI)oq7rnKL@dJyHlhh)dCg}=S);JW7YKf zs;=P8xW93kAQ~#lgaHKNn?@$I4SMlOeyyr7@02cfHmt1ts)pgGT7ZvaswgaaCFW?8 z(fO!kyi|{|OF&IUo_40fzlgs~f|ges7ddh)RcU=rIrD>hM|=({doc7YKo*$1NF0?u z>IB&>kEq)gcDG{3J&aC(ozNK+65fk1s}6ON8^xx|vZ{BfjPvjJo(&x|z8 z%nUCp>n~R_eiJ5byZ4Q?Ip9i~3Z_=->&^6HwN^1<`w=sgqn6Jx{twbzr-#lwVkt>X z(AmxYpt%Bfpv*_j@DDt^2)so%HpC{$OoI1)S;}?2K*pE$D6ieuL-Ah&zZ9-d20AUC zOqT3mns-d`T0N3(a2GLCtPcIf10jV{mb;Jv_fpmKwN1xKn{MmY+X-yP1FdSsgdmHh z;EFue^4warhgc|~26`P0t4p{F&;=Z0%ju>7`DU3Rk- z90~GJ3+Ai0KBnHREOU@Vy@7b+xW~uvmY@0Z8j)*xf8)3rOp0s%3h(Dwg(zJy*%-|r zw$qlS#~`dpmF-;bZgF>zDQe>2{lbb~gKr;8-eB94ZiuM0Bd$M!qnNfU1tdj2! zAbSPgbd~1;02!1eYJS#7*wnUQ?lpH~7N$ij0jK)ju&B4DlaDHe=4gVN@4fb={U*Le z&pqc@moKkt^}h_e(V??Q#wt_1+Ka=!IB%gpzpya$^u572CFLkhhUe}Pd8h*%HO~GC znge4&@%5>K7%M8mtHwqbqMDf2eiCLhX1Xp{>6LQnEmsz3VR-^JS8-5f{>XiHWECg> zwu)1qpcWJAlIkFM_3BVW{cVAo27B>cFK;Pac?QFXn z#CIH=1y4Q={JnTb_d-9iy+F$SRQH-mR)Xt=I`4nZg6^gLFoH?mwDUBb-9Jg$RGT_8 zxvFcX1PPdMU;EF;UQ(6-QJ07|iCP=rNG+k#QhAJ*^dSp}UF}bAl=nW$<=96;a-U3r zhput#q>s=wG%Q2^`;32S=y-Pm_PfB3euLMEt0VRA`agX?;(b?q?xlT<$@nV*>5fX% z2V3e7SO7^As!$O=?JgOI*sVG);T)2;NYQH8XxCb?MISkyY&Jjfm67u^#T0}uo0IYm z#%$=sl%rEMIfzbF`-@Hl#sh?}dq|r!i}9o{rO@@Aq0>CqOpC2xeG;XP9hY4!t|pNX zVYJg%(i%E5Qb$la&y(=v(oo6%ekOI?o4LUSPx+ShNXIG9WBf+NEn2A8S}8W%(C9)Z ztrX1dEma;M2D)UTx!CK#b5&rs#E>s2Jp7gub(Ku>3Q^)>$%WXJ^Oz>({%5Ry8l6p3 z!-|^*rtoQV>M+EHNx$@$&>#CzJE*_y5AR(wLTnj7(b;l@>9yFBbH?JchF+QW`AO5M z;f$-;_A{gvEd|Q;-J$EHdgq`Xj|;%eu7ZXP$w4*6<>=AnPNZ2ON^zOMw6PMl1K(6* zcRP-OUsiGJ#%WJr0N9S3cAY0AZzUmSr)#T@ZOJ2oL;Bx|g?t8tgc4jC?S7(PKz<97 zU7uXAGS+4s`&wJqZeGh|`XNpL3i*8}k;pSUxY%W-;54q)3zu1ROs<90G+eCDCo7#bn73OA%K9cQ-0jXxO$}Y*A zgvhO4i!z4P??*%~%`)kCI*cbJ-~wX?ngT!|q^uM^UY`vsOmx2p2$MN&@L;2SieAm; zZiRgQW@Dd?sM0D({rJmn6+~Z|#Zl*t>r9)3f6KF<>!a&kk~ytCe`#&qkFevMKicEO z8S{ye7YmQBCzQQQz|~F6cI7r&yUuv)(W6}E!so8Fgl51E*VE?cKZF{RLsyZeL5W6O z)#qsw=dQa+9z=tOt>C`WJ?%n0?Xs9_urSeX>Jt$mF#CGii9;6?ubyO~aM5Cm<04+! z>T@7#FeUrz8U_mO<}*^9x#2|TFBK7r*PVL`-Be1!wP674uxCJ_1hY9ByL)(0Q{$VI z*>QEZJz@$`&J09R(JitxY;6 z@i13ZqJA`II;-C=6$Ihn%S3KdYD(in2~wLb8seH5DuF#5d?%F??>)$alXu$9UhP3s zZkS_Ux2;cp+)|J$cHBBNItPvTm;;Ud!(SR9K&?Ax@za{@=C9SbmJZ?Sc&jymy!3BW$!4ns`% zhzH+@03X5Y{L;_I27onyTBhGmAL+J2Qp-K95a)RA6enkp?*)ym@FL>g%0n>Z;Xm#4 zkcb0WYqIZRNcQ60q5S&6|JwRxKHJEXD^yTf6^sO9s1pTCYHq(Pin^ z669|7(g<4`{)iCf2Sm4CC118@vvW~6(abh|?>5Kje1pDXPi}_ZTi>Y_albkTmu0PM zWibD531^8$Y-j9BYhmg9XrsYmw=L>rsj`CD(bz}_6E;_-2Ss}k$x0*U@UW^>NYNC( zsZh|*o=&`);M7Vuq7XI@jwA;tn+tJfPyn+Z%)?{X%Ea*SD^G(bb|)EIw-~wM ziM{CzUG{{a2P^B}R3&v5R3i4xH!Aoe_90ZyG4VS6I;6#7`IUgW7;$C*3HJ^?XfN(# zjm$|vv6k?m+n21T%|q~|bH-6f{9?=3eGTkC8k3m~I^!C6C}$WJAq`kGS-t{35-?S^J8ab_!p4$ zTw{wl2#A4($y)KA^`^sp+Yk)TvmHO!6J>jvQ<0Co7e_k`g3^}3h;L6uS_Z{&q*+4SC)7OL> z0*0e-B>gOhUD7tlG+5BY&@Bl^vi|Mg=rqFdU^1h%6cEKU&BjMZJ;U-R?xZ%WX_X9x zqZpx^+eE7^IK+YYmx5f|?N=wis85@v*UO{=no6lrxLHd|3hy$hBF?EPt~o(vQO)~^ zc;seP#Ex|141)Ov#vAkE&mt+#(<_={d+{bIV7?3OR2Bmp^F5lnGTEt&%=h5m=Bsh> zC)C<|4|wz=_Ee!Gzy|vP>RTyd#B;HyXCfKSr*gCDu(;#&1Q=%~xoPID@3ln1w`~&G~aI2*?t~p=78DE$edXup# zhr|~k#P^>=g6?>L^5P0wAlAX89E^#U5h0hgCw4Vf=X|-pbn#`v85xnM@fw@h9bK4 z^M97Ud+~?~pt~KTT}sCksO%m)|G#o5upK_74k&pOPHjLEXDo38{pqGN{S!g!Lf zpB>gOgDRF?zwAdJhs{oTh$CJqT*Wd@E}h_PIHGE>mHGfYS^fd&c5Yl>6~B@bU8@C_1o-i+~%QOw!WqLCPH>fiQwlXn;pQN^4Yw=KFLlmaQcF;xU-fPr=| zkLKZgNx2rv=p9Iu-pJfo_^nG^*>AKDosq9j%y{T8vUT&!Z`~G|LA-4HbvlsoJ8HT2 znu43;b$G4JuSX#B)?rPBaQAeQpk)D6pX${s-77?illfz<*;C#-_Wv^|uB9Sn2G^Wn z=NP~rlD1&l=JcDZ?Y^WN%34OcNmTsMKUW2!1Uj$Ho0u?5yE=j zzNir&LN*q&$tTy~J%;i0R2O#$9i0U8F&h*-zZdT!QZt_Wy(I4@`2}HPb`+okZ0v)iBhad2 z-1H&*djOIo*lgK9-@@ZYHbFRU@2(C0M{?@U{v8B8tMrVo10VelYy#z5pL38UfX+O0 zS|>-qWqn+)40H@tt@D&sr+5@mB`egzPqaO3yl(KA_#9{L2a$Bh2{|Ga?hdoG2hOXI zd!HCAxeC+kxNB;-HNA}$97c+wUidlg?uHjqhn48iL5vnfPFl7@3zF?oL)0aDSDxNw zDc2zQ`Z-Ul+SS{`C(bFqAy7-!K89+u^0({rXl-dOXr2Nf#>;hGJjMUuH6 zD0GZBV32IY4R)0<;QCg^!{$cqg=y`VtiQCoPtou^0e7MqS@|1y{)o3x1x#<`QIS7y z4yXKu(PFzvQ$6aa3kz*LiAB$)DPQmp^Ug$mC-DdGeW^mhg?3!L|Cn@_QR@O5XM>;v z1#lH}I1JgI=&edN5(7hWWK{o`^A`&n6`A>9_p|5`cwRc?(>mEMBf=Cu6hU-rG;1xb zs&AcXNs|6SkycJNr4{v+pA*wgLh`s$ zTKn2hgY%-1XJ>Igt>VPl+uxoDPPGb6th{P1?(D@*W3DI5@%+|{TD!zHT{jkm+=Bs_ z8ZBZI0H~cSrgOc(F=fRfW`$+5iUY3kc1jC;VLvvl+Z`VNlan_#Z7-fC63tT*OnfSt z4Ku9Nam@vD7|w#;(%Nu;%9nW(uhTALaW8~Wx=`DH;hb}gm71%e?{x0e$}7alYQ5L0 zsEf9xcev68uIu_9=r48@a-$P7F$)U|xk7beLQ|g=enc#PMVlL&g2HInBLkWfzY@v$ zYN_lLLjV7^3^}#7#wJ+|2c{Njb5TptQqbeG;zCuKw(89bT=06cyDW%SAfZQ!yS z%no4ommq=22@!+RXy-0^4N!o$r~w@2|CEui$-*NaVZxWQukThS{&9)+$F+5IR1xCV zuByvZ*srCQ=?|0#A~AlKMZy)!rXMd;dtFepBcbQ;EEXX`y4thYqmh2^hKVnO%?n13 z$cIW}*bCyIGiKADav?JIBe0Df@c~dZGe@>g4SWg&5`jJHwh-dl5dmm(c=X}L?g;z? zhe1*D1$Y6{1r%A~7cAym^|=;eF?Q9ax^y0e!(ypmoYMaAka+m8%XzWeqV(n6k}QjU zlSybT;{zA=O$E8kbsT3R}?OiDG&uZAsweY9EMh#iz&>7NW9l+hEoy zC`ZfqVt601TIEH&!BfbeUeAyij)u^A@Q8XGfPHQURguMxvgA+*-e`I%bA=xxhjqwyo$76qXpy1sWzt8HUC|0o&~lM@r;yWnzrOD>DgMm1Ah z%Ivo3T>3V{QLJ7tJGeBe-~tKNMTx4_aQ1=(j=+=-0wRJ^z&{=P(I%Mg$qqv{^orH4cuemVyW2`X>`{S-b zn2yb{2awRbS5x2|Y1VpXXJ58*Y|GRFf%HNz&aLhKT(#*WhT00}VygYHUiz%_%KQ=- z3(b(8fCL}epPR!ZI1y`A^ORW>J}sdruw?JHv#tFm%Es#4b$F*P_C7EoD#NO#j%C^5x4H zy(sQXJKYKJn%6s=jw|xkQB%gDOdoPX>V?td!v*^xfy>P=&^7TXCM=YZe^DHo$ zF)-CtWfMB~Iz=#nkNeW?kP7~|mjJZXvM1j17=Y=Rm0{*DPkEG(a%RAHaaE`}cupgs zXrlddYsX#85rFmd0<8SRo(U23tD*|M6(u-<>@!b!>6v(e)o(hkOIxN@zr5=tqWk+% zQr{=r`~+<1_;VQbTx*81&%>B4U`1H~jJ@zA?=f3rUv3zxmWitB|_+FYtyOoxO7uBL(p4MbldZf6Vnc zf63i{ytV$FfFjJ471o1P3GCWtyE9Eg3UHGgG>CVO z3EBqnB9&X)K#4#Zt|8~mm2FWy3!*zH>ZayNc=!THrUo*jVA681h^~C7GO*Yk^Z+HY zdqpJ~g4@gAiRR&;FQRm$(6RY# z=`O|wECfl=e<<&;OB2pV@a~ON1TVzV@ww2k9a_JIWJfhiJ0Zc<3grA?@!G`EU~oKZ z-Pvg5k8U_+qkg%X+mrb-pX3%ZjDc23-+tdLSSdj`+79IM{3eL91||8&WaUU=El-tE z{h!N69Lhb?=>)sWNBmu-e@128{@0T(sSZ4q^UYido;6elX_T9h%7^zF%;M4K>GnIK z9{#A)gHa1T5SwR9{(C`zuhPI+2OZi8aXb@r)wYeLE6Ami+Eob{^!X+D8Qas$>v)fW z)ek@FN2Kr05FOxbH^^vT{KI8_0ShWUs4t9v6&b#-uk*s@4;1eKIsOT29fBX9LGDK1 zgxf!otcU4)sohxJ4gnxyf)}{bKJK~oHs2sd8cf3eA}g$d7Jk`sp7!Y$4+kKTrbN|Z z2V{i^j0z8R(L6pM=$Ifhiw1(|u|3z_o29J}cT+^lkv!4;-ukjz52LAIsp)&_N#WnS z@lkh(t@DWrDQxd2GH^7KacM*#2IlnEsLT>D`{lTh5OU5O7`2}3zU$_wlA5rGl{f8I zA!e~-wm(Ng>6c0}Rd?r!&xf3;I7^MgJCjFeB4;Y3^(UMuNcc27ppmmpn?Hig_!p3< zIME#|((+7rbLO~#_0HlUVgt+(la-Odzx$>H&~b@8eNe^Hjqpoop8Yl(PaV zh%}g7*iCT-_CJsCk9m@gAVFT+uIfJ|DjhuCttiB?7jGXh>fxBT+f^e0t}x_UYuyoK z_mL8&P)k}LNgg1yrRF*Bo!}6>a1RVY!1sEF&y@yDsLmD`gZ7VG=Crtvv?@5Ys>plXi29 z-ha4B(QNQD_LJ#mQ+tnM2`tTh&b#Ke&M*UfI zkA4HYdAR!r1-=(zho*aVz*XQ5UH?D!-ZHGpwQC!7A)u%jfJo;QP*6fCX_ZDmLAnG4 z0Rai=a4H6&l!{8aK#>wb=@OArN|Y|88!3_Al>156%#a@!UKIMfxAde8GaW( z)LvwuhFyMph2S;?ln@mttIfU@dD*V5@=Y5oL!dD0OAsxle&$LxXT>wKV z&bZ!pT@8U{!wiSScQzaRWYQfx(q;CaO`7yYzI$XwGr`7iBwZ;~hj^&yKWn8+HV! zazvD;fBeP}$^KU`wQn4H$Rw7$Lqte^N;e{di2NI??(CI!G=DT_PsqnrcSz}pxTo74 z&8Mp`mVadxrP#1otDY5W)t!C^uiN#fUk8ftX?Gkc+bh}3;V)PC{|m7F+6H3xg08%vR_jzNuK8?N)J#B1vs>7*Ehy~0oH+kS(EVJe*qLjmCDm9 zsRmwci2Y)@kth5ALV>NFuYVJ+vA^QY4WrZMeo*L2J@D>rT#9V$Z+VQo;M1~TFE`XsCkV)8fB?^$8Nq2n z?BDQkij=>9ZSmKk2^r$qJ~D!jVAP?w=ky&JkbV5{FH`JJ?n2{xr^%!u6^wbv0~tXr zXk)7Ml<)930GP9(QYNWs?4qUD3=6UJgHyw=P;N3QJ{NGZZ)sXxhZGH4MKyNF$iW^d zQsWBQ@6fbTS*~K)Y)h%O-%r8?E}lUI)1s#KE1@4sh4>t8-M+ad0F;0vL#0VWGRlOl zE!6v;Fzh=6{ji!k5JIeXQ)5N0mgET06a|Iwbk&KTx-GTy4UlnJ>LSib8#7ERm5C+Eqr7*kj4y7^xVg;r$K2#xeTqfx^CT~)x>-uwhg1M^Jn6Qga++Lgs2bNVs6JFWbOKg!WL8d@Og=eORc^VG8M0oD$=Xmy z7qU&I-uBbOBX$+cchA}nD_+Rr@COu%RRwrH_KXnE#qqM`@NB&T*- z#PdI1gzku?UW)}sWFFAvl!=j|r>S1Wa_t}=?psveCr_}$llgWbEVUPaaNTDK{TIyB z9U}#v1U0zL+&&xfRVqa7G)zR!w7=?UL+WgXwis84XxL2kCw4g5DVqNU9CYoL)k%T5 zw%0fuABd6+12ZyLZ`)ULCROr^)2hADNhH9zu%}Kd*U`dS|Ne1Jv(W{YtAk{S?SVYlQ)|;fg@6^6Q?D50pqZgm5Xr5t$W)2TRRp#xL!Ua;g*Z_w=?$UJWZYjvW15o27m;cs& z45tG6$SaI_o)_+_w4en1(QARj@xB;r(1ObHa?^Ec{qCz3pPE$&_lKNqy(e&QClNVJp7 zRZCbrnS*;LFzun=CRDr^zS6`Ozx!}K+XQE*{t=n0yhA$VXL)>}hyXG>T4_T3uQzJP zcg^*F?g^A&xPKZWe*;53Vr?tJvDdrSz0pMjr@bi@(LE9W0V1>KBfNU#9c1x7OYpP?}oaAs*`>94DsSq5_xTn%^OF;YIhg!*aSZ?M!$}-+qwoU(877fQO8#ib0iGM!cbM}*$*F&n zecb7%cK}nuBIS69vib1Xcu~@0n_Tl;bHK>wCMFenMvf(_#SceJd(t%3z5qm7wB#YM zoN{jr9>5<~fKQ@C#P*X}c!@Kp2IpM-ScC;RM~r0ZEf$g=07&R*)Lo_c%$?Hu3tuj7S`RM_Rd-Hi<3p$7L9Fn&rqi&Hj=%0of&*-?k z3n!I4-penKv+fiBZIqn;>F9PhQ+FL7X!zNDl&d~bEJ2a1v$8Fz!|mO(EP833e^l~( zW?Qf13EDIR;e!~0+%soB$KOX&@IgcD{@R03@JxVkzy1>%&$Dn`DE$f13ji4J>gDGM zA>8K#WEWack!%9giDzCvcjG0&EI}#%ec*?XaL&_u2gaC{7|_1CUkG1_Jfm~_?C?Zo zn_b@Q6@FVFq5lU%VEQ^kpb*}OhMDgJWeL5fIo3^9cr`U_wyEB>5}f)}R5cBg2l8u$ zy=Jw~=m#R5Z5B$~0zH>{NSi`J4VRXHPaDcD=%tCjTmeBK$xJjwqtt8~dak>S);0iL za|@p5^h>rLJ+yY;u{&ha$t%AlsI}$1F!yXFW$Vpg*#11^S_P?K`+oUIvbkO%lG&Nh zXkB%n69DHwcp+QXc_HcW$qLX$cR>k>eH5TryH`jO1;Bjxj^Fr!0wKMJIWC0P@$5r9 z3ontHUr=XCE%w2<1m$aJUw$;hF7~vXQAJ|e5n)IzQcazMMTrirjjMWa(T+WM_*83( zY{u$)XMh8+)PS3^hQjpT#uY6I5Q&fF8=4QN0$U(ZWZGkc$hg*zs5biMxs4LECqaX; zudiem3^(|kxtlwi2~kNjJGG4&59m8twAA7t0~~iGC5XruwDUWRZo199{4~}W+i(?- zDF5>l#w`^bZnJXES{Wr=0U9HTH6SDhWpv_NvtCpnm^|P58*IQYHsF+E7@lmsN)rgN z1F;D3*<)s4jbE(p+{R=idmwsqq0t9ZR3~*H{}MjaV~TvmzjB#L_Fq9biHFjx=y$zJ zMkjBQER*eds(B=rTD^jg<8OvroEID^<{6n!!8-aRyP4AYR#z=s74lwygielbS~q%@VahtJi)=o6U37`oiDd{ zk5AP|eyD2}3c}oTo!^%){%rQj?A1SXS$gl#+WJA&RAYa`cyXM*(*tl>xN#^pAVg^` zIEQc<`v*^8ZHUN+&oEcov3t+;`r1IHGAZ_U@EvkDdJ1Z-ze=Bp*u!movI^Wp;VxIUbK* z{U9~@vOzP@uBZHBp^nBm5ucIJPu}h*Jm$IzKvcvX)WeGMU?jGXwtXYwat(w z8O5!B&U@7E!V)b!`wcy{12C8iq<-pWSQ_Sj9Dl6| zCw8{^>V(xDkv_fI)t0PP_E5KXry)LZcq@Oxu?_x&GkB>4MMx;5b+`ErKBN_t2G(I2 z5v27A__4{iSTcNt(B%O|v=eU61ybLtL_+dII#-@E%T%wvfKG{J*$Ow(#koSNa-*Ry z%xtr9^vG18_{Tk|i~W>Ozr{8@{1ajeMk(_HCk5=e>YxZZ-Cugyh6P;s4?ZNq2DAC` z0zh~q1ri-ozYownv(5Hh(KYU0gvag1sKd=K1ZrR)GV~8tnadljGXD+X0->JRYq-S_ zrW|xq#gO=7BvSLI6c!9R8dzLa2=+8+F56|KgiXw11ADV`9pt8>MlpO|OTT9da+BoX za(H)L>jz5ZCFZfhMjb0s*KoJ0j*P?HvsW&1{Rz2)xchLsg{9lQldYE%!n5;>fjx62Jnbvh#1myFo{6n7;su~`X;ZK9O{ZlGec1j% z1g(ys6Vpw@8M0on?dbzr|kE|Kp2QZFJgGD~^VS znu@Ga7d|Y>b&iyffDoE8D0uuZt<^jGa5W2P!jzGk|>m!V>CB=J&^rB>7c2_|4ABNU> zE0X^-e6#zy2^muz+McIt^#>KRm71Vgi=0sr-eW;d!}o>idf$+nHb;_-fww z*aQ@yD=|+sdu31Wo@A*EjfOd9-nML^RJV6-U~&J?jX;zQqeEktd_a_YP)Y8w79(YX zMC$P(H|Wb8HivzFYk2(~LQviF>;j-=*1ui{WmB-7##^0h z<5{mD&_Nj1Q-Ee1KVc4+gVFA$_$zw+1< zNgMDu>~(3#H?r0Nh@tMRhYdoDPQp6*X{vFu@aVzQfA|e;z^TxavE#6wj^$s}HUt#r zMji(A&`9ht6omY9qp^ihNHXNl_Y?yw=!U3CMXXp4R3QAn0jG%p{t-JV5H;H1!Ax=d zvZlh`=9~Svw+(w0Rv>*=a2+lzY4i?eEu+}z0K=+_hjDxA2z_O%lZH_rH+IAOYVgiG z5R2y9!=;a(zzibDi#}90LqdTNwvwgqDAr%OP6UNBWKbda5hjQSd^F$UBtY%;zjVPM zU#a$GqlRk`Ay8LRpC5!>Ua#hw;UVw@Y-xSi_KZs_&{;XF72m6i+uj$>=pd*h2fx9YD+2I zmGp%{E9iMB0yG|-|8;U_9n{EXtq$*m^L`G*gZ<^GCC;2)Km9YPwx&q^lPG?d0sv8L z+IuGoj`$kxVerWMFtGV>EP7K|`XP3UcgA~Rt1vsHdA0!K2^CPy*Qa#dlN&3rkp}DclXDtym8_N^Cq7puVspL(w`< zk6{0X(@#jh5G1Bquz6edw$iUq8 zzk8?X2w*WU18e-Kz;s;eK{TBl@$bm@fe{8nHlF{7W4jX@R zC)huz3hqo^==d&Rc=eWJ6iVg(kRQT&(;^8mvgXiT@-0S?GG^r(T z0j6Sm`K!oxi_$K$R2gI^MYY6eg!m*ZvKUg>fS&r#*#}ql?^n9=ohl>Lsc2^^L#)Ql zJ3EqOx6Agkqae`PKWd$l0#JdJF4n1j{LqgElWz)jKfixTE{_m)peZ{#Qu&0}q}9L; zmU33||MF61htKZcV-aKR%BOxU4x)Z;*?-dDi;)6657y+Ha_cg>aXKV44DI*b_UyR_ z0ia6+MB>y`JD)bWp8f(iAq{#m{Ey=k|LSm>D{;^7c|ebJU;xA_2U3ZZ65AfD#30z230~TP zh`kD`BHd09sERfOFcCfNtH>nWma4zis(pF%(`1r$Wm|Nr*x!^C33tvWPE?+4TOME? zY8ySwQLiM8_{`TUg>+A0H9@&}P;AI+G?t+IFl>Qw#5BKQZrz4&D2K~1k}*%=(+R}l ziv)Xvc?{g--F`DKSy&TfJta*cAQl`^v|M7CM0B>FmV~@O9h7+xE*0riK6pfnU3y(oUh;QLk2<`Iu#LMkX?p^FxKUpzxrhm)=cbN~*NWpIrf5?xs=S`|T* zV_KfG4dDjd4kj=QV(CN?->PT)oTPsFBR%Z-lw=7$(gtl8F(d)%FRXSn+_{-wL_;Ru z6(Z3;&c??Mk&)-YpB5*MO9+wrVv1jUWFrZ{KMQLc>xt zP&I40k7bwum?LenjJDjV%^Jr5*@F`QR!Qh-r!7Y>FjGp2h9c(0i z-zJW-aPZaD0ed!-3_=nhjx&JabWAE7|Akx+wk`I(BqNv`Gj@|oc=oz=&S#X1h-Fiq ziK!@DGaVREuM-11M=#boiSsDz)2e|C!6F+;lK+M=Mll3>)A(HtB;z{nKY zU*KP2S-=#hc<$G@<=RO~pdh|ULlqt(C20=7kIcyd2I=wLrUxm6C)yo)YP}0nICr<& z#jBJN(_XEc(U$d?S42pRj~{)>ffzT?vX$M!1JbkIp(54G-9HaYHW3B2|^Kg^lK+Wrvmvb6jYfybbWs=ZHQ1N}x)i^Th*y;o*F=U4iKaGw_k zX4oOyuLdqZZd*Ah6<&SjF)27t(C3pIDIOAeI)pop!KwL2T1$U;(}L!{D7WE+W}7za zdhYGslR;;UKOb9-cRNCFKKv~qV>;Xx8poX)snW75J=il+PH$+XvNwdAmK&IVNv)MZ z^%P3x75lKrdCcW?o!d_C&y_Bx`FMKtZEYFwc~gc1cZ_Is6Ic;>7XyKnkh4+C?7BDiMt+OcUW=NBkGhmuF$aHoKy6Y6-Ka237v?RR<>Rj8`F*>< zQn~s*A=%kR3q$G~m*-nW>fe6tOQD5ooEL-}&FG*q?DviuTuqY|ND%{n+Ca$_5DHV8 zE{y-kzJ8;g{P3K-<=6%H#^i=qB#HQ` zJCVyf9h#rLz4*~%x>^$n?z;gggq9&;F>;^2??ZBSGbSSGjc%uTM-{$)5u7J*Z--WC zbdcG-rrfbk$oEC8WY{m19LB1>+}UE$2ikJUkf7I?wXce6CZZZ|Rd} z5oN9Dv?C1#WLz&Am)sYy{NynqHdh9m9e1Vvdh{}qpNvUW2%8RUjJN1nN&OwCl9d5R z>(zX`V5Z)2;31~&+Rx%0<&))t<4g@h4*rgY?4Vu!FqsXI4}j|#1FfVlw4KAWTr{;& z#oYIO$aLg_@4b^GepRFaKq_G>7`#9)4N;gGm4_MNJ~APJBg}bkXnzIrNw+(m!Jiax zF8>z;YoizMBeIG-bb1bl>G6d`_dfFYG6RA)aDE_KqJt>Ta<1E-y9}UJ#*mi?URoR- z9{F*X@j-9aBgXZM7++mEe_X`-)bg=O`4ZaBpLY;wqh~r=gvSPYXJ|QhTnDQ3+Is+K z;v@A_iV)&`AT;%ArW5O}zSw-;G$z1-pl?5iqADiAjQy`bZ1hd#=r8g-m%cZTMX=|E zdjMH-0H)#%K;#6PCZy0W1K>mR5c4=PNjlXMk2rGQ} z{%(j`X)z_mR1C#?vf4lsir2|b6Sd>yz$fqi)w~*LXqCnKdI3}9^*D$P^=!g|(}lpAn=F+zEF{*{@ZVFR^k@hWNYZK5B>=4%2U?cmBVRRFLrJquLzaY01N;zqT1fg zrlK6~3|VHaSLyC@Z<`)z>Ky3X-PO#ykdAS)J>k+AZY*9cI1xNop9XUs^WD7L=v=AZjceGboE`Jqjbb5LD z47~)@u7X&oV!;;Llwsv^=r8ApT&- zZb!5L#Sc<5)`O8SPd-$on@`9l$>acqto4sptJOko7tMA8q0 z7hYwrER3}AJw0jBgjl8O3rk4+M0H90M&I=8n z3}JTlzU*bYIFt8}q^|yYIqfp|{BAci-ROX6UWaKGN@_!Q=F4p)H{N}Xk5rLoFZOX2 zn=^dW5!0yWP%XFepba>GyTczbb%Q@Ma6NqFAXa&pnS<|}tSoSG&^ICJ8&eL#ON>~M z4oe5Jy7vvoOFZixP%FX}-3ZFBZFdm->NgX(Vu!HFH(6jWCwjgdQM25m7Ju$OI>xom z9oBPNE+2eaGx!_zSV4VP&v*z)1*<8GA9mOW}X*uiUEIQ1zBEaNb`=EGvC#L|1kX5KV=_#b=rOL*!Y zcX`q3baeK#t+zkI`-MC*uYO8CS#?4segIhfcXZc50}AR|iLPs_(7|OtB2)7icZd$0 z10JmmtDb>yZc1&_;MN?7vVCG!{S_m3q0bB(6z3TT06q8d9QMwcmx86*=8^n=uRa*X zJPE3L-Y^1~LVwhZCasF^bDRTWFw(u=(0Mi{)D6PX*kpciDc18-zhHA)n%?i(X^My= zuM-7qbtcw1C`LA^5jYT@lRC+!nsDk!khE&=J6jJ{KbQp1rQ0quUt~?d zHhQo;ClT{wL59|ru3-_XOY)kXi8u5oMbV&_B1EXGk>&Xn7@uh0@0O2qd;Fy8e*1-N3aQ}cEusor8-H%SFsIoQs% zWiuYQC> z_tZeaX;JP2O|?M-y>tk@KwNbFK_P zmL|T3AK&Yccq{w0L-ASld58re_uV4dgr6(qT@-?wRq6>b_4*@m43R|AW%;?R%};L9vP%UEKjN?Pj6UJ6(dXd=cFMt` z!fVk~5?&tQu%8cIJr}x!Nd=|yuAoQR?M$ddnW&ica73?Ei7RQA_gi!49_s3-wR#;H z#7@d5;Y_~47qm6QIfE{cghq7)KCR&hzpsB9o(EQOAyW7N(Gyu&{-%~eBsMz{-~CNZ zS-uud^BYK)q`sT_lvc06`JxGK6?D-M?L=L)&dbtMgE6Oh6|5Y)isyGgIN040=@+K@y;VR5~na2c9i zm@kbx7bV#qUAAMNy~54Gmr3S9r8zI($tiVD!HIdks8=F&<-Fvgf+S{HWlENeB7yL1 zeYApB9NF2(6HtA3Lplosm#tS9%;T?Frj zrHbd#{VX)|*|!gFmjm(eyeL8}NWEEjV%+lx$~Jazrec!>&7|kNyZs zlb4I*1z_!2g&^_-k02=a=^y7ZmJPOFaWHFuJ5~Yk1+X9lW4XjCA_6?Ck95+pnw^iUy3GmPuOIutZ5=#nMghs0`}hb{cRLz9^bq8GY-$AF(ik7!!K%dQ>vK@9`=*G$Jza z=;JIuo9*%Vy(OUzz0oh(3cKzk?V_3PpYs=UFd1jS)6-Cwl|^hXr3>4;~$T-NXO-d z%cbYti;+862{9_L>=B0)dlfNr5OTWp!peKM90HCvutZpYD+~M*5kt^t&o(=S8fLluoe#Zv+r`qvw-uydrBn>*n`2!&G( zsin8}iK>FJ7$`R92i%pvP!F`8c83~yXIA0w@3;5#Fm|1yPs)u&k(#EwPWrrwOkL=5 zR01@%AMAdI?G3yy=vDjPLIjYZ?{VkAX3IHXzQrOEH92g<(hyY9e3FTejnp@vX73Rl znYe{7374h&@0>k)B>0oJSuLqQX5y`RX)1TCAPR%6AO%^b@!@2p%9KI?B(<(rU?)tX zq6Dtj=#65-bfWix@L|9HhlCHMR518P0wH$M?&B>_#0#dNT9CKz%Mo-bh6uWTWzP0U ztj;@&LbI#M54*YJti!DfU7;hykF<`=wz#po3~pLi3ri^h*Y3SC-)!$+%{rgn$KRw! zi#k49Nd>b$5Iu^l1)=%4P-6(U^IFuuPMbcS_buu?BZcegqJ-+x67TN!+kXYZqc|w_ zucir2kJM<8Uz8{)VgrFs`-?1(OWE!-k3w|tS|87Z(+8O9#b)J&!s|H zhQKd5#pxS7BLQVzPJKcozExtB6!ISVICB>H;$pD^`?2lFoXtGRwvn7iK1ngWVwZu@ z=M7v1WWW(uB1(sn0=PVO{mz9adUHd&UP81$vD`c5&1tTp_NlZVGPEy6+^RS^ zLVQ%cW?~h4S`@ZjUfsS|&Ur5`kOP54RuVr%fok!)2Y5QQM$^iphUh{@R76)?+M%_Y z1y3Ku!x(98vM;%f4aG-4sHJz299?elG+v%&Ig~; zQq9jwFP7rsGv_fa_evhHcT1MD)s~Cn9e#)6lX|THLlduAWYM?M{&b0isB}4%I^XJIB5kPiZOSZ?Qg#l(xz5y>SwUqjVH}hrxtE ztX^{p^49gV&z5-m5t>k)vANgn>&qX%Y<~sWh{m=!;5tpeuK+(trhmYOKpJHfP9IFc zGx%@AdZ9{;^2Dcz4SG$MVQb*`ryLv(0qM~pWKqs3hB#Oj@wy8oxdDl9ebTb-Z&}jwU%?Aia67oFoZPz(dsIwZ%uqD}=aFeBmOIR9u7J@)Om6X@xLN|^;))uE55_KlV8}7n7mgtgCdqo8+~1mI?8Ub;mRgT~C8x?gW0mRKBUNreI5Y==xp&v1ri zSK|2lX-oH_BFz$phU;jV$aW^|^H&c{Y6@9taBl;35P+RL$(@=Fh%GD*w7LJ@Jb;nFps_;`?ST!in7;6hZ*k}IG60rC?6NqIJ zCmKd71Bjq|o!|+?Q2HF+x$B~`KXY9$XlU81Hu#_&lz!ZUg_2Pk{0lEi7Em__TZPMi zLnl(en_b(k`rOG-`L-2K^T{_&@%F`WB z0K@_rLW`F;zCfqV4Dt9{hM0fp{Hg)zUG=V{q*uQZq7E$=h%cQd_5D`FK9c$?p^)8r ztnvSHmKxIe+v3FOE_6jDn|^n-)d=h0nEerGO4%^oTi~YGWe{lrIs9LYzmIe9seVMM zLIu=?Vrt)wK61qB{hMlI!f579v|w9ZZNHD_O=Ln?M6Pf5~vf!n`AqSo+RruW=Khj7}h+O0fg_;a8%?Uy0L&a9#R7|Ne4y62taI%~~SqM6yog z-!Or7J}LEoj+ldti#Kuqth9?%aHmF`?(F{k)VVg(yY8t^L}`j8E)y5-_S-{Y2X_w} zf=uG2?MCy2M?q(a6XQ1*tm}UhI1G`lHiFZv4$^I;cO6R%q0O&f6zYON0AWpvS5F?F zjzIviy+7Kw*bCdR2SED;?5`Wczi|OU2m}2tClc;L>;IELmtjrpt0Gdr`p2CgU~TFU zJ7$i*2Ek<%|5eLK!Q*PTVMP&|ErF&V&j@bhi0)5Q(^sf*Ld2||oMIaeSEfBC^XL} zr26-aPQq^o1>spKQw0mO8^#fe!zBwND%|0dKJjbZ_<#;Vm7A~aCA>~fmIVgZtduqiW_Ta>mYl?c$N zV(x9}3lnn=CMJNWppCwv<&A9KwlM`I5N3Rr1QGxF6e73nYJEbDH9+xgg;t^UAK^Cj z3L^QQxrRRyF%__K(yw1<92n$=$FC%YwQS^iT4AOZn*X55Rf19%SQ2c{M*A7uD#!pz z)0Dza3_pBHWG>ii?ElKV!RcAQw*MQPo|Lk%ra#c~c2&`DaC+)&<@8)e+>P9i_*6Db zkiQ665sWnFIXfIjdKl}tkQCr3M4v1{VOXr`R#VQwX6^Rjt2ug{dI& zRv|~!fsaeZc*9~W#A}!-Y;-)CU9Ud7jKTp{eJSB^G>*ZKblzWKQ)PkikR5D8tX~_j zfQm#_fveLZN>m$%yv-e3}xvqMKm}e53;Z3_mz3 z7us8Ow!mw#u#VfMBgmP8&?_~jHhc00yoPBFF1R85@&fePiJMR``#_kBtZPWG{G(bH z(T-d54&kHjG5g`0+Z?gdo1}ajCCgYT_{*(-kmfevNOMsxdUN{!t~G%E!9S9*xv0MK zqVhi0x-fW;r?x=oW@H$o=Q?TbVf>4(sKLa}adbd`!hgW-Uy&@0*?K3@i!jx_eh;dp z!KUdBP$!VmLH2)BT}b_}g`X&Uc0cbtejiOC1{!iZmluR0ilMEc!{A-$Fn_T-wxC8N z?PqXl1VPaP;WW4rT2m1SqXJGlJ0)BYcx_F#-XYwjhPeQ5avZh# zNJ)NBrm^}r&xcIezqmXa)o9q1pP1k=Le=HI@OmGCwNjccFrC^X4+^7Pxj z_|@66Cf4wlcO)+$q6w#I5b=y3+OIgXbMxTVA>C}iL3>NG5G2)HjEpK9+L(z!ivX$5|hx$ICC!yBFbJzqWUyT9-Q@Z}mWl_vVVS$;PO|zkG2ts}$J} zl4S%X0EhhD?a%8v)hjd<7upS27THsa4mHB;i0>^^!+x^#P&p8;kySbj8zRt@9;A^b z0f?Vn*kZS7Kft4k;0-hGMAgynE0Eb^Gf0A0VIX}_^p%`{4lkz$RbY@S$>G}M9H@8B zfh5aw=pO`WVt)`ydqMY`vUu^?1eBAfef-r%wfA>VVBnd(!Wif|TG$MPXC}Z!6`*P0 zdiZt0uh!p!jue6n_U9 zL*3Qz;(PHT4rKvaS3dY0kSO1dv;dPXnheB@-wA!cu^ly$S1O@nkM^)%>f`o?&T(Rb z;=p;eFDGbmqDW$Sk)7lY=6MjLF!P>!*JmP0YBzmOu$-N<=$Pl* zY5}XErFuo~(vSP{B?`RywarUutdd*OZI^GuaQPlAw`z`r-|<{Z3$&$2P`Nh~i;GS7FA$2$J>Cm7IS$&lsA`Dzh)Vb}r!bT3zhQI!FQVg$o#w zz^l1KFDD^Im_KwntJN|odto@K2R0x;O^k|q*O<2QIA0iWcyq@oWVp;f^tj( zPifbb^4f)1YjMfrwiACpHmk?57j~LbQ_L?k1>TP~aMp*OyDMqcnQe{v>?-0CW}*_Y zPU2R-lCyie{l8A{^Bg<_+%^2fi~=qLA|{calv%eMsxi1?oLVi)vDGD~7=^O1f?W`T zoeYiEgT7cU7pf#ymoh$|A(9?nSnTQvI#Z}Me{OuS>?Pxp(O49Ahy0V?k#YvwqJ;+T zuZoMKdA3}+6@S}}rWw*UXY|caedcB~_ndQ2gA1EA+Jg%~%qXLU!@ji?Z0-}cMSsOXu5Aj;vDuvfnM#`mb;*R7&PhD zY<2n}eW)B_!cEtf5t;^=XuiknSM-cWEy%^SN&d!&L|rXfhL(woqiT8WM>(b-3-Hk< zPuWlQDDz|J-_FBkcJHK(8S<~!Wcu<=ummO2~}^<7@q^7vKNfYwd87|2>*SS5DL zab^giL;u}|ua;Yv5EW&vBs_Y$;jDofx#@U7k4&_N0}`v$kcd^K(`mVGf+eE7ccON| zrpoY8FYpz9?Sb}To_)JhXv@qc7F%X^zwzhF9b^hwh^g>pk8Ho@2~;|EqfLd+GU)*; z&1>UfqS_0YUEgws#epEH;NE^l4KLcotisu9DiNov5l#!#8Fey%Zv)CCI!*P{43#5K zObW@u^Cvuq?3Nh;`){V_0d1+EgQk{c!i#R;aP+(0sGn7+2%Lrdb{>~IkpjpysTeU_ zU6^qr)0waTarcF|BKKRR2+v=_Y0#FPzkOtFJ;~8}R-LE~0O`z$C~8j52z|5cTIv@p zmspt$%+5}CXab%$-{-lxkFl_X#DjOhJ=y4aWW`z+1z);vZIpwHq(Bc2%2`pooSp~Y ztkTxHDnPOYt!6@_QJZz<10=JQPtEtbl#2++g@?}D6m?`;-0RMtW-nLZOi>>bA1n~( z;2Sg!Cj~r~_tm#!naA8~pPpdfEBgJ$@9Ah;|K6^QXoqpvw7S!~rQgO>*xJsYqqDDI z9(pUDRenWmz13YfD2cUzX5y5F^~xb0V)C7#r!6QZjWs z2CClHkKCn)=8kS7DMNJ1!n3q#0O$~)KZBEdrmS`TF%_5Y(o(^kXjm@A~E`g3CC>gNns-T0hZTnCy#Fq*)v^*416 zg`5IsYBo#Z-FVA7IzeeM4m;or>HcgUQz9(k}tRSkfNPx-|qa` z;y_c+Xei^rWd?tXP57E~Y9M|_r6+H$(P_?qu$^7O);iQ1U@{(~2mXL6K-Qivfy$>(% z2%79E*UZ~HFK*SC-0Yqz)&t$s6tf?k4A{^icnfCy+=TuQ@3&2G?fHjl@Y>X-%8iNLT>W>z{Wt^zK z4@@I?w>IV&%sumoyzOU?B3*6uPpGiJ9fv%<$a<&Z-m8E#?M9ZI*m4KU7aiq|CJyBg(4RlN~9*tqnB?9 zWlde~>J^4ww3hi}*0zd^RS8wA!0M%xD)#gJa>gRc`88jCTWtb4G5>>_Ith*AxQN*l zGrF7rggFSu-tltQ>)CEVD$v^hsI<`n6qaqzH#L>}+xH3?RTLiog}Ot{^~)e3_8b;r zm%f2NYaL>B*WKEg2oBT;94LMESxLMQ%RxfS+CnKna)=PFr+P3T1x$M4oAd=a0_@6$ z;*qzYJtok*=*L+ozIU}gEc_Sh$$8Y!t;4%60|`5`+Nj8JmXQ1+fPxK8UQj&7|7s#0 zdbdu|wq((Li#iE+&m8J&#;x3rk=W-$(sU>ToA+o>K6A^LxE9WN`@uu|#5p2I_KJ*C zLHUt$?&r#C!7hrTg+A^c;5wGKRqQXAuF3m|q#CfaUbk4qXoYx4x!fY{q#k*lWs^U7 zKPmoFs96sx(A$RXM0d>|XkW|WL_Q4YGlBv!O06;JatH0==Q;eC+2bjKB7c91^Mh&dz` zjH+Rfhevh7ObMl5(_s4q^=AODe1J3g&FO`?(&&|$crEYc+3;UqpG3k6IQ^1AWDLyc zglTK|v+&@$;o1!;;RD^ndD)M^EAU`Y5hL7$-A#{;q-6}by2 zz!cK+SlPYfqEmNs%ux22zyl1&RIT^Q3Guu+1JuB_^_pPEQuvI2KEPS5xPan0ZN6Xk zziD@Y|)#>XT@pkoGT3TH$a{2w^uE`Y9p|bSP$93JK zP!TxfTF_#dN4c^gL&9ZYD89#sT>0Luy{BFc8P|fH^y#(1VkxqY5zLhf*#83em`Wc2d;ny*xw!%;Qx8^_?TZa&ct@EFe@Wat?)tLg9cyV?_41 zA_$}nr?MMT86>AK-h*5|(9>~)B$7-2)I0Gm)oV6svR|-BION)8GOlFr!#^qzCf5$p ztID%SQbeyV4UBM$)F8W5dDkTxnAJv;VtT?;=(@GnMB=9k7AgF)LT;vggP{S|Ym>AA z@(!+h{jL_w3Z#A5#d)$%#i=8EG@UUExMie5ikA9n?cmImMX&rWpP@!(U~+!F0)h^d z+2l=h{%i+V{fJHekFwv(6W)gqRw~zBww{^9_bLFe(}rF$24ofW&|A3lKoxE^u9ZcoqoEJ`l>(rQ z(BUwdq-2Cl{&ppa60G;!pQ`x zM*UG~2PtPX_?HoC^LaS1FfjJ=bfhFczZI&tQ+>5&VrF7$txWLZaAw1aj2kAwmRcXwWVhv-T-q8tl|7=tm%tOoxTJ{jR?$OQGIa|Nr*!J{9b z+H=D9R^iY2lY5}G@?tq{*YC2I{)Ip#+&%MEg%(OjoW5rpP2q}9C;_8gJJZ>#_y&21 zm>>7aA4nX3Z0I%r`^O6jOP6u5-xwqozPw1AbnjG~KRq^X*Z9=D%+}joF{Ku66|DqR z>}Uaa8{q!0145NW)0|RhcNhu{#(-567#FBe_-3){t4cX&k%JJqFlp5Q7*%Zjm9K7twqdBg1Fq%+(W!gL!m8&^RE`!GTdp1$h;sIV*0nWc&xn`{ryiMfACg#g zrP_BzXp59|Hl`h1f?0xI8i% zH2g6<>2QZmz7weogG*dEd`SQnYS10btwQeSMEj}0g|E0rBDO{3LkJ7W{Ez)?_|u2y zf4NODcwMy@Kz1q-Zl8|W0T5Het7Lwf|0@(AWlu>r29`3ok5d=r%=f!MH{xz^(9U1h z3@Y!AoN&|3?-`r8hk#M2wsIy)pEJ*kOONCdrij$D`(=1zR4AP&lyKUOM6XaxxK6ku zgm#8ie3YBQQt#AflUt+$_sCUFwXJcLJMb)_HYJI(eMc{8a4KiCy&lW9RL@|@?c|y259I-P1!%;s(7ILj0)evRp zOwEmCD?H(8(eFjBeo0qwqS-)$3kLC8Ho%HYT#Ixas|aNJ^?a zA;ss!nGV4L%i*{s4+hBrST;oHo>tl)UYe}%lZC`Czwel>@3G8gJ^|ORMdM;L>z5+IWy2f%^{t#vfM6a^B|=8sw#5fi4POj9mF z8Cs2Xrz0jAhI~0C|N17g+(RUH0xo8m5zM2l$D9{h`dMP!a8cv_vCMY95N`>wpR>K8 zDrJb)6JawuR~|Tj1g7K=Ckt>e2$-O{SR1-7mz|5g==m$qdnOj~<=1xz)T9uq7=U8a zBT1c`jb52lZD4lx zOUS_|8t*8*4;(Kdsj5i@60dl$PF4VETWJ9)2+ z*D6Ib>}&V-ZY_l4{SoLwh-c*+A!1=m{p~d_AMFMwsa|)&i}9RlTo>n+6}X5Mi149i zm+>h=K9srM))9o4?rWXyw_;*YMTwlNrS%KKspCNqNdBrKL2o$!iFYzh&>_*Jqzqsf3A#YsdVLNW;kT6_euYw29R4;Ys| z(y;vQ3G&9c{_VU>_~u+dM2_j@28mWVO-r``RtTy!7|7oz#A5Z>UQ8} zppTG`EM_DOz>0j6MVAFGf*WGHQnWTXP=PvZi;oy`gTDw+iX_p; z8IW6)6~GJ)gbPE;%(gBiw7ClQa~;m*ew?qVc5~rs~@LW1AlC@`8%~QtylEE~i<6E2su-;QSq)nb=0}hN`LBp=ieaeru zfdzC_`}%g%Qh*P2s0a6=h8sRsIOq(6^h%AHC+Bz|X#mZ`4rGwwW>AMZOK05YyajFm zarhOa9#+W>(7HvNzvzF5~jK@B8z+?>~P3d>@bRKRtAf_w^d*b`#Db`b_0~r3SVUKUgGA9 zOLDR(gW3a9`p{WhW4^OCj(!R=Jg$fM^(itDg1fS(6^P-|plq$g>`c+@l0?HYYt*D1 zTvRBs1!9)DG=FMkNNh0I<=kNx=Y2lhNjrGWS^eNf$~B`H!|pjY=D-(2?r*kY=m`0D z_e1}~T>2xtYp~(!EY}P5DcHb+8$?GoaNUG29q2ILw0KEE;kB9ag1d{B1o0D5!4u#k zB*B}>5~4ojtw?}nHZg0=KM$)u%Y;cdPmMeI-g>XwbyypQuzL>yi#9JOgnHab?L4_f zI|%?=c9zmq-?=8dTgw{BJNcfTsvO3xt;N1y>U?x!#kR7F)1Lw(BjrP&EHaQdUNOEp z*|j@6?FL|(do0PcpCnm$l=k((EmY2!vC8?vZ%bKu>T#6l*sn(Yl&Ri?D8Rve*nIWx zRB-zNj%Kjrc4-pqboE^0yB7Q`-;T;v|KX%VQ6b#siqZl%%}*4{{XuhYU87nA+p!T= z=X6;uS+Bs4=Vo1FnFXrDHCq8T-XY&?KUFH6+`NnD6)qwWZZVkrx^kTK0DdQYU%JGCCjbf6WiUZz zh7XGfjRp}*C|P`S2jTn^_`<->l6maaVg%0nHV}uqPogQ&bb1q5!=1 zOts8`EDww24bWa05YTFmPX0ds9$?}b+WiwO@oaFyFFGr6mG0c{0e?Ne-T9reRI4q0iQ@6m08o5G~T%jtaSd<06EG{CCd6T#ScIYzu@U zG;7#nr-g>nUtqDh4Yi|jqZc%!J0Nhl<+ynkJ27GiDvQ7Vh?lZa3mTZl2Kzd{3TB-L z@GY*uqFC5C6e^|qAB*Py;2eChpgfs4e>B|U&{>LZsE}pLg4vEmdp(-R<1DBNkgsd- z-tv7fcdg$N0s3VB2b)Fi;Wa`4$W$72`vJ-ijU%LUori%3wG3JdzvG&~v4w9d3ceRsvw;h1>bJhU>_vG1O%u47JAG6SaL$huQ0M@qIw%zLMCRK2Kd`7b zEn3#jy-5&3fdfX zV5~pC1=WnWgR^njY`w}wQc#*p%e7&8LofvN=b?bF|5D0J41?7#e`kTSCN6< zkDgx9K{Dvt^6(onlE-!?>|LdFTsGJB=YU;Boq-*{uyAuh@Prm)*CXqn0}m(8?WP@g z3|j-$2k~W;0}2Z_4vSdA$YVy)$qA^5O)HDKRwdkrzl2pwHRcb)3>=QJSa*J$H5cse z=piyV4I6e-);9>&vV?gtFR?Ki1Aa1)8qG^xRLZ<`86$ag#T@--1iW{sxooT3Ly#_$ zJWv~p9%}~1wq%7w0+ig&k7g4b92J^y02kUqY$!_j?b7*o~IZ0;#qBbTk=(({05X& z!o_mWtvq@zI9F0nzgqNxF<@6*>#>?eC?P=290oyhp+ZWw_-_yZGYlQ2q*qn5h zst(3)^R)qeUCJ6E6x@!&*b3%rq1JP@{y}#sppOS}+n3$_3b;H}rWeXqK+cA60JMU~ z8KYM_iyy;yEQER}t3VzJut3F^FRCqCU_+g2WSil?k*zo#zS=9+vw=+!IcUe3n9!2A zBl=t=mFFQL86`C?g<>K>Rj0vfmQhgAFdr+#U_Mp~q;dNQ?=eiPFF`edGO?ub;8LnJ zplVIFB)Y-06|q6QURl+iRfCAleC+K=SqxZo^o^!24^e{Q6vQzXAY-L0O)Z*XIS>w; z?voBI<9IKa&W6s5^OYv%p1X>p;giYxpel}Hm`Ob_5!-*@cm4zKxzB7`0uNaSe~P|O zk-J9t1gpF4lo=cDA@Uz@LH^?mbg&{C=aBoekMF=rKygjcMRJb&@pF%!81)?VR};!E zGGJu}dm6#q4BJr9-LVUyO3x<0)nPo)1Z6X|kl34kEnz##s1ABb>@00Bnd zSdpuk8YGI&nuPo7HT$dgTnHOZpM=oifgWss2Y2NLNT_*WkH@~mSZ5w`_gJ7zsJ8f^ zc9L`&1jF`vIp|hu53t-yW%-(i-DW^=CM!QuaPIK#HoVqL!L@$jFdE}Qww{8{*zd7U zZrb$sT@cKW<>T8J>@k|~*evM|qt4Z*)`wYIH7~!FxVz;5JDrb>*5&y7hwGjAhpSCv zk^Uu3yNYz|M#BR@%K+uU>zWBT@5N-d?Up)9buq#dU8o#_2~41f5{|9snfH<5IQ<9X z>h=;2{7bz7dN8EmjYlo(V9HX9yIow2)uHX_5h#+zPzXW+a^w%!F+kqUMkhdf=pFP|Wx!JU zTEIXa$YHkr41h>hnDjZ!v-JU{;WN;^J*;Eef1V%$QNOCwdsWx99HUx}KCIMJp8K#^ zUZ9^%9)LUE1Z3Phvl0)GeUZ5pu0}v%>Y4K7e5=hxw?M+AqqUe+3nupaqwGLJh3|2bWc;{4DY(vHiW`=&QnN1xt`t1$^?v76LE9*+a(-(TxtjcN-bNlD0UTb~<3*aeN5SRMDF zVz}G`h_xa;0I>AfvYfcJ*6Wr`?*U+iyM*YYF5?NnUl<7cIf1+5GpJ4u;3A|#KPI&$ zKRXb(A%v<&Z2X?sBPSOs5@h?CF#YrEgYqGT?w?TX9td2i`aP+w-+HoUrYC%fRAZ1R z(+AAsUC3%&ec9@e{s#y|I3ZiA`z6@=+g6LLDWZkEsj)?|N` zIZyjk%0M6Vsg=0&*t;x-`5Pt(<3qM(j+a9X^swQ>kNdE>8t_H!=9fBl4d_f>4DA25 z>SXJANmnT39o)s$5I|nrOQ_A1Plv2GmInRtaNlETid|g!S*9PwRzZw z_a;+JQA@yej`p*r(Xlyib66PboPVSZ#EXUi1@X>CAvY&Fl?@C>V+VDTV3Bg}@_*X` z+y~zT>N!vOu(CjQPdVw&;L|?jc@owIfK>zNZchZAAu8bqEE&5q!Koxnx@zj!jTI8( zBRN2!V4Q5MpX2RSC-XFk$>QDHuT!YwEx#RY{am4GQP(_vY$Xc=Bo&C4Gsjx`04XR0 zj8nZ|AQJr8{bc@{($m}~obLV1Un?EQ?STvf2F?1o?zEdPHe8O3P}Wu;LM;3wYVF;p zgMT!;(B_A+XaX+G!bWQb(2#ZOU!a<2pE{QW8uRn3*v#thyPc=GyO;Dq0_atvhLH4* zM~D+w;wcH`4DsPfu043lYg>7*Hiyti`@5m#FIQcaOYOKcLC^3=sl*hW={C%=WsQo+ zk+8a}`q|yhi-Tfxs4&idm!km23I2GPKHA@fR%CQ=bdXP(!$r>Ht*#n5H`a-5L0n-)7o=;DLS?rw-%5#L z&>Sg%Ds0%RJ0`Q)NovQPgk^aE$QY3Noyfp;6cTjls|NtyeX;k9$*sG93*)7857Ryd zSo!*s+xS>O1)FSM!7YAvtw)%m4DEF-piRaszJahQAkTSxkK4B&iDB>){{7d+e4n9l z{%*ZEfO>uz?Q7)dZn7*pBPp@XDB_V}$55(|`1BFvz8S6Sbz!9AO*!8Me0o(5O7HpH z&z96GEAH-&@oNe6{&vh)cd~)ex8n~q2Hk=994TAbr1n7QAI>or7TPYQAO2ptx^P#b zLSuxs4${72({qmQE<`At9HCir_zv&O!HR?+k%-DD;gx=T$ zPakh+-s02u5w?v-OGKFx8!5(~Ok&qfz_Qg*YjAS`WSTK2Jlw(|)I6=dp}I512Rh?E z*9)*Z`@DoC)p5kRZS2pdwO&Bj1oWvP+ktu4IJQv~avNl73d3-VwtA3!;g9UiZv!Ab zb)BI2MFU;Z&)hTCVY z3lBAdN&oh7bMsnPfWPNd0vfE#843o*WcOu`HZ*HiVflmIX8JLBZ7bxHoO3b~YNV@& znqKKnT?%89wKod0Qrwvs0w*f&(1R0Odb4I+u_}dlI%kZ-eZykN|hm`0zsn19mYrD~$C;IrnqjIy4Tv(96Qs z$z=f=p(=TBMDTodw*e%eb6XBy`Srdec}ADsbEb7!Zu8sHf%cky=xO}?Z0z9E{-dqI z@yWb(90XDxl|QuvQWRZ2>`_Oo;o*hdF!^?*`?dgdmOoY9*9c9_^NF=m>ulj1S*FuP z_@CfL6?=D&drOJ$$K61cd2#bcDPg0q^OCLl{Y`mfr=Z$wr@M58wq0Ep5s*eYVQhJz zgKNg#Ue57K5SA4B3HU6r3|-OwT#j?DCY%rYeLr#mcIs@>fMm5<*Z|;06;9Gthtq%E ztaSUqdcYf~nI!we>0?W;fJasYT;G|OIPex}%HU`G3wK2yU}>-a5E*hBnV7pW zM3=8)fe==4z%NPN>S2ME$9$g{XyGAQ@M+zW&|`dMrLlV93J9gJSR#J>%RyDtp|jgD zg`sLrQVw)1eMERgErF)_$Z+8Ec-v5iYLmCsmu6;`6|{c@4~@Y`Wb#Vv?#NIVhjz`r zoG;TWndx<>O9Ijpv`Gv_AXlW5q82coUT-t(JEge6T{Iob;NK z&|L_|tsvrM=DClU5G1=FbtPu4f1yJ1TOzf~Y|mB&#jp*#%*ej29-Ik}D1n{DN$6f^ zYS1mJ;$&-u*N*btYo}bGUZBgd=723wjAv16?BMbfQ_QG|Nk2KBG@07+L>Q=)f_Oi8 z9R7KgBdN;a)k~JOM}Dn*TVA25KI9Zs<14w=bLGrvPS+U1CF!2q^t^`UoZ*>%6>jm? zwXMk2JK==PnAG;*pBHji^q+ePuB|uMRqMM?7+Ah%l}Ff{4*&{c0bQZC`FLQ(>lttb zKSRyXy+i513afu#UNG<5SI~k@DNTN|Y27Vw3n;3N)INcvRf$zs8@)J|A1qlb0qs#u zlZ(87#0nk3BY+NX06buB^@AJi+&lXK*l>EN7QCn8@AU|u^ti#IY^#!XPpr*FgZozi zQCvC)tT8jUNE|@g3}S_6c$S|~QfvWJd?$fJx;kX1`|*hV64HVl&57@1Ogpg}6)3w&TUF;c@+>p;N1H{T)@cbK$iG3J{VU+)UlxtrHtU zv<5~cCWZj=HaWmHb##kJleE#x2=}X4>}9+{Z(QR`K>(UD@^K;z!OoS}*!wMUtENpj zuDH{AV)9SCYY@*Q9C?pK+4_`vSm!Og^}S9RPSfD~<^X&lE?{r0h``O&kD{ISPNaUg z$)q~;`&YvK+`gQdHyk_t#M-7lH7c}i(34&UYxOlij6u|C^k^T*<7W#OYe_BL@hjH$ zI#G4%fSURNEJ^xxLluu-`qQfVACDm-3)DJVdQz?OsN$ zE63o%OIOv5gvotyXA;f!W?^z2{j}X-wTFmS^_e~0E3Py=ndbuNI@oLpZhv+ZfVKd& zmMA+F4iJfVec6}AnvK-qz5=+$uR*v^#pwCSM_q%vIgAUvK5dBS3<|zV)~#$ zZqq04BO=%&p=&rOypH-bbdB92U|g(H7`fWx0aI9=6r6|Qt`lJbMi@(N@7^}3k8%b-Z3*kiAIQi zQ?73v(GvPiV=Az0VE8E-K}l5+(eJa8b?#)XQ~p zvDzhwMJn;ju&g&e2WRdfPskmLyTDf5fNr1;p>&ZOxDq}lcHRWI{ z!&ksu;h1lKaLKK3Nv~~N5&Z(V#{;Lq4?&;$fyD$+;oPT&!}Jd77pr2Hn%wev?k%*( zrA#)Er#r}(xCJ4`s0;7FW+&=jY$oNx)T`E?ZA%#oy>FGfv-^oJ@w-$Gu(odpc59u@ zVn+eWJzZ*5Eq;lGLE01m{FQNTt#H`({rXrn0l7hkY%TKaI^=&#>V{=x-nr zLy|i8k<9k-0oD1hZ{7f)A6wY+uq3 zz2?%0=`Q9C(i@L3)qRfvize(9W*GoV%iFPi zXU5FF#4@F-(~RKgD+B`xVbv7bCGgURW8;JPIW!);Md6Ie4}K<>I8N<(^?F0|$fyRK zZzxc-E;t}5I1C4x$wah{WhLv?^Q*UuiJ3gJ@ULsj}dq795$qY}_rzCQQoGGXx% zRLF3&wwW+SCUoYOhZD4gUP7HVs=L#?a29oQoP>P>KHhGW5f;&gL+ne`w4?{$fO)fY zw=&zMq$b_#UEfR-UcTk`V410qIze| zk0LTdXmEAhSmLHZ(*!J|V!4jM32v}G<@EL!KcSFU4?>VpS5pIYiRX~J@Z5xLr8b}U z(cvGXJ;eGuuz{kd?lNzp<4I8b;_S~f-Pr5u6Mrj|#YcSjEYT!;tI^#PYefYF!N<0` z&+4kSjiLSRvcr(S^B{zS`S&{us5g!&EwjY(2DrC)VpY6$ixUWYHrC&8kN(N%b>^#) zcy4_I95N^eC?b}nK)amh*1vX6S>%B7I8YM9)GlfT73|$tMY@mo19VV~PGhn|J<9|A z`Np5%RBgj<8JmOBq1S*uw7e+nDHr1M6VgVOWW*1`?P)g>hX=w{P^iWCG~Pn@z4p6K zQtjZwP{t@8!4enK!EG)@7k)Y_&P}cy>MfW{OMH* znas{+_1g7`ZO_wPw8^D4(_nB0i;7CAs}XL_^3r%QoHgMYoXEX@qXAaI>{7_%NJx%l z5T1a#8u5W?v!8;in-eVD0pnuQk&ZTfJt+EmW&FEQww`LHaeL?n*YVQOxM3!m2;pT)HrOU&tA4(N;mHetK--vH7@7-(?|V9 zo~>C*b(H>v0GD4x&`&!h0{imSC9URyHJ9TtV-WWz_ry9;29s7F>HE7cR!TxJ>cq{} z?QtKi6q~LsTYDS0DtFNB1?u6==Zx8xi=fJX?L2Om`|0MI&i*b${$j0U1F$aVW=~`7 zzwShJWdmxpVRZ*_`Kib^G7h@(l1GDmiG@<>MsoJ(Rrpd_wo92Z3E8wgkOzjmafPLK z2X&rY=NImJb3)MP&PL8`hKk^#-cr?QZ^0Z&W=w+%Cccq3C^j;RhBKr+FV|?qo2HQWZ*90F?xIFj`7?gY=WbwO0r*sEP<}&m_JzhjCa9nph-Y%oF_xRz$yj;+qz@E zgYrE<*Kcum+tFu@H`4fvM683I`hE1m0a9wBw!@ib46L-Lr)!^Q*NLk36Il>%kae<% z42fH}Byw&31uvN!?6E#uH?}_>gJQpjT{jA&desoXN`wT|U__H>@T`sX_ zQ>iyWj2dsw{Mfl5{>n*OIXU~VYuV68X1gSdt%}Wv#6&Ym>e7AUck~zIw2v#bv9p*2 zcqKGKW0kOU4zH=H630>~CSz_FO>`nh3x?2nZVA-)?r%<`mQZTtZt^?68KbK?XG0VO zs|@Zdoi`s<5f%=wlfcqfjCxjx6bieWAtmt_@Hf?~RWEgRIi!h~%JHj$#S6hZm!+|Z z1s# ziG3=#!dFaSa;lE#g=OmJN+G1e;Vs&e()D;!SX^_h>ELDt2q3M)Ld}Affq*QL^0zmn zI*h~UatzRh;_5z#go~~X_{a<8C1;a5^N>k^d;i&34tEo! zz-EBodi#itb78IIS*N&Uq0@7+ZGDO14GQG>oFjEhI9^u{8&R>R+c7OJr?W7 z8G~jcz+o;KW)ZBgeP7JrmUGp2no7<*ZOpF z`)ME9I0hvK0+{#nAPTl$HTJk~B_*L~K)Z!+Rg)H}nk04TYX>ivlDznn9RyMa-pyV; zQ3E)jTLhli4C>tkQag-Xp3m)Xa-s-wavcfD=BGmozP(Z|G=X)~q7?wP-u*ojP$CMI z%Y~WTu5h#Ww1p`47Llu0LPM0=c6Oik%e2iJIAGcE`AE+X{WuFxg?gpX>ZyK@z3~=R zy|pm|V|>sY4ZQX1cz4o|3?b$dH?%ut1z7|AYMICh(in<#tlL(4E-a1w?z-%CC|K`9 z5I&1K@S=w%fdsG8Z7zJUFhH=cXx5XE;)@bK!%GVLZZCKf(t9`9x4Vp9NP1p!osRcx zvOlZ!;CG-n88MpTi!X??{5jS-BBT~nT0cEr>C(-1uzAUKc4d#N@}xtsY8uZ^8%mQx z;H*@qrd0qo$!#|zP6d_%Jl+bi0rA%Z*UsN{#310Pl4Y7c>r zzaV4a2|LLFdbUT$ZbMY7mRRuq9b%6~j;>hCyag{QqPI$*`S&3RIz{b>hyfFaV3|FF z>(I9$D8TaIHH~xx{`eA==)VZhagPty!KwVyWr~U|Q-<$8NgIdV=A-Ing;vt;Nhpf@ zigQW1n2JF@b1V;Ev5vLYe%rTI^mCly7VYq{7YLgdRT+{dCE`*n>UWGonZOLP0#7tW z%fH9I(h<9w#15UJ$omwHGQJC!nPU~HGpnk9yk{W)5uQNoHZI&TnxSG|Zc471I z;o7j`9r>@UDHqRF2-fAP9+kT}SBUK5$w?p~gj45AE%3?jfc02&K@iDLJOFs36s)1i zy>M_Bb_4!c1a_J`#ZAzDd#6JAenzS>x<=qvNMGabbzAn66xNL-I@^U*KJ)1rw>+DPnphFh_O|9vKt_h)&BVjyKvB^R(D@Qp+XPyw zZnTzbXA2xDO|az=WNx)|HHAp=8sP#+1g)k6-NN>Ap)OkLX`V-I1^H3G(vN}jP(M;A z6>#E`L&j{y=J2cCYG*ok6l38-=3{$G|4b0aM0AVXpNUb#Ot&}aPMD`d_{VA=yhy2PSJk3IOQH0z2hLVbEm2Ug9nE-SO5;SkR6&m6~^n~ z0h_rWn1CiBoq=EQ@)KO^HVOH`res0Gc{C=TNk_c=+BrurYD;AV-~EPa!#Dzdl7Gl+ zp4xH|XpI6ZaSMW{mOW55qKpfa4B*AX^!BWwjGvMsNkH6R4e~+F%>#psX;-e2V~p3? zT~=au+CE{5H3k`K!Q+~^%8{Lb%H7 z)hj8hykM%_s9+BnQbr%nAvhBfVbYobl?^zUdGREqqa&{=5q)b`LdXwQL)@&t%p)=p z;_QH?;aP+Ait9l0AwRXCx5GSswn-i|s>P-Q+hGL+a7KB{_lvkO!_G93Xd)JE*Idaz z(R1Ova=m~N9iy|TqP7A6s^6z)f%9~)B*YmUB9vjdOEoIVke4Pr)Gq->8TGADnKD^0 zZ?W(U*X5#=(@V02Ezuy;pyFm#lY7jQXUBj_`-Ok9ISh3HQA!I*ASIHXCZ%cfQmO^} zv#=5hF0+`BMpP$Wk&jL=1Q)N!q?1qxv24mFh!_m=;_$ULRYRy1qeJmWR zhcJ)$Ca?M8;TJeBXXhc&qdu-(Bbw-&F!iv|A&HxGY_f~2ARH7AM6 zu-$SJ4M@D@0Tn_@UE`XfZm&|R|x)U<&crmKx!(6=UxdP#j547f~ z3l9OUhn$Xw!}qTT!J88@3J(7TP#uRI=PD$>Ls$a`^U}4mBwjGCDwk#9W<}tDm$qRm z=`pavd3MeP6oa$GZ5XiXCiQ>g4dw=UiD2jpTH$Jr7#b9!d&uiCZlif(VA)l=}2VNOVf+2CUQzC`goALr+)c4vmaF%%b2W zW2h~Z;&|Y7jIAD)a4g2BYTlZ|rWI$xYu%cfdnw7{{ozpW^MG9kJRfA0G0bBk55)sF z^z%#gEa2$E{3WWoIvAJDjfM?w*FlaL{wr&PA{xxJjZARP7E~5)SQ!EC-?Pp^Vts|`)&Zzk2{SOPaf=r#=gt!O zP^sYDy@HG=gGq>hbuq0de7!0G8_5Z)C5l!KLP9S44aZs^e|6SvHN9_6IP#Xf1etPl zgFIWl@b%Z3;~j4y2$=(UrmYB`xV!Dp9?T?}X!wV27rcBnY-akGu_)|&#j8hK!4GGv zgoR1v^~qarjM2;!i%AziE}~!uBiJn|AZvi7!Ys^8cu|$MJ5YC%tcwzsSHY;G9Eyph?RkN8@u-&4WwZfJT>hv#wKLhj9DvJS?lR zEOryW4fJrr0B(#wG71gEf4z4TO&}t&4|oz}6(K*&dgsH9l{qEhBV9I_AL|3`9RRmN z!=t~x2G8~5OJ!I|20%@Rr6eX>QC)=T#r+jJtEk9}OK*(*5cD&=D7t|32qs=wc32Qm z>QLNidJ^-2{|kOPV(Le)>qz?5Uv}$0BXkqO5VN%dAQpvrj} zp>lQo(2Nlelw**XTW_<2Oot=Wy^S~lFb>h9OF(dzbig3@vgNOJF7z9B%iX5q8<)U_ z%U#B;s1&2wiUZ*McdiFuWZ0B0okxPJS2TiJ*PtQcO8!98ge(C87Y}eR5+_=4CzP(u z*5J?Cf*DW_qpGu!92$?XV&II*JbUQFw2 zo+l6c*P5y*8kFVw9?<)|>j0z*zChG~u zejmWSVBRc6%0-#gvFEL$)1ME2ar2FgI`lUcK~|>H=jn-C*-vjVZ$O}*7J!*^c2caCZip`u^Tcl9 zr*w(-Uz{w1zVk@OY@*2!Ml- zk_$P~_I~@x>LCsmq#$D+`P8Tn3cjNNgi=Xzj~Sb>cJxQmb@S!uJy|} zWQ#TJsheT_!}z6WYkAVzo}Ig5fH*~}t0BF@MT?knjO}61A0ksuTQVHRtW~y)?okv_ z8>-=1=VhT((k+Pre?TJ_qVD{Fe(K!!2Xx%TXJWX8RO}#t2+pEwI343C0mnwFtDfjC1SgYR6t%kS1$~-0U%@obpr1s(kP~!~A7utXJqycuK z!DAF?v^g@2BD0j<@VRrAzI{(c_ZcX^b1nz?swM3E7!17)6fc@WBABoYbk(-oW?WQ9 zLHzSfF36F)j?b-F64aoXOpu!^%`f6wSoF2DoOq2TG5^J-pbyEry`e2VtYatrHf=zPoiJvNjE`>B?9$+7(}vy>z0N5gP%* z-4}(?^>nHzmi0{XW|Igb|Y>yW|_&BWE^Cve+A7 zgG1A-@7YW_>m^rrT5|e&2z8gW%)i{aldbn#GZoaz3?~#LsyJ$We1wg?dlom!oC5G?#`3pzOfDNWbLFY6!#1c z+f6)d4{FX+tU?eLC#$&J0LMz2qw$z;yZ=`R*2 z3@o08Bd^9ZA%>qdR>)#GuHdo(3pWIZ)(HOC?=1$f>+^DlI@>1;0A{l-y(i8ZY3I&u zY0H1*vI(Q$xboQJ+Ej~2}t#Y-xT;DJ4YvyxKmA$`Q=C{{iecmfkF(_^NVHcVa zPmm^KL%o5MDeieXVD|dIFzh~O-|VknS}0f~7W`Oeq!|TD58AbBv!-4iYy%X`nFFAC zvez8`S=J0?Jy-JDaxX|4R4Si01pHEGi6JD$dk=N>{dDa8qEIBnj|FYKMct{bI&Y`e z3frVsgff~`1|~Sl33+c3+?NTQszZ^&MIaYY;%mRkW9Ngx*7s1Cu&p(Km|hLetyQzZ z!5N63eYPN9-ODil7!fSQQS1ln#`7=jPVkmj{r84K$KhnrJ{152at~EBJ%jYq+jYdc zT{=LC6lmI$+6W-jJKq)oHlzPXz~(^F_H|QZMZQESZn7DMmhj$hzn@~tu_={T&#Y|? zeSXUO?s^X1J5`2{dCW7qp*>kv=QrWTu=}S0;O+X!3lUKlUJ8n8L!Nb_u`6_1AU}(5 z;G3|;@b8AQ%!dF3^ptvOTODnHML7em!vnmDJti(O7?V|{?q^_tRIhvkWU9%u{)o&` z+p(`qWI6PEgDPCmKvSTB$Tg$(pl$LT-3w-EO=flWf>EZZ@hJFwgrKE6Mm8UakLt2I z&#Iu7R!Ai=eJYwZ5ex-v2zP~!Q3$W~1QwH6W_|UVd54UW$X-|V3Z2~(Hw!Alt5(3d zdi6R^CcxDHos{q$X4lDe!pGS=AG8bsf--Q=4~SFj%lb$QaN$MxN!L1CmI0YY=jOe- zcK|1Ts6yK!BWnDGffzuOv>Xc$h4&SGOH1qQanyrCrqV9K<%j*IIDAA(z7Nj`)(H^n zY?FWJ4HU+iI`*hmpD~!2?&a$5N$<^m;@HI+n=z~bZP)i%_U+4~AUlTi^>!+Gt(#8oFtl$(Zbb4^ikQf)INs2OLie_aQb#0}w5C_4?|CFp3A> zoD)1W`5>;{B+7Nrr8Y&0=68A@(?R{>9@KV8DBj+L0$Jw04pzcMK9PUYghRNaVmKV6=%nW`M_A}Xyd zi(O!vLA(%TU4OEW?_etyf}W#VH<9!jyI0@AG^XS0ietXpL!6XM0{rW3 z9+iwUU8V=+d-shL<0d|kEn8fz(_&*y*zTUpOP>(0)~X#=GBJTY1)%Z9#n<3ZRK>6Z zbndckby9E^#K#|&KSQTm1jMSPis=zS2eetg(y9T9$Pq}!urv~{Qiecb&PGicFz%g; zq$gt=5EmG)0l=U9NcpL%qdWa}TS0wM&M77ft-j!xtm(8ZF2hyle(dNz**{q7`t>@? z6jXdX5jkp}(fsfT)HyXk(Lg~<+$V40Y>=1r%T}yzvouFw;C83P!R}u8gu>=rF5S+r zMOo9$e0@#I3a4m^$Zx7Fs_`TTjOiB1?bcl?BVQSLv%2C^+MdzHU&~JGj1GwImDL?r z8Y2$Js{umouC#3$0M6oE4p%ijCSSwL)n|kpdG?jK*U>@H9r8oRe1SzTHDOs&Vh;iC4eMM-PYjDejn9l2_Kp_3XI8We?!0r=sqz@N-j?CE>OaH? z|2@J*$@Sjbi)_dcCU8H}{&^$2bM7JMPh*)A-IZp4o^s||74N8n>YSm5z>>o+UG36) zPmW*dy6yX1@2UIdj`r`Yu``RYdQcJZ8k@hPn*o=OW~SzA+5LN8(|@`Zs+?I{97?_# zj5lsK(r1NBTwnAIAeeJzz{hMvo@JioNg|Rr)+N0HzylNU_tD<2NNiLZNV<%QF%GeLi zm|v(yAT~~|#;gHPzVUkMaRg!WiLG0t;RvKlAd4^CMHbceHiJ-V#2D^YhpaD64TEa1ji0Jmu-SV&NDKKUPaH@`Wh zdxITnA$gn!#=ltBL?;`j-w*R%*nNvgYqNoQWt#n zWztE5N!GGCpRl3XJ$<)ns5sZIKm>k~$bcNeiNnQLPIF>Ep)Eo-#syH8Tuy9H#eR$e zG}ZgT8q6^Pn}tw2K*YGcDw}2g5`<=yf`OP%XHb9=4CfGdh6r3lvVv=H8+-5Ul^p-m zk;gg1r8Zta6Jlr&cbqK{VbRo@^wj+f^?~u{a{+v`p}xi>vP;BPajmHeROvex1df)+ zx@>|=mTVY{V95cfHT{xQ!v6NZ|6RYa>ZnWwiFBH*$&}R*Ui#5=v*A8+5f84%gWzOa3v$HUef@10hin15gEFxW_H74WS>B4Z7&iigFgW%@6=K`S9!!(2c-{XEl= zvHu*X494BG;T;leHV6 zTZVdt&2UxgZG9hM^OyTi9)0~?Q?Uu_o8Vr?|F{SMjVhA&cG$k_xb*6aOE}>~c=~Od zCwBH-po75+%@{4cu`Zi0cJ$&TG%|^cDga-}a&i^tXHe)r?Juc@jzD{3B26j)xAmHC z%f^Msm%KkAHj)aIzBdrs+HJ|oeKu}l#Lg3expY(D%&dAlEYvyp<0ry0nzSLT)4M6Z zauSra>biKyO%lFh2+?U357Y>OS2ZsGf=t9cud!8-8)wtwTk|UgNwYAxY0Ew=3|o~D zPKXC{>^yvK^AgZOj6zyQq59rGoJU0U0Mp+7V^vtAAs;7)tgx?^&?S}0`Wdrr>Ai0y zS8qLN@Dkhy=oN$p8LSyY$5lZ53O&&^@RiU9_vfXt(S7e*5l2i^fWN%db%T#szZAC( ze}w)D1aHG7htw2jQ~>O~ER_?EB>^O<>Rm0ja-bvx6s+*gsqDiQUfY?ko-Yua=whjK z5R%T~nCQw-Pl}hNeK*+!_bR}_l_^^zn&ckx6lw)<+TGvCkf$vzhkPi}$Ou?H#P9eY za0p=W<}<{1yjAb82N6`7y>8JOB z>{lJy{_qx^hTx#L@NnQL@BueKar9Rr%~2JF>LU*al zo7Ij&6jXnxq;}j2+LQ2DR!2n|E`63jmuL9c;%7ikB6{Jo9LydM1EE#5?1Q|W=t?bk zH;M?Pa>(mgl(Se&RWo;#+=!SWi@c;k=T@;9jtxqF0Wk|v-kmqE7JQe?S+=e=bSMk_ z+id&R(E84^CZ}B|I&~)!Z{$8$CIBqYR9lT65I3E3_By2Ruc{Wc$A-VT*3n_=_g|~t z!iD2va#s4(+P82|87dPV8*M&+kqU zzXfu8;01DwT3q%_UcL5YOJ*vcWKs`9*LD@7AUqc|4)6!S0qa=rN-@?qiJ@qgB-OUg{06^3v z&*2oP%bg|Vq$KJWa`%g3ZSTuqQp%50DB%&3HfWRT#JCCx(hyqVSVKcHSyMEweOjVv zcENIqpr__?FwX=W1hD#+(EKf@z>;=z$l-E1z?|Ih$zXQM^$QeP8 z$cd(e7#KrmMa))yMh26c*f5l>7!8VFXqMNK0I>gizOoxPNos&Tip_nK-`Qvxq2Xld{} z(VFRo1zK~61c22b1Y>SE=<2JjO6!=ORwptmEaDXT!3{w`arwd3|HQz{=B z@}$PmI9nWNng4_ptgqkKxIhM2!5~VOc76f=<=YF(@ULW3+wiMLOgV6ycA>g@CbyfM z{-*54!gm+_@vm8jIVxy9C7czuH5=&iqEOWR4OEAyCJMoY_=gCJ(Z554=7eO?j?KM7 zLSjs#HLb8WqX4eUb>#_O&sMC38gZNn(bi^gB`*;SPoSSS9RK*JYlK*kos9kzD1>!e z4wz<0ac(~Qp#-t9@3DQ&<*VSjsC__UTw@OS1;ITL;s4)4P984>E=~*jK&h=?Q^ZXR z0W{B6?*<&K+c3iNLNzonXz-uU%EGishv8>`+SEeKJr~9*5tEttH)?!i1fnHzhr9nT z!vY)B?wRPAfqu)7QHZtfB%Do*NmUewY%oKa{~uwt|x4a z&YlabxLQbNE%%QpAUldF5OuI-?|Q}fg$0~LwUCUn0EU2<@wiF z0+T>c6TA{Y(FM}76zo~Dgmahl$zv+;3twKRt8UCiYThR=FYw~hA?Qnx>)EbNzXG$PQ`oWM>X zU8U;YOom@zpBJnb#URWjonnY?9(@A+VgjL1Ru6&<(e^V)3x;eZopw+x=mR(L_!j-P zdxW20I{Veu4`5uu6J5=#OXaat>AxI8iU+ND#0`*7Pn`Pmu69I4I@ko+R-Ds^-Ydv| z6_F!2^v)891hbI`5wHo4ko%2kIk5(6tk;VCd5>7B=a<#L9)pH}{((@u9nZ^$4IrVh zt7%n6=HDDbJ#movilJk|QDGpENp`%0kqu^f#)WJrJSaq@V@?$CvWB}@doO0=9&95tl)_Md3VCn#{znp~+#D_>+IyzDY zaf@h)p-Nhi(P+h8)|iQ>gFQ@8d@F~S)c>+(#p__-Tz;vJwynz9t~)+F{T4f-sdd|_-)jrENpJh9xEtIzVzC#OiQ+s-g)dS&DMB_gzn@!`EgfN^U=^XPt z_zMH#NclE)vCg$Zn9ItkJ);L(uVLGAi1_{%i#38&wGYfIJf{_zDPuFoFA-gV4DK#N zN_+QJY_kOsj*LT=K7<}{9<6lQH{z5`aY||#1rPuGloXMUS3MQWbFn8ObdXI(m_wUG ze7<^(dAw~{$kB(o7u>gqO$P6AH2J0vUCEj)e=lczaGaO!3k0?=9lRsUn|g$o<hIlnv<~(ZU|cU`mIP^~RtC z=wCjK>i@z0)lfg5zityBgn4Xr>1YjldODhEwihB%P-c9$ zAhIWZX*UYq3S5sN9p3|FJA>e~MW*#oftNpcn9HhC+fM#a9RtHr=p`f^6Pr|hsfw4G zg>l@nA6pRt2UDdF>-2>2ctuxKLpGYeetT-N$1bb$>+^FpQ1A~C z7N1Vp-cRMsm`3b^;;4iOXg8b;%lMLcUDVky?Ii4=Z&c&cs~; zmiP5-a=Aw_My_1?>=#f^|DaUiycZutm{qM!sh8!c$aOL!oAx??otlSz>2B{%bf(o< zpvNTsogPysw7c7o=LWlpx4O3NMJ+)G8>~dvz9}zk9mcXeKL?_EOxT0?wZ=G`L!xB0 z{Lbz@agZCzF5*jhQ*9pM&{KS3?VVe!uwKD|BRXQU+_6yYg zc8>PXOctpWrD0*x5PWC{F8&-X1kO|%{Y(fZKBzAL5j zD3=wIv_gBoD$Cg9`-7Q>E48dI3WtMhzq?uI5LL(xmZ>$KDy5*z4yg{1Ny7%gB>gK% z`hQlkKsJUbJ79Y78YmKu-ID_i!`bLIh1Ko;7sQ!2!;<#)KoNVZ+AE)iswVTd2kOkT zV7A|=EN4!H#7qC5Pkp7KPd1@m5)6P!e*TI5!;r9;A$|E0ptT{s;GikkwRp?MHHSY# z_5TxjJD?!(-aZM8a2e;uMW%o_locsl_RZJ7wvQ!r=G`ml;Ug38S?3)tZ}0{P!|zW; z-VEl@Hog*RQ;tjnSF&A#>>(kjbJx!R&Wzra_P+=>sJE?WsM7PCsr>1DOH#Gjm3gM* zq+0%p-+QMOKNGZr+co`%MfTtH2dhTyYHsibG>uA z?awa{hD`zEBGf0@_DQ(5I#vj0Ne31f9K0`Q*e_Pp_^lTD1CIn(?y{Rn4IN8*@H4}4 zGjp`XC3_vkTsE z@X{;(0Oze#xQxG6jhj@h)1nk?#6TX2Fl2G*CgAS4J>y%Pir91_SBlDN$WcM zhj*TL-Eq;`s3k@rI{IIiA3xHxdMPK(@7Ke?c43ogm|pbxvwi>YM|VF?1y*~D<~`gU zlK0-PG7US-^~|%9@t*G1gJ%bqx3}{f%DB^RdKcsb3b~{=JhSBEU%MPedKw*$Ri_e9 zy|iju?kf1(<8+9Shgw@(z3Vk&#m^@E5efm&(*BXi;Ga(ijlOAqGp}rQ+^hB@pCwH{ z|H0w#ONp0a^mSdG2@YvfL0O%ICAurtZDlWfocxAE;1HjiZl+Uv#P`AF{S99{Jy%GT z$-TM-0Ms)tD_>mb?Uv_!v&@Zt6}2$evt!<8o}bG5;>p5zzI&PzV%j+pckyff zeFZ`PQ(jD80YURL-6`ou;Fd8+vxiA|Mqa$9xr<8lt!yh}GkBdP5ry&nN?9(4y@tN> zWl2@?hIDTeXgg@9^X!$+&j}xKo!;uxQ_bUvozH$VM>c;AP!O_%=FwlPtOp|1Hgc=S z1dCo7>QJ57+Y!L0?bq2dZKCR1W1cQgyJ?Ssk7@b+X}*#Bb?J7pA!)W3Cr4KuUYE;C zeVmIPwl_m57d!;5rR%4Jjmuy9+q4z$c=3wvqGA(tLG%Ttmn!-|HPsRiwzqHJZeV0& zOgPjr(AD4kwZ(okHNmV#jrWm}tb}qqd{tE`Lhcbs`<5I1pWVL{{(K6}G|`6sxEcq$ zByqKK@4@n~ervhmf0AxCdLq^D4GiBIZ|Lja)U3Y~o3T6bQaSOQZmN|8@p64n_3)sC z?s+jg-n^UKG7q^PJ(JzK@h6w+OBE02>B~DgIb}nCW?bHKqKIk#6;i_Gs{BKLIVygx zin`#}QT|HSdgJs9)mIOrU;bvco|)`vJJSxJDC14u;jWsyzj$o2X30Fi$4kKV<)gN* zrTRHu_Z@~$2-rHkGNrt|LVhTTh@FprqAW2asw6;jaxTQUaE{SJF(VeC@*(fak<3c*07~- zpSReT7g1LTu$6|(GNu9^tm)T>8^dG%zC&SRtzg^V=nG98+UIBdM0(r1r#tTXQ?;+U z78a@C&?2X}Q&eW~7%s0=GAyr+^7r-sqja0PU7_)4lg-sQdcxH=>ug^`oYR=c|7q3=$!0mPibt#89FbJK4%MBx5&Pgv4kJVQl{r znnXhO$#Z_)_x<@i&#QZ0Jl>rbbNtTtT+8>m&bh9``wDCM)b!m8KL^iEtu-LP_5Kve z3-b#T@mxt6(UDuFn$wn7xut+{d>qlAMA_RJh{oC&1X4kZQi*84Y3FPeI>kin!LNmn zSw=!LB~kS4!>S%t!C3l4-E458fYyXV*M&xsXc%G$1A?~IOE7&CC6*xuIs{}-X~)B zSnO{$cdU*F3o7@Wx1D=!`C+Tt%jZ39bqav<+}&E8R?5(-!8^5jY(%Kzt)rCcOHB$Y zp$;STrG@Azz{ZX|@VVByIQBvx^gWG=z{hU_S1Qqd>(`3%om{oxE*p-YAAf>N5k-8Z z^*0u&*6}&>E_n1c+}S}l4YRhyAX(VHfb+0`?%j6D^E}aSzotNz<{#_Zg$cGIhv1Bv za-I{gLr{r9gjtyhhLYX=_I~O%mte{A9_?uXy4zBC({Bd!oX-HwEJmxp4f_~;dVSX- z#OF$d-B6Xi;#=aHua`tBFr6((I9Fer-UGorcxTbf+4HH|R^@O?+1vM9tMjunDI@PI z(h*LpgHfOnabr22Y%i$d{YCIZ6xGW9`IWofx4VW^ryr*yrXPVDWmX;}qYq*l4WPrJ zvwHnrrKU>w3U9fGOxC9NHgbz&Ks#VAY$D#PH@gB+W0HGP!ss!KE9c95+`tG-E2Xl) z#t7UwN$GrhKf_GLzn;&sY#>v>{4Re1f7yN}8ZVpD$vX0GPH1-gSvlu6uiqZF*&l|r zJR84GfBZi7!U_14fRGU4V>w!bA7`aLDRx)k3LLbrPNm# z#4xe6nHt7P3Z7;6fZCCw3KW%?6^vh6it5%37wdEHs9qvQhG!{yKHx%ngdAcHENs}D?ygb{TBAUwG0l@fa?*xWLc}ZLWv7~{8HLb^vmHyX=K6EoFQRiRWA#7p zvRL5JY8_q6L-x^hty^CaL7U625l#N>w-j!LS=^znxD;7ei z$9;y=Mw}xi{nu#}$MqasuiF*3Qo~15d2&S^yL-FA17o84(>Uie&jP;%^^EQJpnj#q zc0eR_qped{+J%VxCa3BbK>y4U{%hDZbZ?i1!|!_WmSw*$A?AD>t8voP0wPT~;M^MO z=kRfiyYt_BdTD8-tlB;`+gT<|40`_w!A){mx~-C|MU~x|fD1vKF&FvSJj^>Wb&n)X zf>>li_8y7>R~&X^Lr!3O3GhlChg3MqB6$_?jvmTffNdqSM6+gauIYBz_CIml)c!SA z6gAWPqM!$5d31eoywsx92)}y#=0E$ILuhHBrbY*NiO=Y+8P91V<|?JkL?lJ+96=Ck zlQ9@tP);fV%4AZ2@J3z`Rb;Wahgx$G%sr@QpxX^US#(eda@;Y6>@Z$-L5clhjA_@H zgD5Cri6UMzs{$3vk?k)#EV8iy}fDuQuXpU4n`7rSxLG2eX<#nt21I9(oi5O{rR1PhQ$dJb^jMTi}WIs|0Xwv$!@!Tw}Jz}E=aiO>r z5E7Dfo!_{Mz){U1R@sc2n*+qnMfJ>Y??I6fJg``QtR1`wn~v-nbTn33rG2cf6h0Sv zvBIX(!+H64fHF>XI`>LtAuqxiosn4q2YS1qlB`+ghRO+Fnra{SpC{#wx3&F_NR$zj z=uj;f!8`F`-mL?rS*Hlp62iCITsm-hCR#jfiI725`u^dCr`brhl6aA8s?Io#^3-YA zu&B5=U|Z-HxOWmXi$&O7dTXV#Vy$NI<~TSQtfPo1dL(ytc9z(^{z@)387{rlfE)yu z;U#Y@d^8E1n7$9f%vY?sYi%GhGx8pK_UQ*~O<&ZKdEyQHR?OwQx*@W$@Cuy^kUL__ z2JWcvk^+n|{d!o!1~MW(HZ>VE%8Z1X+8AlJW^p{n92NF19buatyvoNLXu3;gR$Sx%b*_E0 z=!J1tijYsmgDTvEJat2yoRibePWzB80PjS#gQnYSrTyp~O$=~R=my^{v=L73RFcWd zH?~4*a2qZ9nx#-=xX+RXx#BNsJ=3ez0Rq8iSZPH&y*1)#n9?RNWIB2dW zS7VEYIW1HdTch`)>^uDP+HDm*B@AB0vRH<>3B}0r^;8um$Q1!&h9_86*Y2H@hk?2H$z;yhKR$^K#v3TUsr%oFFT{=E zj-uySQHPGHi@SZ+dk?BU0-_U%DdiPpz*1>Mo*!}!;sNc--Rl9PwW*z*UA@31NJ*LH zKi=Xv+7io66ZsGV(W)$UzX~qRui@a*U?r!ZhFyMSUHO3Ppb+m*r4L1@A3YO|Q)wVU zVSBW_bu@JBx!XNXrG1=q!rmVqW^y;Bo(gJsOMP%8mD9z1>h%`)8XJ7arrqa~1saS; z{3lB;+LZh@Uy5;|~5_@T3A#3=46Kau``7h%&!KRwOU zv(A*o$2-;P?>!2OiqJ7xi5pG98}s%LF1{9M@5V~~iHFXFqXbh~UAd8I!%^j(@n zLoc~0aK^WkhwH<&msQ@w6)T{5u3?tKRrl)hHLEAcyPVajg$D7XXQeqK(-huYuzZ)!fpP28wAa*}&jFU^^qP)0S=4oe8$cq?viGHVbYqU~j=pPV~aA9*bBWw;InSV!B_VFD>9*}b(#wH7^ zSr|- zo|b?IsrmY+SX~rfx`Z*V*ROFh!zRp<>{hU*XpO8t_!9Ji6h9(Klst0ZvvEnY1Vp^+ z8twXV2e^2-D!rE7wv)3gDy*ba-0*fp^yitUhJ?bq=1IjiKX`EsE#jBHV4mN94?lt^B$HtM+c>J zucPGAO|@R9%WSG0g0@z!N}Ctn4mUMBJ%EpLMw|&(0KGB{?_yHr0P=%BPA@?AsLl=~ zq>si0t1%S%>4@qwjftIH0jvv4^liKTDw50}L!g6n=A-9s-G;;7!;!t{jwq*()sBeO zIT9bnUM*~CVz8W&H2B0#f5+*-_1A(lupt_O$c$5tlECC=fD=;f&_m%XUs4q8k?{n_#-+ja=K1eQ zliE4|7&iJl&E7d9WBpA|vBOa0f}-i{5&G3%EFApVy;5Oix#Es&?!hrSad1%09$LLT zRBqY8)ZLqoK)r#RR@yx;Vz;12YkNj}M6v>_`*IAtHDq#Kj%>Opa^&%N{WXdSUp64k zS1S{}%*{qBtWovV&h1nU?Qv>tg1@TQ2c4st2T=~E-q}(L6MygBvB?_zhM+3J?27fc zT%HCA$JFwRo;cwCk1=DgQR^+o`&b!^V|rv`%vn)UyFc~EYCpM+HMthE9}^Bc z^&Gvma#&NzVU1!-ae4NGTKZxa+}Lk$A_VDuPvEftp(O89byqHMk?_kG_pzqHxV#jb zkq_SlOm~X6ly`}k?OU9>XEB4@A^1FUVb6f}o-a~3ZWb(j{qQyi{l#IAB;vEhDbNvH z%8};Q&ff1kO`IgTAQCv0Gk*0Ok6j~FJ2v)aHj#@KMjjeO?uImj#@o6zJJilZkQ10+ zALq@brj7`$jCY{>V(6x;ewO^JCI>`m!*$IJi7$b=m=&)K8-HqKVlcQ(f7Eg=RcJl!7ASg$gW2(njHx`VZQHv97}?{pdKG!S() zw@iYZThRB>GtH}}uRY~>iMmz5p(nHxWH}-4ejf}zGzD8Ts7{qENIqUNOs^5|^abQP z@Dlobr@UpXLvY%lp)=k{6d&hIls%npFr~tW$iG$59I`Owq-2oVLbygxrYlFgoaf=X zk*gg&b>r673SWumKt8R)_p`e6Fb=F;JvUzN_sT??_WwKmee|ei z)LYV%l>2;qL3`@*erbHnW~>eyvjXB|(LOw|QDb{byy@1b9u_9BlIvsj3$!pL0nzMY-#n_@aG}phvkXN1F~YiSYpiv51m`vRJzL z0QsKQr&Vl>>Bq7-tfDZ1H2cC#JDummm08d&A$6|b(I8GLzjjz!qn|Ra#bx9*j0J93 z71an4+l0}-g)~M9KDg@I=l=@KL$FaxLP^sY+qu51Q{39S+Jn#C^vOo>n1;*X8RmX5 zG1m-Pr@Bs7Um0t>>>`!$2n4A&HT_DS?+s1t_j8Dm2<4J{4|}@WWH=^@?i~8#%4FEmsF=?PK3$$T3b(Cs2BeeH)oc9&%AS3q!FFIh z3j09eMa0GuA6>q>>B$M(refA56ug;|d-?5{~LLVRY7J20bj#GSE-bfl6 z8m>2g5VK(Sx)`b(s%&xjTpfexhxCb^fvqGm4bOU%v5u(v9i(aEbX7 zBrSWY)EHNCul(iUN@FjpY3aj|yzd_kEA#qt&e=YQ3bS&K#-x2U{(6ldr0Sp9D>nZ< zdcNOtuvz@fk0fIrOO~?hsqhBDi#)64K0RL}2U}Ejc$RHnP8TM0%utR4!C006m8&>d zHxI<+b`JxG$j_hmXYgM$pE0$3&=L_J9vs(}dumpYcI7QLqFOvHE7%Z3Kv8F|B}_C2 z8-uu8Vbvlk1q1lWJDhyM^nAGbtAd03@=2b@nZ`_j4G(QS(RUywR|?=eKN)P33}n~6 z0?6*g*{jzXv>M}Vy0^^5$8{8WfW>M-e;a>;(_M;>@UrM1dBr=z@Yv&`WR#C z&?5t;v6tw-0Zu$7nAxy*#*euX|F2T9m4mN*xDp)5;8%hdda>>T%KXT`Voo0cqUE8Q zOoPK>n3z%U<+3_)FpKD8FhG_M5E$HnDlkpjjgM&deax>RcX)GB-Xlpz{2+`sv9q-| z8;XHpV8AY>h0|k9Z0pP+`g0{%8UTrafV|O~Da*to4X}d;Ad>z7385OYjuv1LNFxZy z@_qtXUM>VAW%3H1O}7lPPHi<+2f-|CSrCxqU{?l#GzJ+NcWG7r3jjzUvWN9llgi<+ zClHWpU3Ib$kX8_o5(76F1riv}G{O{`3jnGAk{x?zAUR7K*wBiXpnx~+N$IS5v>a^& zu-B~{bscm~E|KIj8u#C8LEjtm5-f^&u6v9T)-HNmrwN2t?6`ApHF$JHE1`uD&W?bE z)Pq?{B;G{*fuI8nHs7K=8N|aEOmka8_{}k*(#&h`J%Ywl+W)y#kvkXq-f z{$@zVgCJqf4WG7G{`X|ML`b?jx~pK|_sc*t6I{?C3~JzO8}PqJr_?3?97REUa1#jU z=k$AVVA(n(NaI(R)DR5K7LyApuIE&k&3!Nr#F|s(m!svek4zo-O>g`K{tQv3x_IQ} G*#7~1#(d@g literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/RenderAsync1-2.png b/certified-connectors/Docurain/images/RenderAsync1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5c6263c31870905565031ba4927765a30f22226d GIT binary patch literal 857417 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

    ?X8DJ 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

    X-!5M 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

    ~%CDh0b?`aO(cJ#}eJeyH3pPDypx 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≷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 literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/PowerApp1-2.png b/certified-connectors/Docurain/images/PowerApp1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..088b1ce68582fbec7130d6340665c54e9b803057 GIT binary patch literal 324400 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%0A*Ja#z24UIL)DLa3M2|FCbN7t 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 z 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 literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/PowerApp1-3.png b/certified-connectors/Docurain/images/PowerApp1-3.png new file mode 100644 index 0000000000000000000000000000000000000000..99d4e81a2051616dd895c8de97985a0d97063e77 GIT binary patch literal 286574 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

  • w(cfQtWmnf#AAHaN&ds~n5ozw<*U@N~qT2{%D& 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�Htjh7LeM+*4#O9k8 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 QfPchq-WEx@q4Dhh0f_5qtN;K2 literal 0 HcmV?d00001 diff --git a/certified-connectors/Docurain/images/Download1-2.png b/certified-connectors/Docurain/images/Download1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..587489e6959f7a6358fdfe359e0191d9f449b9bb GIT binary patch literal 222299 zcmbrlcU%+O_cjVBf>aAdMT%IEP=X*Jy@^P#A@nLBy%TyBQIMiYuTlbp-b;W0A}C!t zgaCr{UP1{3?r_fcSMI%k9MAja^GRkhGkfpZYt~-nSMgb`}H#FW<*ONep7;7*McRpUQ}? z$6P4j~&HjNsge8Zldnaa|4>E|91e19r#oK76*!7yA& zc3C$@?&NxViN=@bWPwqH?Sw>6j7gn|+Ov0e;e}4u+o=YOuIxCxo49T4WQmWIFi*_r z@4wTr+IS`OF01-?m*dLw{=rknAKehDu2N+e9*g z7hEw9WMzsd%Y#_i#5L?gbZNuuf655BSfqmd8Qx8>T6>lyGb?s~4*O=kZs8UF#kc%M z`5XG;R@&paH>B=M3bV|cEiGIuTd#At*ogWg7C(owHb>(7hq^{$4w&*{z?~1zRsUNr;k(hnTp2ov7hX)zK?vCbU{x92@#hHg@K;O~jN>PV`)>eMQh$xOvWD&`~21-)4df{mhn zxIPO3+mw`N*J-GAkt$sK_G>L^Qe`szD<>k{Uzgdv==N900#&r{M#hP3T4-7H>EsRl zV8#{|bGEX|@#{s`%gW|;Zh8=kAlkm#F8`dpb7z-M@Rlmo?~kWnnT_W)A@ZTN#kRF; zB)zx3)Ax2k?RhrcChY1TD5mz$wUh?F`xZ;~BHFCJzM-Bd69>;fha2&dplC_=rmPHi z3<*v(uUxqjgT=9KD8*8;eJp}Fc3}Xw8#*oVU#)g3qeA7#<1MNXhG2v#P1Y% zyPgm{OA;*k_!hO9B+*MkP1Ce*PGa4yN<8$Ommg+Q6kT3xc~M4dM}llMDr0^ce1G=x z(d|@{gcg1$hLQ~KZHoQiu}o&EYd56jZoPYA7BtS<_l}|M1yPLJ1G4ur8ZmAU$Um|w zyyC7PWtY*u&+yUyCI9Yyms>(Xsj|W``rrL>7>>!kqRk#t@=NxriMUa8y%2i+AURM) zs&e4=>w68i45PF&AFjFAKMR zo>kg@xJ?>Ms{1DC%?)WGQ?_5%e$h-R8@?HP&iYZlip~2gCQ-WQQQtl8`wovrZ|c8e zY!7P}zw!Q+lFOsxShJVD8sY_Ss)DM*+)~|=hGo4KM_Kh_FyBpoYgK$UP~v7Ai;4aS zj?IWUVQ-+(4+lSd%bL>zFUnlce5%Q<(eN0rC58|i$w-#$g>&aE?S<^=i$gsk4nC>mp?`)f7wr4uT)g@5 z5AaO*VgVVSDgjmf{3c1H22$#z;=q+LJgS&V&I+OOMWw!vFfBq@tbxW*#IS_h7}o5N zyJ?DHXz=rGMMw<TP4TRuQ`rM6r9HdJt?|v@HVjgU3rLe z_)iPTr)7e(w_h=QzP-->T5y?vSa6?5i8s|k$J%qaEcX4AjYLsPZdYPgi9O*xJZa_i z)azN-73GE_>qO@wf4P)p}dX;Y9JbIew zRZIMpwME*jd~~kv+ZLw`U07TB#{va?^%M?2ib`+n$69DY*Rk;=69V`PYb%sp&vqa0`68O_Cn7Cit9vIz$1 z=b|C72A{+eqQggr^h|wBtiVY@vD@i4MNwEg?CJ8t#=}Fz-s(Zkj>_TmZ@&=xmM9Cb zdB)DYqsu3p+d^}DePi8%GceRvhCjEzkUzh_YUf1s%}Df<%`d1piJ5?u04o9x7O~lr zz&^=tNq-Z_YzWI5i|IgLCfi*(6#*;iC9g8uGSMToZH5vsjH&kFW%8@k?3C8jBh<E&_R-Y)n#lMUf*pakjCzt2k>v;Fd}aa3FH>)cl)KE$*OfcF&Z~6t&EE=xI2Vi%Q#Gt54*%3CWu%zc!*skD)D zSJ(^lyX0wq)u*a8&Go#VWET&_kKw5Txx5vnc~y}Zm6xh2rSj)3(Z8TOC%m4wQ+U0J z4O+ch`AlP+ip%tWgY~$)Kdofc3-4LS2aF~cIXGw58BE>(r68bS^h)lPW3PYg&Dcr~ zD;7baTJh-Agmjn=0^IwtMp-aJ+}1m+M^~G5E%ld(Ip%|rSB`HUk-C!l(*=f>uP4O0 zA-fC<_~5|cuHag}SWBkFTtP+QwKluF2}LUjb_$MDQz~&eo;>%Gg{e^2t^WBQv;cEb z#uJo#5H|Q5c|&+xgayGQp(vD|iNbq*TwiJl)Upl?uh^h@y9%y9hcgzt(DzH5gY zqYsa6{P=W`yQwJ1iPr*gia{6kw2cl-lT0S+w>tcxJD8T;o`nsLMr}J?c>{JsFF(jE z0#k_9rZ4fYvusO#TU}J0YinGbQnP7SFLykO9maNH(`eOcl^N^=il(+rvpwglyJov^ z%J7tU2k%PVy5rsWOfGl*-kNxOzw@TwCn@N*T7InwNSq^^19<$*Q*JP7NTMttf7-gD z(r&5KaL_OfIqy*m@qt3e5=V>jWo_fCF+PI_29pdGwFP~-4*Fu1&34S=c~gfc(JK;0 zGtBiUEWwE+MhYF0LiL0yPJo57lEItdTV$FtyE0=~C$oe7fvx!d&~kPgA`_(DrJTge-P<73d)>ap$5 zG2s$6Bb3+ujTcMGzk2g(T^yT^s%OW}(6TU6n8McTG#ARsyL45sb7obfNjQ3%x<25S z)M*HsnwUC6OhXhmP<`|S?|ghSf^9?}0d4&j)i3-!I-lW46Y(R8Xq^=Q#n3B!gk$ z(NWAP60-gcd@+JNEc4yRA##Ki0#EsF2BJJ#U8TtgJ}7RV^62_4G0;5sQ)PTUD`ARl za#Cv~$PYK!cBf zdEwF}dR$Upwj1l)Ogm;QlHH5mP@{vb8?36 z_hC1YH}!zDBiuqq-cnha00iul5?m&{LqH7d5dvRvLWcj|e?j<|;L=~mi3kY7tO+jv z=Nc7Yd+~_@z87u&-d_6jmVgBKcLVr(W)l6^)ntj8m;P&?xCS^!Af+iIFAr=r&0Q=k z99&;Jx^*ZBe+CX*b$Y4mNJMvgR8Ko80%kG2m|{Uhrz5Ye_i5cE5@p$ti~ea=wiXb&;68} zhgF=6g@r}b<&~wd#`72dX%74oV}0%B<|GUT!(cFO7$3Kzixv2ZkdP3VhZoGt%LQD) zPX4Q(=N7K!F4j(N){YJ=7yX)=Il8-vv9ewa^xvPq@6*E5`hP}p zaQ)A;fC+*x&VZkA^ML=mZ=k8@#Zh53YflS1o#)o}fXsj~#CZju@QVJ`;Qx2(e}??K zDa6&nMaIz{Xz3>YKT`is{MZ)4_K7o~0y_F>?)`R5T3Au;r)xh{ z4(O1dzcXE(kX=YW_bp9zUVLhm?6ax6nRMdXWYm+oA-v>m?AqV6HUjf!+g&R~y@-5E zKt#$C_^*CiW{9p6!5itWNfHoV{#QSzM3ZM$ncz<8wpYN)?1zHyl}@sU&6 zznk8LEF@b#kNqo|{B^NpFahDvWvc%J!H_2I-uc(ky!P@Mi%D`zE78Axf&_$`MwkBW zV<#ZG3Ov4>&vgF9jb7!`NUO!R)= z{J!wl9sbE0R?`iV@ZK>0DND{VqMY;dZB56UPL2^0lE0_OcrisQ?z$U)JjGq^n8?-K zX<5y0!?Cm10bB6cAL!$oMA(NveT)P_ABf|r#JkUu50pAOPpA!w6`_Uv>!5Q``d>Fi zQvj?e*0g8b41a2Ag6v37otMSw@Rp_m4HbZ1*hgNCw#o$yOI_U4<07EHHk_-+AJ35t zRF6KECce0x%uGPZ$h-P~T>sM*@wlkv6ULly2t}Gm=Rx;O z+x20J1#X2tU{?(Hr!)`mR3>RCJb(>8s&))sYp)JlzdZ0n55 z2FHhk{}BxvCVsQ)KaW2TDROczQ1Tk5 zT#MWBaG3qXyL)kiaBu6}qi45*Kpc`SRb48|ec%s))_w1V2>;9;$E3FmE?Ck>MUGdx zvexXE?nnK2RjOB*v{CLg%q_%gQ*HBV@KWb*%@*=RI6^Xc)q7CPe{3QR%|dqq+NQABa;*gE@ZG5B z#UHFq79S#N)#&kAk{gbp=}ptnO>58oe8%A?$6Q0uY2=*kVqcnVrDbmg{%~eyRNt{F z92S#%-~VJo5V_YUQY;tEG+O68&xuV&ISf+1duymJ8`b~dm0q?Lr-8TduR)%G(fev3 zB2%fsGHfpI=Bj8^>Sd+upZUE>d~5}4leVSy40dHf#r2EH^0k!}E<_P@Toqf*Cw=aN z4eqvu>i2yl_;9~tRqcL!dMFQ8bJaun`$at8J$xv*68g${;T%76K5?>za%6C9EXTO^ zi|MW>mHf%tddYo_g6K*@EOYg0b*q1Hcj4x}O0kk=oQ==&m#`ws-edu@c2fNSJa%KJ zleyH%s>$cDM%aB->*(25pd6D|dr9N20tW|2rBuij-C74sqq6Ld&crcdd8a#1+^&18 z?nf3mN@eAyb=8-VWuJwC&B&p0C6Y`4+c{ z3X9Qd+p*8)1%}8P@??kV5$%K00DN~cziqrrfB>A$X|1?+GVzJ|R39!lzSsENGpM_a zqX1GE&ptevr^;+Q)9g3yAX_=j045yDO5)|F`N!q)*gMGN8c$v73PA||asuCm;D|FI zr-Z^=xFJ=EdLmtF@uSS9>A_!75nv5`RT|)KZaSt%{*_&`#Bj?&M@XTEZYm zl2~EJXG<(a%%=vATPxk+v#Z5;2-pngAGxqgsK?8PVuu|XcV3`fy15j+>Vz2ebz+{{ z`Kf>(UE!E_y_h<#k9I`4#|dHcMVJDBv3Jg^ z?phWrG^f~Ayf^e-$sNs+kNsq|Pom`5u<{6P7Qv<9-&23bV`9ix_rTQ^0xd`B23qF};C_&sI~dkI{$oy$(gFtYX&5TP(KO8rA|7_| zFsqHau0E(mbpNO%&FlTP=D3Z$0U7G*SXJ=}NG=xFu$&dK-Y;>!Psis!1=!1t?XT4R zM@I(C`Li`dQ!4@(La)7EL0Fs!b{wvp;<*Vt#BeW(fR_DueFx`x@Zt{5?&R0t9Md&& z=i+11L~+1wcKUYH7%pM5ihAmIjNI+wz#vTO#!<#kL=QU@TdHnZM%X_8NAI8@^S7c3cbQ1EE-0N) zifkqr`eouje9D!g{WX_0V4S7;n~R+HIf4Qpu3Q_7Pndmty3F&%i!=D zSfTo_&yOd!QF*K$hU+NJgAbGMPaaGQJxjCQUOX9Y%JT4CM@d)PT~XqHn;k7a86~n= zcjR<{ff?&pyps178e#+G!`o~i)yiqYBizXKiZ|Uun0E~PHm@QX1U=5#(b;A8fZtdL z+PxgFZQwe(1P6W2SGvi?7gWY#J&xRCAtiKXiA+H`=8@?4Z zB7$2xm*4zn=PyZjxsk=>yhL5ZbSs}Yflo}fEMwLMj(^K2Xg&A1^XQO(f1i4v3DKO45au4Ex{(bv8(#fpdyCz~%HVh)l;(eU+ zF4Bw3EMY%f?~saCLR_DR?8RzSXPh;-aa;P-;Rnbp&&uI?{WCr$(I6wZ0=e+dyAjoTkm z-S|dtTr?0GpOAnIAD_mwLf+Tu*E-0b0O{!)S?0NHxo8i4ZR{ibuQ2AxPUe91vzxx% z@m!dIV!djG!M(1+cy2?RE!26lA7HoOKY*29!*4%192YcNY8k9tn|2Pk$EnqW4K(_W zZPE3qZ(JAVNg&|N_t3YK5vFuB(hZmtdx`VY%8Q_(<|~y*o!>sOC2oJ^U=z8e2Sh4! z#_+~I_cRb~Y58i+A+BNwh$M!dK@fVVqN@UtOA+8^r$YP~OCF%f6UAetwvE*4en}S& zvo~D~ePQEAVXMRJ*2ji`=}`gHU=r?DeHe5CEMI+0gL}1iE}Unz(Q9ui;7)dzbGOvP z9jvIXqJTIy8_WzC<)?mut1_A9ol%?6+dpvIqwJRpo%_>7#^|^WUhCVHhgRF8M@NkV z{Awcvry;~j*vX^W5Nf5;?h$SM-bmAKuG*?dfywV8kT&y*C!G2$|+CG-}?A5 zx(};wx+giYkpDqa`4D`K!v9JFA2I2{O@qFwnOB|c*#k(JF}7_-PxQr9Nzwmh2- z$Z-#jPApVT7o8Y2gc%-+PMkCO?W+%!+st=H8(UDZjCY388{MKNNOSEIs+sXWA%?Lh zFVsr#ulboLRYxw&ZLS*|{aO=0gTGTge_(c)YT$qt&_CXmNJzq*xwRW5(U(V~_-)l^ z?3Q}7Mg_H>xMPz!wv6-nCC-krF9M*?m1;~2K_pCNcld4E!JW)Jki>e{jobvIa444{ z#G`-}PiHf;O2^ZL9o4u0nI$Voo=YM?I)&T0iZXzn5IT#1xA z0lW|Pp>u}cf%C&n+CT{L(8~umL_^s>_y7(8>15@U9bCnh;ajnRIzMYwrn{Tr3%Cb6 z`f2P|k!yxi+tp3Q(151HQ{+~&tGVx1(_tfIM~>Kz-~TrIySsEe5P582Y4c>{6aVcQ z)qOqT{Q;R`$C+jh;!h#wYIW`{frQ+5*Ra`RpZs;D{{XYeHzI1CwQ>^DjQrbYD0@tW zP>a7FGjLV*)zoRJ0zzhaKH}*h9L#G$ei(Fz2OFjdQBpeR4w$sg^D@ly)%sGwQQBCc zfJfq0%k8F0=o54?la~F)T1aBRS-u4@hIl@=kDbhR6yGVY2w*ebtOVg+W4WFBOm}b z54-E~T_S{3bm*j2c&+HB4$|zWaqiO67K=A!3UIea?Jw{3n+}!$Q6C9DW_zEUi{42(32q47X+vgx*wQ0=Ibl4koM&kA(IE z?>f9|2Z>uYZB|S4>qOmj@Y;!C!Fv?`sY3eJ`$=?27Zyc2^@N z9NB-AMeUXA8=`Dc6Gx;?szE5}7o^6o=66qhU>oq3ECMZYD5vipE&FxzQLewb zUO!#!$logjAv%iSP6Y~{K4{paH5(MG)$J_;<0uqi;a706X%JkY&wDH#^iea;oxOb}$Lmq>tWb^eV4>8e(^LN=L`4L9T`WC@77 zKc>j^=0dON5US%%k5dAC$@Zw2M91;J*e@eoW)KR6E%4;UBOs!39kIvz;_Od$E8@#}*nYQ#%ExZ283x**9 z6uUbenPe5o)S(&tf|r%Vo-q9*P7$rD3ZuGjC6J0|%xz@iH2gzKpY znyg}i+=lbjxi5WTwd$gJ9O2Y{T`oshwhf5Upi&)W$f-x`sd=H^d8g$|9F08S-cy@Jh9YFwBU^lo%*Fw@9^Y#XY+y zaqJUzV}`AWCky85?%#M)|ISc|-wfG_V2Bpx-Vyt?kG_8}MRJ{?&Un}xCO;K#%SW5C zzp0WQ;mYW@{}X;{WHA|Vequb7)-rN1<*LfS`|4%aW-y_q1;OFCIW_d?i7q#FWmsszXM&K-oqkN)EV|XWXBR?gCV_p&Z*2HzEb6ov!G?Ms=-{K%cyOnT;q4O%S`g3NmXU&ry9l)6eKR zb!KsUM9Hujzgqi>ACHX2xIeEDd&NR{Ms~cv9*Td*hLr=sLwodC>`cHpCax7q{1eFg z>%*(a61G3E@@FI|MZMqn)Qg?F{ zZ>7n!>V|q^aca54K&L(E-%PZdjXNC-X~;93iy@~9d~2FtA`qJ%XnXoCnbOw1eu){l zYR2YhL6*A!8VK0BmOq0i=qcP$0HEaY<6%M_N{(2*sm%*Sx&+CF zY^xA9n)sX@FU{Z11P}%>i(Jj~@-8X%7zAAU4OuD)`fw(Ic?;}GzdGAI;_l_V?l;@= z(c+*x!&2}tQZG;7{k=ix;*0g1pV#%R+$-h!*lV$)eHov_Z>?4*7s68$r}cU5LE8Bu zZXDl>kS;So)XRa<6&;81n5@o}^cVu@j=}iw3B#^q|G^%JmIo{Cb0=q7sWImmNRgFL zoa!PgIkDQ_d(I4I=L}-rZlXG#oApb=FC9~e!X``LS2eT5#%VT(y=XM1oI4rqf$ScJ zd|Z~FnKuc95YlWqak8`@AU?l8%H0V5c($66{0f^VIA}5y7StAbk38lJO}Nr~ zsN@Jem!W={m+=E^uIkvG(}(X5fQYXjQ+{U&0Ja>@&kj-Zn4?ZM)H!}DV6)r8H*EYS zu_xq;;TJ<)A5+bZY-7oMRYMr!X&q4pkW>V(UAQwK=-6l@2fLy7zsUy8nhe>>Gp{0E zAQb9xtn2*ew|?_j_9PCBeTGq7ltTWgvNi&wn5X;kmHfCf!)%YXY4trEHoo#F3iQ38 zE^(IvgvcRMwmA#59`~ZT2ga3jGEh$z;Y=J8eQ37i>3Z=d6KY?;$jUvYfNbY-h zhUFU$a6I9Gr-RdOmGAJedhFa&Un`&QLVxW~$8&X^c$&(E#<;^KO}YVCV`uK$4uQ*d zYMk!q%nu-~jMJtMB~8Rts#zQ6IIk*ST^jWHdN1s*84h`vOh$!RHq!Cb z(XGf!_wHIK{`^o;P$zG;j$RKcC4-R?8Q0QM9dRDftFgP?p9l%{qBgSq5+63hTz+Ep zsMKiHFc$jl={mk04Ms=f?gjDctyCTFEp=`w6*E5_F4l*|h2htX&-Dso7C_WE9};3& zY<<32gbnEJGI9F(^urYy9uq`X>U7$Vrc3)?xfEZ{;K>5YJEpUYF~7{?$P!n{zX6fN z>f1ThY;uo-^@)0NRmOHK`#+-Ied_3FEbBz zl$aR;(Hi|Boj~>h0V*QOENDwxtyIkrFR`ocD3~oDJDt}wMm$X^qP+WT08pi0pbz3Z z?KgJ}wVI7e@9~QXIHaB~@w+beIGb8-&{HIO8|!HKX^*JH5{J4^@sAmpUm%d=(V)Z& zWu$sGOE6SD_$Qcf3}8uDxU3XA$v=DJy}KutjbXPSaZ>!Dois$6noQ4O*&`U0ugMP1 zqOeT^s3{L8d8Rq-6$Ls@O$#mJVH!GYa@%Xu+czDV@kmto8}^>cKH;@GWWEECxlAvD z4)eovmZtSBOa1M%?`w}KNtJ9Qr`R``4&NE$JHe4u9vjOkji|7-x0x)ID=n*V^>ClS zcEf{j0u>}v>&r@E`|tEh)5z#~u=JN~2Qq^S3G$JBS5gx4e&Vc$;KYJ?2L3C#33Ec9 zO&-bqvI@AxYavHFo{zi(q*?RUj9)}Q-yO8?Dt;U@+TgyHL%jJ3TiMNxOstSF@&VFt z`}OhiX|uL$n27g=ajDVzH~QCIY#0Eu3aVb*HHc+X^|-eW;A~?S^;NMFq=;bG28UAi zsuHtc6cFYrB=Iepku~mfK4NhIt)IZ>CFmFaE-!i&wrHQ0z&>;pLOg+-cPrs;K@Qd6 z#?o3KIXs-Ui>S9IEm|-JX!&!zax)NCl+{j_bw#e`&Hc56_AOO5$TF?+A`RdhC=?)2~279zZm^AZ|t+HtF6bz_M+qdD;{-t7CyNN|*9%kYWDm)VMD$>lrD z{zs;z=r|@k#4N<9$s1eYh{BIT>ab8KrAL;84Y3zC=okQ7I%n>lnh&h$mfGI=XRL{U z=*D;1ZN4Ns?!LX%!qVi;XN3W4V}=qw`lmD$J8 zDC;6jsJS(>?ykT7@xI(*69x zl^`6VMc^GijDJwQ@6pqzE^?ANEVWn26g6%Lmb2?zEbp&8k7&|`l*6yVcVRZT>+L`# zA)}ImLYsif2mcTmXwovwoOnJL0ak*sLzlI-qK!0VU*VgWf!J6Zs6RQn=Q0;+wNx3S z{CA8$J$_R=VVP3Dodq4#8+qEanrwRid@JC5EjUDB5ma8NQKqo%L(3oX00G& z9>~B?WA&kc^jG~@I08`uA}ltZSRP$FgO|-0s3&12S_rL z11K7<7?M-|BZ3apz_0#hJxWp%fG(*^(z1W*#8P z<mR%;F^9ye%?t@y; zH-oAqKC6b*ROxY}AxuS_wI-cCgbUI#ETUas0~9Zx7zs`3qkxPeSv;b01fkV3oFW-2 zLyH(rX$4@)mBE!eWe!d02(z36^##Q^RqZ{E4uuWx&J`%90uq{&%fK_@Vux3a_q_~2j=|EF$B!Jv2;F%`#E!9$Z*B5Q9wd|7@scYlg#^UMSwO>GgFld@=RAs1{^~l@1t;-np-t9XkjU4 z2Kj(GYPH*LRTrt!^fvu@V*Gx5JB+nPUaXSDEbgOiaq0>eX)J0xOM*InBf@Jb4Q4Ri z%kcmx?kc881T>2%0}f)!wnDekl3g`LrDb?+wpVbb%C@v=6k=Hn)N%m^^n6ETQ*WGq z5pav=#S^qyjlbS9OwBgBeD{u3t2pc7>sJz5Rs=T03cNe&CCYviVp7w_niDghyiDSA8Sp zz|wvMo(~t?F=qgTL_DPB_y$lacOzmm?3EJR(NYc|1!B@n9GwBex9ijqtHO{kHCbGC zzODWMo{l3zd^*B?WdxF??Xou(P1^g4m(Np=jTJ8-Oh*5sUspSGDq}Wp4X#A^{XyKO zpqR-k)f)ctH%_!Quz*a87!4pyb`6^L74Y?-ikm;$ zdL99RQLCV()doYgxK9qfl5*)`&!IN}4cm>EnU;iT5#QmH_!{0d0X1}oG=4f@&r6*{ zEU%W#kogy~a|ZPCkLe&{tYv|soaTgr-@ytAebVoVVL6>bKt24}FA~%#cLZl;7oU%E zKdq#4-fB);JnqwAmMl4PK1!sKdn$oAP6qmN4=5Hym#QwkNAVUooHzFhpdW~>f8gum zc^Ev>21>+z4gVp03~&~d!6tE?Bc&$$k8V?#t#+#d`x;gWFef| z&9CeP-4;qd51zdz^EOdI0a}&I&__X@Xyo=&wuH0HzjrP)DAq6}xB>vr6UZNuEUlM) zrQ(abH44tSLUAi*ef#s;Afrr|%J{o~$|(V+)hB>*BIW2OOM*e!4y%m&EI37v8IK=? zr?b_aBZ%N+xO}rr=_d^KRUZpt5;u7#^VRPU*%xCoHur^nkG2QY5@9N|jk`oeMz@sF zG&~S08Qq|=#Rbtj0(P%|fSL;$<}Rut9-eW!8O6sv+7fX=>Xt8(m}vzyHJycMJrvoV z%C-y}lqpZp(IySe3;>W`V#TU0+%+yba0RFxDG|?po>zBnZVe&H^Q#w}@vQ_1A$|_$ z+QoYHNR2QI6^8jc@6?a$XRzT6)ViM{={yWUGzBrcpV>9%kjs9Guxn7w*^7V@7J9w9NCDn; zPr!asD}tjs{E8BEl_i1$@w`RL!W4qnpnVZHFv1Mmn5>@v+Bh3bt^^UY9W7cB7j65r z3=|-euq#8Ie#dH_>fpNTzJ+|>-*WwaFRYF}114trOLi+#`(y!#)m=|dX3hnOgB%#a;?KT*jHtD5p4Lr?mNFYgI*b7lydJnp+G>MJo`!?)nA-XY1tW90e5qW~ z+M@c&R(VnreX6@$dwTlK^7M@?kDsPV*pFOt0X3?}QjnM0L2Y(bsuK9&w;kcOt9Okq zP_FfN_oKGyFxlY>2+u`;ZMGTD@bvX;xX@^+v4p7v*EJq|%JZQ13m>Z0?0LMq;IIKa zM=S5jLqW`-!7|S5i(uX>05E$732K2Fd40oZ8%eb(3u2y5_g+wMf;2HW1B;&_%B?S( zo~$HXBUA8(Xt|%j9)^zyd#t|(SQtvrw8lyVbAdprW6TPu8zlrt0HlcdIEAJtcW#L1 zNU6uL2gV(G*t%*@O%7hXZ-TG|YIbaMtv@$v(0w%f`+~iP8?`f=+7}F$8bCZpf}I&_ z0Hi#aIXHY~OcWXk_Me?my>L+jD;Q+0PZRORso(2n{w*88vz#k#e+gq+J=?~2diMhr zbZ;Mkja8(QCM@7E_3SX>j=ds`!bn1t^&b&0QZ447vRSKf98VHt1BKWy#lw-)=Z90z?w&vSiC(o$lEX|BaOcU;XF#zE?}I$&Mog9hl{t7oHguK;QdmMbBxm(v z{q*F1%^00J5}~>%RZ_Y2VO(=dZe1em#YW&k(qXJk)F*pQtOR6I>z!Kv2!Lcr)wzBB zCfvcyGvWd-*0}_CY{JGD#ALK3*+7l`s)6#ffacrJofm<8YV58wh#*h<<3OH^WmhPB zW?l_YC_-mSg-q?0ou|2v>h7QuIL2-^qTR-wa~u5o5-iUfN;tJSc}4DXMkGdxR8LJl z0FNf6#pW!_j>zzL8qq0Dl>6gxxzAXel)WQYDizMXw)Ao8Auewabty$$dR5<50N8yf zTW@c%7h{#~Z}-b_1TYge*}w}@{12UJ?+ynfKgHNg*^Jg<%>D?m@QbsX)ZV*GzSFlSE#8(IA!sl6&XcqCH@#!LJUTO{bKWXfD`7 z_3imJiF8p}Kk4ri>ov_<0XYK1^@3r9@k)7WZ3e9Flna`HgKlo2dnCB|C`*6zT(8z) zL*bbZM_XIOF+*pnM+FgnYxX2akpU~)mlB{WKe;L+PxNtH6g8qtA zhWP=Aphz!>Ge0#n`Ha!{{GdeI_(ID^k0W%fb*1hSchbD1v>o9$!Qp%>%^le*BS-mC zT&Ba3TW@dY>Y>ix@t(|)REnr@)-vkBC;3FspMR+DlmId0IJHE($|+1AhH>8j!Uxql z*OFSU5p#E{L_~htE^n7)K`8C4;sW%eeLWyN=G>SfUM(BitCv8f*<+Dy>oyl038cLj zLZPFJY=vr2xHQ=)8YsfX`xqIXj~%{!*NfwfC+jt{o#C{p%}C8{w;?W3)RmT=0*;~H&~pV9`9g(Oq*o*?#jdbVJ7PV-t+321LSF|9tUKpMu0pV z5&-JxgD)RSpx60yD2LYieY75G`&kcy$%gks6>4M0j;8%j?1xe&TY@eb(hd-l)77~y z8yJz3gIAw{Z~F~Mk<@F|z&@O-gAIt?Mrg9Ipjw*=hLH3;Z@!VcE0IRZt|H$1%btOn zYc#tMT0O8q5m^RVSC^J+j#^$aQ8R9i4O$u+*^k~7gOerNeDG%M0SGS}CD*F_33I7+ zZm*q^@pMB7s@BzT*l=CwD4r>=Ut4wes<03xdW~r!JfP*KxR)qX^rU z{e+p`gSwoaGXnw#SQ-5G`K$GK*_T?-hFn04R%uH3(1##j2ZEJWHe``qxlvX z%5=NBskU47yVjlv04rROQs$&oAXl4K;3)=loUw!j1G7L$$$;eyKz)>!r30vOgwHE_ z%-W&?z!#-NI5K4ouT~5&LQ7hH&7>5quR5lHY5+ok_=8~Uow6OTPVeXffJ`OFG-l*e zEQVXo-jUEMPAE3Igv*+Zyr zoUZ)|^Jzr7h5Rkk&nGrZ*i*K5^Tk_#zb{Zd>vAox0v&>fxC!0jfh_)Nzp3ixMPb4E znPI0EC|4Y)e_?}&qzO8vBQ+75(hQ@6R}&Eu3v!L-w8<^H^t=DG?@6?}GcRVvBgMXEr?h0i70|zl%419>|yG3-TGp6k7Z7uOcYUxk&Ji7)oG8ZwfQ$URmy<+M~nUk z3D8pZsjjNOr|qsd z9oT5S!VTvfJiXQg|1fir=oTWlS2vgs@~5&S-V`y5EN=pInr5HzdtcT7+R(JmR-_{o zi(!OK{p3pUB_2A;cin&P2*ihlleum00mfeiKy7`b^}}GK0NWj}YHl$WHwRsYT;0E@ zv@aDzjUuMx()`D7(V&^sa01+B)CIYaa(|6F(^)p88Vn|VJz zQJ$F@zGmp@G)%Qt#X5VF;=`4M5Sus*(|T!EcWav%R*8xS3 zkQBpv?2zoW=_a2p-2 zW5+OQ;c-$LZ`T4ZQ8~r2#L1A^HZbe~M3Du7!nvHb-iE!JOU7hi2tz2xa7;U+& z`MEt~VJ@tHWnr`F0mE3{VO(|zd*y_2N?Hwc829b0TXx7+fzUQ!TxV$lpu5=*WJ*~> z>6P8>ySNZ-6}(|#%>H#J;GxtMmuURSpx?K;RNde!9Bz zxObERkK=EAsJ)h*<$bZV4@*3N%CzNsTyZ_SuC5`K@{*BtipW_Ig(YU}YK(aOs!+0z&dBNRZN&jdoK)n`>)} z70-i0o9sJb2LKB%yb7>R^=phgCX#xzAV{kY#KZ#n(-rc&A>4X~*{rr~#_@R)p03c$ zd+a<8eb8I!gRNXl!8YXrBr@fV&#v9YMrrE@Ti64D^V*=0tEXKq6)FH5Hzjd&)n|j?7kZeps^hTn2P9p;gj6;_GOq3U|aNab#H>7w*mGsE&`>yogB;<7xG6<%( z@Hqml?pQNn$zFQe!Qkj-TEEzvf(&#>f=JqyeM+tEx?}07c%7WMUqV+Dsn(`gS
    s`;Y-uM0?>v(d`*?Z5P`ONIuGqa}y8Kli+<3Gu3c=&vLcrfdH?s+q2TMhZaG>z06 zzRD+u3Qy&;7|m3e&BDI+}uriJZxqB;W!r9k;5SrhY^J zP0u}|2bF}FfM)AfxdcX9_SqdP7|Y>CbLOm}C6g4UvAXi_Qq3qd3f$uUM5mj-EFA3R z3jMaRcl7dC5UpH5jNtY)nDveicRtM=Ey!gyuJTY9Z<*s~J@f{FyfRM^G{X0>Tc%c1 z!i8i*v?gW_72K0Jpx4kYI8=L(zp?1T_&e!0EJ|3@&U48MC-+Zv)S*2mq@f@QFwg3m z+CSy8y_!e-lgw}C>;b$cCM$}cE_>)h2<{2UG40}D`4fU?vXnOe*6P}sDHv7%07y8+ zt}$NzvXj~(_yoRFOXKs?##a%#em-&V>ntAX?V=8`0~M1zMW7STC?(84?!@1CFV{i^ zat=$+jokf@v4OvAa{2dzY{frkFg?Nc zpNmcZacb?~j{M{Q|C`t?boX4GxiQ9n zFtDE<`ByYah_U^=9RF7||3^0dS2X_vvTP%oDO|Hn1`d%kUk@MIM$qM2sO|CwmgHr3 z?L-EPP`Y*U$nM`iqyCckn~T{IrY*nyj``}Pl*UzySq!yN zGsiQkJ_Sg5`yMLZ$4l}1oS$X$Z)R$8X9nrv9%GNWwxD8iI#BNj8=?1DGAS4%0MxH3 zGlM@DoSA;Z`?JInLn%U0kAIYw`3qqEFA=ST=ThV3PoJd%kFCaB0e>9FxPJmJqSjKE zAdbD;qAE|$G*N6s9voJk>W0;WDk4i*a z0m#3VILQ*ubyv4^^Xzj#%S(06#w0TOKO-vdBlgS;gt$5ObI%68Er7H28 zPt@NAnC1CLl?5+vscdq*7QmVFe&uB{D5mf{3HF;5H7YC|{1A3FNZq=7+E?7&e*oIz zvt+@2CpP3tl`u=t;_u6*4&sW_H5O7sR?vQO_C%#o6Jbn-%k)QbAgcu7*4?gJNnlJZ zTFIzh>K%<)`qmH@bV)-?+n{KuU4pIsolQ0}fM?a>5zVA%f8<)}>((x{s{GdbE zKf2wa3>p@RyAwcGd46)V#D@Qf;N8-2n4IVictKYdWIUAJ6eX5sg^^lL91!xb(|#Yb znizr=%N)Oyi#=LfGdEr4hSGb*vB9x`$MzEW=lU)Ro~vMS#4)2JNi2Ce!e zJy~Vq_TCaQEgkV^ogVrS_V9t?#@iEkTCUG`(!>_l6*HNu)1!Siux1V#SHgBG3z>}^ zCn>niPrRuC^OG?*D&(@|r(Ccy6IOcSa&J?`99Ng#m3xFAE%G+dRXjaUB}uAn=7?b7 z#Kk~q(QeJ^#ZI9seUiKO#lQQ+0w_$q-6@i! zrv0bRJZbcsoGii?X`}Uf&BbI7;xThC0~^LXfI1`8`%`TF=#SpXCGGf%nif;a{LXSVO1zjm&g2PB%q1dTt0?0ktEO3g<&YxZY zX8IH1MRP=oyxZFL$P zeYqC(^t*FF!5)JTyJ-esApYz{N9J{*o08NUd!?`q;Y$mAmBokR?8+Y%*!ImNg-HD_ zcz21F{?5vBZV9~nVN6AS6c*e|8qp8)k0y#Qz|R^5(eF`{-C&e>h(#eBkYQ52IJSYV zU8w{bo;wHkvjzcS9hoIBZ%l$(U_3`dIQATA9uWPyMnSc+ zS!yX0Qc$f;h5Ee;s{eapfzQX1R%A<7F8Mi_;mB4yL9#LIUk->*!^sEQ#k2PIy`ocg zytfL<8raRz1*6gKLxlzkLuPHp@nfA1y=EG5f|CLnpq9=`az;yJqQX*sl(A<^tX=m< zCU0a_$Xfn}WFzl|@%J{btJKLd|Cbf{rj#f}GyQig$g{kcF&K>6EaqGm!=|vwB`boN zqDhK0qlv~Tynbt)#DMP(SCjpw9ag@$Pjc*y`C6G~{rHg2MgnmH!kZtA?=RfLsg~R0 zY-y0E65F$AEtH-@b??`mj_uY5$JM<-pMo8lip|IzaQ?Kq)?d(Av1aPev+8>7L4jzG zles~KT?tS0vettzEW7$X3XKq}!9e!zEGT*^z)iRL!*ppz)-qiilW*P^cyqixrqNeS zyKaH2FH_65PtYxHMU_>uC)PGA<}GGTZLE)&G1H0ezNugUQXLoyZEw!(aYo0<59xw( zEXrCM_duy5SZ>jvZ#`nrY=I|peK(fDZ53N&0;$P7vNQw5boYC*>)ylB^oyWdEYxh< z-(G)Tp+DQClV?eT${%T(Lszchf|1MX(9V~7)VAHpH@%UG{hpWvx26a8`b)bKlkDlF z=aY@xIxOs0>l6}mAw`3o(sb*59$B}AZ5)sbV?n5pRgu2plC;?AEJ=)wg@pxGAPhN+ z>Nad}M)ejztcU?`KJ$~DOH+?^Ae}6EnN7W}%BV7znc+mvW77uFt2kxo0$Qv;N22zM zikMSV8M?RH21IH1g{N+r{~u7rSOl10I8io>jl=|h_@@&U<@pB6t}T$2PpKtf+6(P| z+L;4|8qC+zvvgo~GYhNi@hCW&(X-BpwuLPBH2LbTyg~}k9fA@biM5FfPs*gw^J_&k zF&T&!0q^k#{Q^4+KIsJ~@A47$!w%y#;$0w%v}i>Fb8W%05gm!LSJ`V2dc-|D!F5K@ zJ_?UXxSilWIgMt6O_#e{;Y|k(QD3s|Nej-ktaxGSe3pl-toBO{@TfwEciHCYu{eaE zlkyx+w8UW%MY6s_KQYCot^WC=+N;VZXN$)NRUnCfcZUW_W25b_2%ZJ@e!~ z0l90VBry(`nIJQ}ANnoDdT?xIgkpg9ElYOExf6bpZfl1n7vhBmWHi{l`Z=W6{07{{ zA@C>Zl?C<%F(G9r8Qa$4G+2Sp+;`?2N1C_e#vZ&kkwwXKbW-NYSX5iHK{c^*F`4?{ zN*-W${+raW;H@C42w(<5-&Q40ewHyqPK!F)>)VZHp@Ao9%)A3-COQ~({8+gBQg>sR z)iFVy2*1hP@Aa8_aVmBo3cK*bk|e0wq3U|&ULXw-aE24Jiw3=NCjFGI> zYBwykOY2D2tG7pfgLOhM_V$&{G8+vNF7}v2Itk||2|l<#mizHTsYyOItnR3`0 zPxp)`KGM=L`npuM+8c*ZSiW4YvChD6RFstwvD7N{8bw{n~6uCuSS&Of&}A;Rk1FsIP>(t){zewbYVhA z@GdJchrALvokvo8Kw`owWgzATRA>D78hr zw21DDi0IwCWOseC?yhvjDq(KJsS^0U7&lC11GJ)$>CgbtY3dSGPy%F&yk_F zN5Zu;hi)*@DqV9*1k<@-0Lh7`Ys;H0Lgx9hcR{2;(3rT`?50m0pE)8chUpSunFf>TFD;Q4dkGx zP3cqjZpE-Ytepe9veE|!9@X&X1Q4Tk9# z3hcS1Ip-0AbhZHH&09AG%-h0#we+IgCXG}qKE@%(rU3vC1h-zsTNKk0G-A=R! z%Nhx1qG-glIy5CG{O(P6qBgAdov<$)2ue@zSs$p?qE^|RZ1Bl_qJOYrWuDr$Y=Bl2 z`y$Q0h>A}6tw!?<2GqJ+5!N}ONj>Er%ql9TwN#F2a)ckZLg;7o#fy!1_u3-ROFFx5 zAaoYe19?H^JyGktoU&?s%H<7n0&dZ{FPz{|&sz8vQ?b#cMa$|kcDyK<83f~b&@9bi z-)BSc8&;T#52NQ%l@zeNI(WDu=Yiw*X-}$LJiz$6=*!cSlsEqL?_%Gp=y2mtij;Gd zlqXqVyT4vOdWlMU7bVq+2l*<~tFpZV+Dd5g&&*dCo%Ai1#Mb4JZnS2paixA`puD3c|-GFLNq zbIb}A?rRLSzgS#kS(OhrXmqP1IC8QvcMaTu;BenlO&)!ZG~x{vpP4A0>)ds5z={nj z8bEtQzbM9va_8Oy$L0L~pdenHz3#8)JXVWvP!6W!XnOQwN4YBhx-+MNMDCnO|O!>ZTdCDd}s7!1g*0-@P{5$6xs5*+e_VpBP5R|=G46;09 zi%F4B3d3_Vw658EZPdyd9@w+C=(o6DDCrP<+OOn8q2x!cC=*tc<&<}1n!y6+03RN2 z;fP~b4X$Q3kQ(&z{Ii#rs>(jMnywW;61oZ*<3!~JasqXkd050tbGmfF{yJ7;wj@9% zoFc1y4CB~3$(dq)hVw~QPVdo4pN=Hw^_9TliPqrOTKr70Y^RAkA^qi|P*+a+)S1+< zP*0eh*FI~I*%OPMDPNV%nOhbO4P^7-2Q?G?o#}ZASiZ2JgrXtwXW^PgTc_u^dM{<| zkdT0J^UgmrvM`qKUyRRO;CBj%=J?h+BIwhwVY0^}CSV-H|5oorTV&Gzg=fvI6dhA>;Z!pXZy53l1M_OGen-XiE6KD3)WDQj4ElrUcD;p2!L` zOTchn2+6lhNXIYmNy)Ce%9Qq z)y0Q&m~K{#(U1yT|K4I9VR$*It}X**Uv7UowS3Hp2ie{llT-wgmT>)i3_V}T)s@p! z@-@DA;u&?D_6HL$u1H<)NAWx0YSIgu(>X&k)_q*-PV)Qvth*LvVm7E!*La`(K`i0A zF80bn_SqNo5Fb)-H|^mSw37Q4iXS+x-cE@)IK#-#GnMUE$3TL@<6kaOP_!{o+Nl1G zjmN*_?3zEw58*b%4G-|uVpG@3yfltx#3_Bsw=7=d+_Qdx;m-k%&t*}yQAv-(@O&_S zW1ki5RL;~OqehjmIC6fl&sp*X)<2N_;SM^2UTHsS!_mjC;CrWQlrh2Z&}kknuHfsK zkWf%87jCgpGTwAyx+^ec*`X4rdYTh9<5Oik_d!K8*kHre7FUs*E7++E!$u2R-{|*1 zt4ubxWFx=nTlY9`_{aog@}EY+rXSS~r|y{v9~`>VSZQ9*4v85Y$8mOj86V0jJ*g_b z@Z7LW1vTK@hn%E(p%vo9ikdJF3yQNZJ4c|xs|~S61ZX--zgryZa|nI4j_I0wLbo>l zPS-ubH6uVxHavM!qgjTP54mPGwvcvM$W7UGb*ayeUB|>x1)Il0=3YSPv%db3>r#Z- zX0G94D94o!n7v-)D&}nS&`r}!q)Sn}qrOC7{GN1;7Am-_oD}^Q`r85eTZUVcwSZN*mj!`6*v>2OLweY;RZ5XnF2~r&R*`o*8%3L)Vba z1lnFPHqW)Ex*Q7(m~0E*DNw#;w&T98GeM-a7Pe04^%zdusFB^kHeXn7SQsA1Zw%d@Fdz^_KvS!y6Q6x@0iW-H8k6YEg3<+BnRtk5>v?u~ zOnpmjt#G1=HonucYpyo9Nv*FO-wPEmt@6usR#6r7nP>?djviuT02P`PQ9iSsfh|@~ zW%T;ak|_l!Pf2OVmkEg%bA~4u}q_ zC-aVV>l=}=C-qXO&VxUzfVO8uT)e~(a zI;;0#c=lWvcSZMb&bU3a=8TRZeHl6zYUtKtp`~?FeA4AXM^so)P>`+_+V!M(fsnX> zNEcVsm+|iAni?-z-8=LXH}|l!S;c!_>6{sFPGU#duMMnt_mAg{(ksDj(___m%|qCP zBq}PwVI!{Sft~GR0&Om2h z$NB7iBDBZ&`8j;01uF0ft|RZt*fO;^sY0@F16n7k3bZ@QX3MEZQlV&rj6reccm`%8 zr<*ulaRFg*ap67@?~k*}(b$DD;J{pMz1I!v(rAiT(LT>w#oOE>*BPy zo_9oLlAk$4wxa}OkIp$RPPDwTKh*pae9I+I>?Fo1*DFVpEt+>!VCmi;8GYb~RZFyS z1gP@CNiSc{*MFoEV~>mY-jC#cm~%?DUf)>ji>9or+C|p#r|NJ$#j(lwnW1`u&|_Ghta%x<*M2c?_syLqdFi zL#zmwXwUo}0n6#=MZ(Mnw=ffSU(Nk`j#q*HO#NP`)->eZr{cKm<6e8MHtATU#F~!v z0Q^$YwG@Q=pv0iZ0#?^-?#yrq^Pt`Q{q}JaFB!KU=kffFd$bqMHi?h)>jT3ycBZi2 zK4&}&TAiMec@$JQ4?gHnc_?Zf-Rc1pMQbS(Q{ist{m!HnKdJ_{MrwxoF8CG>HJcG! z#U4@+_I%vKUcv5esp^kh`@D;@EbHyszPW~1%~zs$jarxLtaBJDj$ zve3-xKES4M%;!&>O-#z3YTM=xnRA8dGbo3O$i(&4IZk#Rq~eZ9B$SUHpm(}&RDZnp z`*Y%ZlodkQ4zaA?xtC99Uf%GGhmLs`;A|#Nh(B^c({z2lFTwe7IGBgcq2huRO^Wsd zJr)~{1ta=S0zO6ON|HQIvoh-lKf<@CO2y1~Afl@a7lS`-id)}vD#LaeGbGEzQmpF@ ze3Am#xU@<9=)lObESr+m(ii!k@k#L_z$ZqxmZRkL->44QS*l#WLYj=TPX3+yqi0|> zY9mld$N{zfSJ{{S)0m`U=%eEp-Qr@sy8uLn_FASV*rf?wd#r_d*@wbV5ix^TrS=1HsrJ4c40n9a!c}6mGbZlGg@#1m>TgVDanP7NM;x?3sS&-$_sy`LeWETcNU#M!KQVCiw?`sA~K^c2kb^XG@vm`x6J z4Y~MugA_XK6r!L;|7pB^X_q}zf&PthR{9q!;72qcWf=2jP}qNel_v1Ssz)f<0jQjK=aae4)XHg701AE{7c zf9ReF%WipMU3h1*DrNV_NxJxW)s4R)Go$3WTopiW@CrVUpvaJTBD>Yh48##Ga#BsRC`p;6|I!9VH6!QqvKF*injWkjA?kl3#2a!?(kJJLgf{5n4?I&OY30r$FMkv&L zq0tU%zT(R^K8>wq!q~moqij%KMcaCDz|Yz_azMQ*UmV?W=I5DWRRQw$3SEpP+qk!V z0MvDgb)4Glq1+yNVt3way9QZ1$*#>64Oeb>3Ceh&UybJAY|h{E>RWZMVc76JuTRg5 zILb{EWBimVMyBZN={8p163CbpW>0knT?G@J5%#unoG>EYhU0MGseml8(}j{|amoo6 zt;+~UFY8ti<0ayJeF%^TyA&g}+4v7cW{d$Q%2P=6B)OMo)>Pn0?2^UR@n%c!Q9Y_Qcw?np=!-kltIQoU%e$uo)J9InP&-$*23o@cLTrMz6_H;o83%`mn zuN`r<=7MhQdYqI5m3!{ar&e3HG@iFCBE`IuK28e|q3g;b{pe;NEPUf)afeEaOAF14s{^mG&>(7v1?> z@$Tz75w}q*5tG#AMw*z;{ZSmOr)51W8($c7po(UKKbJ%}cD`LOdml~Z8r(X5`T!od zDT-{~ov*Z~qVNMEWanQRnHG>Hy7;z)p?`{|g zXD~$kA`W}#5AdVq;vi{cr0Bg0STe-aRcTW*d=c2$dkT0UZe^WlEB)5`dPqyuP`psm z8+AB$CMbkpz6<#8{+3j zIRIY9h3k{v-?{e|Gw^2GzXGw0e}7djobmx9zY2$e*sWM4unv0adKvzJo>ygz(^S7e zN#+*{P*9ct19WWcHPhz%;6pvTK+0v`*%M^0eJ%H5mvT52=ZUs~P!^^S8+h%tE0?tzn#1)o#?`vz3-~~56(^xUD9b3Ep=ELOebA?zbg zt)J)z%}t{03{p!zumfJ5+P(OAmvWrw4Uoh^CK>TXbq(+eJOHGIlHOsuB3I>dvpt{O z=~-DIeM_t7_eK|nx53yzL zD!{FUGY*EEkAkq<1N@LA2yl(ETfHK;^cPR1oFazqLaon`$uJMxaEu49SXd=v!E>{RZvV%eqKSKD)z+|my^f*53C zB(t$T2%G-D0!Wlh-&ydd=?b}}zv!r_0BG#8)CzW%Hw9%>35bcw zd<{t}fuL+KlRa0!A4k!Bq?Z1=03q2RusbhGn><0sO~9?yXJWjYkAfIzzy-~s00jPJ zg@0M$Usm|P0u|H`@$)>Y*4?=&rJIQ3Cs#+6iEMILvR7gHlZ?7@c%l$*m0v|ofE|B| zb>@<><8Kf-a}prqNfzrPBoG2QasV0kxLhV7BMEPSJ~1!_wItK9!=Uy=CU)AN)RUhs zdcm4A-v=3Th1@67?{Yf;-sr}({Z{x5;4!-M0=|Km4efQJ>8L4Q7qwmWUpAI4We2MWx@ zivMbj5XY$gnb@E5vd(R$HTfzaRq(A>%D-86U^xD?K>haKEbIkYM5K{#UNB~XCcn*u z#B4GDNF?|o01Pb2u?ho`ZAN()SRp)b(ELZX8|B{nerZ5KZ}XEU(GJ8jkv)qf)+Aoo z07mK@o+b5Q%Y~c_(dKwz4^oM@A>D80CHb@dZlI?S&f6b;A3eBpTmi7au@{=#FrZvA znrKoqY5(FL{hJ?j4}&)!TyF~?H$@t-zcw(~AzG>l+mTf+xf)C*4@dj91mYpSnU=h? z-6#*-HUe#SV%u3rEp54=2KGzof!nd$jx(7C%w^vJov!V^yN$h0{>W{jrM2`-ly*x~ zq>tzkP4L#AcTP5+lQSmH*n4}B81?&%*#M~NY`^o1hySnV{MUeVjlt*|wv)U-z(D9( z6N*2!`RHE8Xu!_?kcX4x?r(DXfr*EJ>a31k2=YEXdFK2tF#&cS9S{)Prn9Vn0-3#M zmv6BxCJTel%I9fuDE{8tWEVglC3gqJV{%KI)BzhzjG)OTA0gXqnmhySWBnU_)&kp& z66|^SSyS1)JhROx&;IWIB@0nRCF=4511k~UUONrD^?>SX) zrOE{yyyaMP#OkAc8Jfw!0qL4Ip1dvI@7(Lnb=(w(cp$l5<4l*n5=(IsD~Cf$KAjBy z2+o6`zqgylMq7=Ch8O_|&T`=ar%fh?LcjX&*%u>fyGL`Il>%4*5gq8gY>B^{IeQP> z4yXb(03#C(_4BS}8zWoaS~*{W^H4>1f}qVtiy@!o5LUPD7gH_Uu5xzn6(%azBf9C^ znjQvU;c@msWizE2OZ5#JV3&oOg`ZW#Ml;@XET)4qsx$smB6Q{msDz!d`dNBA9SdBw zz_A{C>bcD}dVQ}j_ZQtyi=*Lcq2Ry;vHrI;eGjO9kOdqkY1tI7_bPQ)kt!cTVR+ZJ z-;M<~OfNU@FJAM%%z)chj~jf-R|sQsoJva-Jt7FPuhJ~ee_=EWa^km{Dg@El?G@=o za(0ufy5nD7?9!(fgs4_6f@-rt;9RD@x)fGipXJ1jhRa6W1^2v?j+BbIF?o_E>~#cV&wy}~A7f>tf{x3R^Je|acpexi**O-dkO|B)Nn zuDlc)-&(!wjJJDMF1eAo+IXy8yG_R>vgCm49h?s`@;Y2Kof(|G33jLPm|F4i_>s}p zP<%x0mHc6t%<}oq)+jsTaIf4swEZIJe_D|Id5b#64c#lE zDmC{}_*Soa)gm~p;So6Jw7D*&;?M2cKJe)tm|C_kG~40GD=Ohbg2eLlwol`|=j$B7 zK`u4%;?6cmHMS*CFTVR`AnO!z`R?ybLA;}{28f8|#%^)(kRFsfMH%uy8Pt{rhwyrO zmfW%CIY_r{?{1qA7g1QzqrY>vKP}G_o?EfhLE%cy*KcfNnS<64#3j5$sMmJp?r{Zw z0D&Ul9F5RpwtR02mj|J>pss6wrs(-?EN37%Rqw&_inlx=a=V^#zm{`W6?Ao)ymZob z8&3mpComD+TYso&Y$K*SnT(G|JxRMW`5tex%{+jYBZ)8nsb;X<%lfAQ`v4S>&p*0t z$CKrW%jV&>?R*FRk^6)h1rPB;($fDoD`(;^Z2emPcKDrqXs1np@&hFU3QgwiXma58 z3-B^Eg$OB%gA6}%$*w!?OTI@=^cL7o=hpKg+FlrwC1R_fo4x>xLFQQ1%jB^i{4nIf zx?>xbxO+$!nt)-N?pNNja`b;sT%%4C1W3xvpOWZmnxzqxCV%s<0m$tkE|b5S{83Nt z^A}3MgG^to$qUuw^QK-aJCt4@PLPmynK_m-QI)G}Q>WUJs`jU6l-fW8f>LA${919od$wv$?|F-sN*IUcc`bbfuADB4c38J?tx%34Uso#@cW%@?USmd7<#i~2BL zJ$i0oB=l5*Y41@uZp)nhfIbQ0##wETEf;Bj=lBr9%rs$Pn*JLEe7H7;UtU6?v3@F`WMmA~#@J3uVX+LO|q7 z?^4Yb(%{bC^iTJjl&#Q}U^3Dy&F3k^#W{@C=AigGn2b=rxewKI!GO<{6)=&ZAbEhO zrb2q{99| z(};w8+D$6>m+#fwrR>lQe3@eO{OIQ~M&r4vEhQSMpS<%YV#Q?52G>@v$EZQr@LWE1;yG2E=(u9;>uYaa+<-)h7YV`}(;gpj9I?^xJX_#;I+@clU7#tzm zASufr+;~fABu@F$V*L?kv-b8Lfu*>h6|c^I6PSog=cK*Qz zi|`?Sbo{mGtnMP{bS3U3m`vMvqu#|*xMo90S8emdB5)KPRZN=-m(uZD=S_PTD>8m< z=)fDWFQKpTVXIk84YX`2zfCV`U>I%ju{f&)8!?T}fEZZ)O}L5)iA!;l(a;hd-5pTZ2Vaq_6J`(o24_ z1OCX?$$kVjRIyDPQulYHKqDdAY>^yVcH}j zKH>DgL>JA$y&$L%BeT4k@8R9h{^m`56lYo_4M?sLltqyFM z&{x~wsj$ttPQFaVc)3cr=Lu0P5T`f+-&h^`eh%P2>l93zi4?Bzw@l>U1@ChmpCa3B z+i1PpF>*OOmB+0j#ph8mj`esG<{uyA!6(|N{4#JCDIim!MdR9JiX;~RXfiO+gpugU zs+i0}33ncA46DlW^ z=U33E*ZGrN;?;{W%@vOVWfJ0-dR&6vr=2j>zW}|-@pDJ~YlOJbVor<3a9e}b*lg?W?9nf+SqYNWH;|<@?o8+-8GOB`oL^dx??!d{ zh}+|)SNdk>p2k1ZR|ZfkfQ~HrbzS=aY=7$SEi(mGdN#Q_$N->k@pAJtiFM|=zr<3s zeO8`W=-^AO{Sf0f+0bweUSb$*sVYdA%k?oUppX`P(FRu&OfV9cUB}fFuXt%&@D4C5 zvx0cDo_!3z+R;Ho5C2us&%&f8_AHCd}MzS%xjm%RBswaq*9Q!?vHgv}X2u$yTbS>yf9c%J~F zaYr|Y3C6n}s_P4x>R%V0&biunm*VCeN4Lax%_ zjU=PwqZ&R+SWLAe$E=>czUJrVHrD)D`R!tca@8Ut+wx}pM~Wiw2~P#o5soDAHoy+zRdlU>r0(^`q4arYIO;q|9AB;54n z`y<5lT-P3p(8rWL{YO5Os}Gi$S`hRK&99d^ast37xN=1Ha@qfD#)Gi^LL zSIn^lX80?K0Ub-qf@N=E@xf?*KjWvIeKp&T%N=5BLR(9FP)5$`jl|&)pC+4x_KcCV(og*hFu~z zzS9W=8#Gc}J4C+Kvl9qH?0v-yN_d?$ysi!=yWO@^T zF!L1^7IM44ZxtlRP(GmNSMkmAjXFVa-WOdV=4ffSVLwCBHu}0%3x|Ek6Nw5JKT%Mw z_paSgJlt>cLz3zv=E@Zg=eyQ~I|v44=Lk)b%G*>yZ{_5w+Qqg6bbtjdSP^KdlLQmE z3Dh4`v^@o86l$=J$5g-boY|L?17>~S@zuG=vchY{!mE^L_7o1{)<1f13Kfl>?kWWs zYjp7cvAhWER+fzy=F0MfUQ)f;;yWNw8y1OXL2-8qm7cb46D>V|emun)XV*I|Y^U#j zn4+!pWQlYop_4_xariz+E3&eiMY4}}Uggpn&I5syJKypmbv=TJV(Ue8nHoymXe_WnNeAzi1m6l$kI4zl(CW7hV8 zDB1ik?w{7kvdvflbjCN#(<3CU#`snakWoP;?ID-KV}~0B4r7b0KwU7~(oDy+S*NPF z>84(yKb;^3^F5s!DI?=$s{1Z0^ytXOGkHrS}=TQwUyF6MC7e5;fxeCNbR)@Og2VbcH? zdmzuZ=$zlBsesZrXNlrM=U{R&t}IE@Ln z#zZXKD9UXZYD$pM+M~rK^sZIUdA#;@P>Fy&EWfwJ!UC;VIa_kvRJbi;j$!E8L5IlaX=WoHB=3?QKei6}f8DGZ04x zpoOnyy`C00ZLMjSk(eG^=W4Ce@L)%ZLoP0E4Wn#qTE zz|93I+A4wWqDeYbYFaW-_Plzx(qbrL_j1T-yWaMQy5O4oG0wx-IicYX=kmpd3`~FpCzzhJF`CQ`n zp7ht4@Z;m%4wkh;0kEFiZ}J?9nsP>h2<9CW(o?%GqiEkIHwSrmO^eO7JP(SNb{H&r z*IF9EJYRy`0T)U2eD4tYkR`kFypQWx33DyQ9`@^b#mN|IX;WNXEql#AuB_)Bvu{2u zg_X?|i}O@2tfvzBHmM+sa#PIzHZYTk3jqk7+7>POyI1|qkBpmXU=Tb2|5}tm0(eiJ zxK17=yba8w7zKwT*JrifI%K`U$GKCZ$X;d#{8T_C zTc5)m(nV1cQ>wG}-Jz>1!59}G?}eLJYL>sTL0BGq1P*W$l#Xy-;3<4`CK6PDiF=Bv zU>&JE#tiBz%@Nq`A|oqTaa?n))XlGb_8%3#AiA<%^EBUKT2Xby`;5>`2A?!L=COy+ z?)`?`tYR^!>wz2GY|xboUHjR6bBkQ3Sf=43V+k%&=(w~wH_Np{+Q*It^X1&SXD+h* z9jjwk6a1=!(PEBAKJ0%nHW=e05_KOyoi$ci`3j~5VX*9FQP&?TGhDTTc}3UG zg&Kf9&2Rkph#_~kvVjCfY-r=8jQ0l8W#-za0+5ieDuwR9u=r`HJ+AqEdGWViuC|Ks zLRiJzyxQ3{45!AfxwJGKk2h?A(3IHz7{}fEpb0CnaP^j4|7{vQuoF}Gc*V7uy_!h6Kne}{+3~PBM^N5oT$}h8FXQwYKzA7xP zl|PlfFWL>=$%DhPJV~^Sea-_w;i~Exm0r%II@kAgR<#EeSfd7Y2-ohul7tjEK4z6Z z?-Q|8u?yE!YW>D#@lDvsNSMr<^w=g;jLu-Tud2Pi1g3(3t97iDJ=G-fy-2{evtg>j zK*-c3-Jp>e|{& zfyW$`*VdRTgHoc7JddozHyO;e-887}GJ!=TI^pIYUI!k>qI~XEXQ#2$k?i`l``%8h zcV-VdPU*pdc#TS5H`gUC53(MtY>H3EtwS;G)X{~V<>8LtNMTl>ZREY(kr??6iXG+= z9i5L|I|q)RvuTOg=_aOcb@gbu(QCD#tDPooh4KluWQV{H%`f2x@M=%@EhVyP{iOyd zR>=NLvbomEbhg89^5_m|%?uaaZ9!99WBg~2^9;N`GYi&`(iU(8a>dG8Th0bspMrdK z=Hc?Spt+TWQ#KDSz@UpS92Y7#VyLvT4lYaM%$~cW^_#y96b06b#$_i}RIbe1nnw*R zU&9b>VJf)T(CXF9vUkg<0_o)jhLQQoH36TE6=#R)CoeKyFSGmb3l`$OxwmO(6!kfF z6|YUjO%G>i`|LJPU@|;O%u#SnZ02^#{eR04nnD2<#;GFt?Ba4Em z?8W$=JoAX}xGTVji1%%J;P~}~f_78~QqR5MqQG1R$Ysyrtab=B;a3HjlqMS#b7Odu zcE~dsS(l9g$BAY)HB2^ga;Dom7}AOlUiZ*8^jJSKNkE2G9I*AV8d$8DNeTe&dJ)X1 zX3IBr@0i32efR!I85pikA*az2RoxIHWY$t0`A{LzQ+oG)-TagRvh($aLyA@1v@_n* zalD>kYLM+glgp_ z`dO>cER!K?FZW|VzsdJ+tjUD_3ZrC|HkEL7vyc+Ev?-sJcT6&kMN9Q%Zo}=8limv;$c%YzwNKB~M^*H9SWEWckD4)tSDh zD<(c4V8gYtJ#HtUZCm!H0H{cmR@D`S28q=wXIri`bJ651jq%HwnD0lPo4R z8|%oc$PPCi6eD2$4^9`}2~$POJf(`R&>f{{o1dRo)^#?u5#Vz^ISI5%EB=tS;kg;; zS_;vUl1^1%FXaP(ql;V)L3ZB`ZybS3va4o{()0T)V0Fw=5u&On6OTy|kaCZQFH733 z5k(SeLbE2xyZ?`fxdn+GAEm)mWON7xqgWS7pKZ!9G@HlBCJ~Ks(EX@?9<{@`?=vv>D{&Z z_q@If``$=PasK3)EO98oRDaJ$QtB~qYd3-&TZm}PZt_4YKzKLeF=vf(2y#p?GAS(;O>O8P24mtzBbt4^PyfV8a|coE4ZDlAGJVu}e#d z5)R6#xfr^4e4mtJ^Pca}gr;L$nlaEkl|ghXTWzOLK{y zaH7(?$wl+9A-h7vOC>9sMJ;rd!x)#lsLGGfUrAw3VjfR&b;1=dCR>aQDwsU<-@&Yu z#JBPxZLW*D`5Hz|cKrQ?*(awmVmt811lF*JmshRk!Xa)~>-7O{eJe>d%T6d##`i3w z$_C3Cds`sqjA7W63&Y9CRsq{YQvl^C&#pM-9eiU}m)bemVVZ`p|Ha;0hDG^xeZzt% zp$LkIAgKZZ(j|=|A~1l`4N7-QGk}VSbT@*8LrZsv(xKEyi*)CJ4E65uPt0{)_j4TH z&-=d5^X2}+!NDHRIrrMD_FC(=R>xR(w+`k0(7l7yLb8u@#3y>?pI`FXfc3ucAsrpf z!wmv7W~OCm#RL$qc+B+uiY7S~jiQ!(L(p>v6_8;XYo%mkX4N2M8*wnU#OR?1ce5zz zd%Cf1w3oWDxT(r!IyZ+tjc@b5y|LnSry@M6DO-(G?;TY(g`NcK?-=AW*FCPl-w2ye zzk-vWjuxA#AABy9Ys}%*CP7^$;;q*Qz?C^jX4gcrj%!Xg%7W+Z?T4|Ny9bLTpSC@) zzjDN!S=6wqxfUeoWVN?j0ZpaPqnkoG<%!Ny`;$D?gD#^=6I@$roVP0vd~P$r4J z_4O3s*KEI3ecqB5o1KCAZ^R&^(Vf>gN;v(|>C&i-5aY*_*rDi~YsMh-3)0D|Flgxy zXz^D(;4ioIs@e3d;)Yl}05Q+nZj|qvP)d89TW{-mL+Lg~rTYrpkF8$HqtvE1i|KD0;1am@8_b_@zSP<9hR z!ek%S?7rCh=&Bp^}XyhF39zBC0V@Wc6)~o*?1tq(qHS(tRWX zwAs+%Jby_u+vBUUTUdM|vN4NQJZgO%rBR-*t~2peZo9Qt4utg{lk1pn&7i!F%ZQQq z(dc`g=d4KXtB%z@DdOks*@9HYmaWAtCmJ|KY~3g7Ou)e1pl zg-jGHEc-j3eE-$gqFLCG+GZ?>1UIX0h5gF<51X$C>>nLVo5_U-XF=|4W#3r7Dwvf1 zf0b2SLlLq|JLZ(?UJp>cEqW8!Ps*gcQV3DG<*B`$wRw`BiTbBuA5u8pdh@s=X63Jm zXc~s7Lf?*lFRWVYkq#T>5c^WR0`VoF>uMb=_cT!^J9m2Y|L}!Z3aTI|HizTsF}Go0 zo�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
    ijn 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